Date: Fri, 29 Mar 2024 12:25:11 +0000 (GMT) Message-ID: <1040365322.183.1711715111414@[172.30.0.157]> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_182_1713697560.1711715111411" ------=_Part_182_1713697560.1711715111411 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
This document explains how to perform complex arithmetic in AWR Scriptin= g (VB).
VB does not handle complex arithmetic by default so we have to write our= own functions. This becomes much more intuitive if we also use the VB "Typ= e" definition capability to create a new data type, "Complex". Below are fu= nctions defined for many different complex number operations including some= matrix operations with complex numbers. In addition to the functions there= is code that tests the functions. The functions include:
Addition of complex numers
Subtraction of complex numbers
Multiplication of complex numbers
Division of complex numbers
Complex absolute value
Complex inversion
Real of a complex number
Imaginary of a complex number
Complex Matrix Addition
Complex Matrix Subtraction
Complex Matrix Inversion
Pub= lic Type Complex re As Double im As Double End Type ' Complex Number Addition function Function Sum(z1 As Complex, z2 As Complex) As Complex Dim z As Complex z.re =3D z1.re + z2.re z.im =3D z1.im + z2.im Sum =3D z End Function =20 ' Complex Number Substraction function Function Dif(z1 As Complex, z2 As Complex) As Complex Dim z As Complex z.re =3D z1.re - z2.re z.im =3D z1.im - z2.im Dif =3D z End Function =20 ' Complex Number Multiplication function Function Mul(sign As Integer, z1 As Complex, z2 As Complex) As Complex Dim z As Complex z.re =3D sign*(z1.re*z2.re - z1.im*z2.im) z.im =3D sign*(z1.re*z2.im + z2.re*z1.im) Mul =3D z End Function =20 ' Complex Number Division function Function Div(z1 As Complex, z2 As Complex) As Complex Dim z As Complex Dim r As Double r =3D z2.re^2+z2.im^2 z.re =3D (z1.re*z2.re + z1.im*z2.im)/r z.im =3D (z2.re*z1.im - z1.re*z2.im)/r Div =3D z End Function =20 ' Complex Number norm function Function Cabs(z1 As Complex) As Double Cabs =3D (z1.re*z1.re + z1.im*z1.im)^0.5 End Function =20 ' Complex Number Inversion function Function Inv(z1 As Complex) As Complex Dim z As Complex Dim Ident As Complex Ident.re =3D 1 Ident.im =3D 0 z =3D Div(Ident, z1) Inv =3D z End Function =20 ' Complex Real function Function Real(z1 As Complex) As Double Dim z As Complex Real =3D z.re End Function =20 ' Complex Imag function Function Imag(z1 As Complex) As Double Dim z As Complex Imag =3D z.im End Function =20 ' Complex Number Matrix Addition function Function MSum(m1() As Complex, m2() As Complex) As Complex() Dim n As Integer Dim i As Integer Dim j As Integer Dim M() As Complex n =3D UBound(m1,1) ReDim M(n,n) For i=3D1 To n For j=3D1 To n M(i,j).re =3D m1(i,j).re + m2(i,j).re M(i,j).im =3D m1(i,j).im + m2(i,j).im Debug.Print "" & M(i,j).re & " | " & M(i,j).im & "j" Next j Next i MSum=3DM End Function =20 ' Complex Number Matrix Substraction function Function MDif(m1() As Complex, m2() As Complex) As Complex() Dim n As Integer Dim i As Integer Dim j As Integer Dim M() As Complex n =3D UBound(m1,1) ReDim M(n,n) For i=3D1 To n For j=3D1 To n M(i,j).re =3D m1(i,j).re - m2(i,j).re M(i,j).im =3D m1(i,j).im - m2(i,j).im Debug.Print "" & M(i,j).re & " | " & M(i,j).im & "j" Next j Next i MDif=3DM End Function =20 ' Complex Number Matrix Inversion function Function MInv(m1() As Complex) As Complex() Dim n As Integer Dim i As Integer Dim j As Integer Dim M() As Complex n =3D UBound(m1,1) ReDim M(n,n) Dim det As Complex Dim Ident As Complex Ident.re=3D1 Ident.im=3D0 det =3D Dif(Mul(1,m1(1,1),m1(2,2)),Mul(1,m1(1,2),m1(2,1))) M(1,1) =3D Div(m1(2,2), det) M(1,2) =3D Div(Mul(-1,Ident,m1(1,2)),det) M(2,1) =3D Div(Mul(-1,Ident,m1(2,1)),det) M(2,2) =3D Div(m1(1,1), det) For i=3D1 To n For j=3D1 To n Debug.Print "" & Format(M(i,j).re, "Scientific") & " | " & Format(M(i,j).im, "Scientific") & "j" Next j Next i MInv=3DM End Function Sub Main() =20 'TEST OF THE FUNCTIONS Debug.Clear 'Complex Number Decleration Dim Result As Complex Dim z1 As Complex Dim z2 As Complex =20 z1.re=3D1 z1.im=3D2 z2.re=3D1 z2.im=3D3 =20 ' Test Sum of Complex Number Result =3D Sum(z1, z2) Debug.Print "Sum " & Result.re & " | " & Result.im & "j" =20 ' Test Dif of Complex Number Result =3D Dif(z1, z2) Debug.Print "Dif " & Result.re & " | " & Result.im & "j" =20 ' Test Mul of Complex Number Result =3D Mul(1, z1, z2) Debug.Print "Mul " & Result.re & " | " & Result.im & "j" =20 ' Test Div of Complex Number Result =3D Div(z1, z2) Debug.Print "Div " & Result.re & " | " & Result.im & "j" =20 ' Test Inv of Complex Number Result =3D Inv(z1) Debug.Print "Inv " & Result.re & " | " & Result.im & "j" =20 ' Complex Number Matrix Declaration Dim SResult() As Complex Dim n1(2,2) As Complex Dim n2(2,2) As Complex =20 n1(1,1).re=3D3 n1(1,1).im=3D2 n1(1,2).re=3D1 n1(1,2).im=3D2 n1(2,1).re=3D2 n1(2,1).im=3D1 n1(2,2).re=3D1 n1(2,2).im=3D3 =20 n2(1,1).re=3D1 n2(1,1).im=3D1 n2(1,2).re=3D2 n2(1,2).im=3D2 n2(2,1).re=3D3 n2(2,1).im=3D3 n2(2,2).re=3D4 n2(2,2).im=3D4 =20 ' Test Sum Matrix SResult =3D MSum(n1,n2) =20 ' Test Inv Matrix SResult =3D MInv(n1) =20 End Sub