新しく発言する  EXIT  インデックスへ

2×2の実正方行列による複素数の計算


  2×2の実正方行列による複素数の計算 山中和義 2008/10/01 19:19:30 
2×2の実正方行列による複素数の計算  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/10/01 19:19:30
!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
!---------- ここまでがサブルーチン
  つづき 山中和義 2008/10/01 19:20:12 
   ├!4×4の実行列によるクォータニオン(四元... 山中和義 2008/10/01 19:21:51 
   │├つづき 山中和義 2008/10/01 19:23:37 
   │└つづき 山中和義 2008/10/01 19:24:24 
   └!2×2の複素行列によるクォータニオン(四... 山中和義 2008/10/01 19:27:00 
    └つづき 山中和義 2008/10/01 19:28:00 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。