複素平面上の点Zが与えられていたとき、複素関数:Z^Zの実数部と虚数部の計算をサブルーチン化しておく。 ここで、このサブルーチンを実行するときは、点ZのX,Y,R及びθ(プログラムでの変数名:TH)は、与えられているものとする。また、自然対数eの底(プログラムでの変数名:EE)も与えられているものとする。
X及びYから、R及びθは、R=(X^2+Y^2)^0.5 , θ=arctan(Y/X) より求める。(注:θ=arctan(Y/X) は、あらかじめ、サブルーチン ARCTAN3A で求めておく。)
複素関数:Z^Zの実数部と虚数部の計算方法を以下に示す。
(これも私が数学の公式集を参考にして計算したものであるから誤りがあるかも知れないから御注意!! : 下式で掛け算の記号(*)は適宜付けたり省力したりしている。下式はゴチャゴチャしているが、やっていることは単純なこと。こういうところが数式というものの欠点の一つだと思う。)
Z^Z={R*e^(iθ)}^(X+iY)={R^(X+iY)}*[{e^(iθ)}^{(X+iY)}]
=[(R^X)*{R^(iY)}]*[e^{iθ*(X+iY)}
=[(R^X)*e^(-θY)]*[(R^iY)*(e^iθX)]・・・(1)
ここで、上式を分かりやすくするために、
A=(R^X)*e^(-θY)
とおくと、
Z^Z=A*[(R^iY)*(e^iθX)]・・・(2)
ここで、e^x=R として、x を求める。logの底をeとすると、
logR=log(e^x)=x*log e=x
従って、R=e^x=e^logR だから、(1)式の第2項に、このRを代入すると、
(1)式の第2項=[(R^iY)*(e^iθX)]={(e^logR)^iY}*{(e^iθX)}
={e^i(YlogR)} *{(e^iθX)}
=e^i(YlogR+θX)・・・(3)
ここで、上式を分かりやすくするために、
B=(YlogR+θX)
とおくと、
(1)式の第2項=(3)式=e^iB=cosB+isinB
となるから、(1)式、即ち、Z^Z は、
Z^Z=A*(3)式=A*( cosB+isinB)=AcosB +i(AsinB)
となる。従って、
Z^Zの実数部= AcosB
Z^Zの虚数部= AsinB
となる。ここで、
A=(R^X)*e^(-θY) , B=(YlogR+θX)
以上より、Z^Zの実数部と虚数部を計算するサブルーチン・プログラムは、下記のようにします。下記のプログラムの行9010,9020,9040,9060及び9070は、使用しているBASICの制約によるもので、本来は不要です。
9000 REM Z^ZのRe.ZとIm.Zの計算
9002 REM ZのX,Y,R,θ(TH)は与えられているものとする。
9004 REM 自然対数の底e:EE=2.718281も与えられているものとする。
9010 IF TH*Y<-709 THEN TH*Y=-709 :GOTO 9030
9020 IF TH*Y>709 THEN TH*Y=709
9030 A1=(R^X)*EE^(-TH*Y)
9040 IF R=0 THEN R=1E^-100
9050 B=Y*LOG(R)+TH*X
9060 IF B>1.0E+9 THEN B=1.0E+9 :GOTO 9080
9070 IF B<-1.0E+9 THEN B=-1.0E+9
9080 ZZR=A1*COS(B)
9090 ZZI=A1*SIN(B)
9100 RETURN
上記のプログラムにおいて、Z^Zの実数部値をZZRとおき、Z^Zの虚数部値をZZIとした、それらをメイン・プログラムへ、RETURNすればよい。