!2×2の実行列による複素数の計算
DIM ZZ(2,2),T1(2,2),T2(2,2) !作業用
!行列の演算ルーチン
!関数 FUNCTION tr(A(,)) !行列Aのトレース LET t=0 !対角成分の和 FOR m=1 TO MIN(UBOUND(A,1),UBOUND(A,2)) LET t=t+A(m,m) NEXT m LET tr=t END FUNCTION
!複素数(二元数)の演算ルーチン
DIM i(2,2) !虚数単位 DATA 0,-1 DATA 1, 0 MAT READ i
SUB CompDiv(Z1(,),Z2(,), Z(,)) !除算 z=z1/z2 MAT ZZ=TRN(Z2) MAT T1=Z1*ZZ !分子 MAT T2=Z2*ZZ !分母 MAT Z=( 2/tr(T2) )*T1 END SUB
!関数 SUB CompZER(Z(,)) !0 ※Z=0 MAT Z=ZER END SUB SUB CompIDN(Z(,)) !1 ※Z=1 MAT Z=IDN END SUB SUB CompRe(Z(,),ReZ(,)) !zの実部 Re(z) MAT ZZ=TRN(Z) MAT T1=Z+ZZ MAT ReZ=(1/2)*T1 !ReZ=(Z+Z')/2 END SUB SUB CompIm(Z(,),ImZ(,)) !zの虚部 Im(z) MAT ZZ=TRN(Z) MAT T1=Z-ZZ MAT ImZ=(1/2)*T1 !ImZ=(Z-Z')/2 END SUB SUB CompConj(Z(,), ZZ(,)) !共役複素数 z'=conj(z)=a-b*i、iは虚数単位 MAT ZZ=TRN(Z) !転置 END SUB SUB CompABS(Z(,), AbsZ(,)) !絶対値|z|、ABS(z) ※ノルム MAT ZZ=TRN(Z) MAT T1=Z*ZZ !Z*Z'=|Z|^2 MAT AbsZ=( SQR( tr(T1)/2 ) )*IDN !!!別解 MAT AbsZ=( SQR( DET(Z) ) )*IDN END SUB SUB CompINV(Z(,), iZ(,)) !逆数 1/z MAT iZ=INV(Z) END SUB
!関数 ※ベクトル系 SUB CompDOT(Z1(,),Z2(,), Z(,)) !内積(z1,z2)=a1*a2+b1*b2 MAT ZZ=TRN(Z2) MAT T1=Z1*ZZ MAT Z=( tr(T1)/2 )*IDN !tr(Z1*Z2')/2 END SUB SUB CompNRM(Z(,), nZ(,)) !正規化 |Z|=1 MAT ZZ=TRN(Z) MAT T1=Z*ZZ !Z*Z'=|Z|^2 MAT nZ=( 1/SQR( tr(T1)/2 ) )*Z !!!別解 MAT nZ=( 1/SQR( DET(Z) ) )*Z END SUB
!表記 SUB dispComp(s$,Z(,)) !行列表記の複素数を表示する ※z=[ a, b ] PRINT s$;"[ "; PRINT Z(1,1);Z(2,1); !1列目 PRINT "]" END SUB SUB Comp(a,b, Z(,)) !複素数を行列表記する ※z=a+b*i、iは虚数単位 MAT T1=a*IDN !実部 MAT T2=b*i !虚部 MAT Z=T1+T2 END SUB !---------- ここまでがサブルーチン
|