複素関数とグラフィックス
長崎大学教育学部数学教室 菅原民生
要約
複素関数には、実部の「等高線」と虚部の「等高線」が互いに直交しあう、
いわゆる等角写像の性質がある。実部を赤と白の縞、虚部を青と白の縞で表し
、赤と青の交わりを紫とすると、美しいグラフが得られる。そのグラフィック ス画面を作るには、N88Basicが依然として便利である。
本稿は、プログラムの基礎的な部分を、N88Basicのグラフィックス入門の テキストの形で解説している。
§ 1 平面を塗りつぶす
Practice 1
次の直接命令を一つづつ実行せよ。
SCREEN 3
LINE(500,150)-(600,200)
LINE(500,150)-(600,200) ,3 LINE(500,150)-(600,200) ,3,B LINE(500,150)-(600,200) ,3,BF
Practice 2
(1) 次のプログラムを打ち込んで実行せよ。
100 SCREEN 3 :CLS 2
110 FOR Q=150 TO 200
120 FOR P=500 TO 600
130 PSET(P ,Q)
140 NEXT P
150 NEXT Q :END
(2) 次のプログラムを追加して実行せよ。
スペースキーを打つごとに進行する事を観察せよ。
144 PRINT "q=";q
145 X$=INKEY$ :IF X$="u GOTO 145
−29−
( 3 )
( 4 )
次のプログラムを追加して実行せよ。
134 135
PRINT 11
Y$=INKEY$
P=II ;P
:IF Y$="" GOTO 135
RENUM 300
,
100を実行して番号がどう変わるかを観察せよ。
RENUM A
,
B,
Cは B からを A から C きざみに番号を付け直す。
RENUM 100
,
300を実行して番号がどう変わるかを観察せよ。
プログラムは現在次のようになっていることを確かめよ。
100 SCREEN 3 :CLS 2 110 FOR Q=150 TO 200 120 FOR P=500 TO 600 130 PSET(P
,
Q)140 PRINT 11 P=" ;P
150 Y$=INKEY$ :IF Y$="" GOTO 150 160 NEXT P
170 PRINT lIQ=II;Q
180 X$=INKEY$ :IF X$="" GOTO 180 190 NEXT
Q :
END今後、テキストのプログラムの文番号が、学習者のとずれることがあ るかも知れないが、あまり気にする必要はない。
P r a c t i c e 3 ( 1 )
( 2 )
( 3 )
次のプログラムを追加して実行せよ。
130
行は一部書き替えである。
105 CL(0)=7 :CL(1)=5 :CL(2)=3 :CL(3)=1 125 SA=工町T(P/10) :S=SA‑I町T(SA/2)*2 130 PSET(P
,
Q),
CL(2*S)次のプログラムを追加して実行せよ
0130
行は一部書き替えである。
126 130
126 130
TA=I町T(Q/10) :T=TA‑I町T(TA/2)*2 PSET(P
,
Q),
CL(T)126
と
130行を一部書き替えて実行せよ。
TA=INT(Q/10) :T=TA‑I町T(TA/2)*2:L=2*S+T PSET(P
,
Q),
CL(L)‑30一
赤い縞と青い縞が重なっているように見える。
この方法を今後頻繁に用いる。
~2
X Y
直交座標系P r a c
七i c e4
( 1 )
次のプログラムを打ち込んで実行せよ。( 2 )
( 3 )
( 4 )
( 5 )
100 SCREEN 3 :CLS 2 110 PC=320 :QC=200 :M=50 120 LINE(PC,O)ー(PC,399) 130 LINE(O,QC)ー(639,QC) 140 FOR Q=QC‑60 TO QC+60 150 FOR P=PC‑60 TO PC+60 160 X=(P‑PC)/M
170 Y=ー(Q‑QC)/M 180 R=SQR(X*X+Y*Y) 190 IF R>l GOTO 210 200 PSET(P
,
Q)210 NEXT P 220 NEXT Q : END
PC
,
QC,
Mの値を変えたとき、画面はどう変わるか。その役割を理解せよ。
次のプログラムを追加して実行せよ。
200行は一部書き替えである。
同心円の輸ができる。
115 CL(0)=7 :CL(1)=5 :CL(2)=3 :CL(3)=1 195 S=INT(R*10) :S=S‑INT(S/4)*4 200 PSET(P
,
Q),
CL(S)次のプログラムを追加して実行せよ。
180行は一部書き替えである。
楕円の同心円ができる。
145 A=2 :B=l
180 R=SQR(X/A*X/A+Y/B*Y/B) 次のプログラムを追加して実行せよ。
180
,
195行は一部書き替えである。放射状に色分けする。
‑31一
( 6 )
180 190 195 200 210
200
O
で、割っているというエラー メッセージが出るのは、
TH=ATN(Y/X)/3.14159*16
においてである。これを防ぐには
160 FOR P=PC‑60.5 TO PC+60
とすればよい。その理由を考えよ。
~3 複素数の平面
P r a c t i c e 5
( 1 ) 次のプログラムを打ち込んで実行せよ。
( 2 )
100 SCREEN 3 :CLS 2 110 PC=320 :QC=200 :M=10
120 CL(0)=7 :CL(1)=5 :CL(2)=3 :CL(3)=1 130 L1NE(PC
,
O)ー(PC,
399)140 L1NE(O
,
QC)ー(639,
QC) 150 FOR Q=QC‑60 TO QC+60160 FOR P=PC‑60.5 TO PC+60 170 X=(P‑PC)/M
180 Y=ー(Q‑QC)/M
190 S=1NT(X) :S=S‑1町r(S/2)*2
200 T=1NT(Y) :T=T‑1町r(T/2)*2 :L=2*S+T 210 PSET(P
,
Q),
CL(L)220 NEXT P 230 NEXT Q :END
次のプログラムを追加して実行せよ。
これで第一象限が明かになる。
125 CL(4)=6 :CL(5)=4 :CL(6)=2
212 1F Y>O AND X*(X‑.4)<0 THEN PSET(P
,
Q),
CL(L+4) 214 1F X>O AND Y*(Y‑.4)<0 THEN PSET(P,
Q),
CL(L+4)‑32ー
(3) ここで190から 214までを
s u b r o u t i n e
にするために変数XとYとを XVとYVとに変えておく。実行結果が変わらないことを確かめよ。185 XV=X :YV=Y
190 S=1N1・(XV) :S=S‑1NT(S/2)*2
200 T=1N1・(YV) :T=T‑1NT(T/2)*2 :L=2*S+T 210 PSET(P
,
Q),
CL(L)212 1F YV>O AND XV*(XV‑.4)<0 THEN PSET(P
,
Q),
CL(L+4) 214 1F XV>O AND YV*(YV‑.4)<0 THEN PSET(P,
Q),
CL(L+4)( 4 ) s u b r
加七i n e
にして切り放す。実行結果が変わらないことを確かめよ。170 X=(P‑PC)/M 180 Y=ー(Q‑QC)/M 185 XV=X :YV=Y 190 GOSl氾 *PPP 220 NEXT
p .
230 NEXT Q : END 500 '
510 *PPP
520 S=1NT(XV) :S=S‑1町r(S/2)*2
530 T=1NT(YV) :T=T‑1町r(T/2)*2 :L=2*S+T 540 PSET(P
,
Q),
CL(L)550 1F YV>O AND XV*(XV‑.4)<0 THEN PSET(P
,
Q),
CL(L+4) 560 1F XV>O AND YV*(YV‑.4)<O THEN PSET(P,
Q),
CL(L+4) 570 RETURN注意 185 XV=X :YV=Y は今後、複素関数を扱うときにさまざまな式に変 化するところである。
(5) RENUM 100
,
100で番号を整えておく。~4 複素関数の例
まず複素関数
ω =f ( z )
の例としてω =mz
を考える。ここにm
は複素定 数である。実部と虚部を明らかにすれば
ω =
包+vi , m =α + b i , z = x + y i
と するとすなわち である。
包
+vi =
α(+ b i ) ( x + y i ) =
(ω ‑by ) +
(αν+ b x ) i
包
=α x‑
by, v = α y+bx
‑33一
オイラーの表示 m
=r ( c o s 0 +
is i n 0 )を使えば m 倍することは
γ倍して O だけ回転する事を意味する。
P r a t i c e 6
( 1 ) P r a c t i c e 5 の ( 5 ) の一部を次のように変える。
下の例では m 倍することは
2倍して
30度だけの回転である。あらかじめ どのようなグラフになるか、予想をたてておくことが大切である。
155 '
156 A=1.73205 :B=1
160 FOR Q=QC‑100 TO QC+100 170 FOR P=PC‑100 TO PC+100 180 X=(P‑PC)/M
190 y=ー(Q‑QC)/M
200 XV=A*X‑B*Y :YV=A*Y+B*X 210 GOSUB *PPP
220 NEXT P 230 NEXT Q :END
( 2 ) 予想と逆になって、困惑している人が多いのではなかろうか。
ここは是非落ちついて、そもそもこのグラフは何を表しているのかをしっかり 理解する事が大切である。次のプログラムを追加して実行せよ。
注意 サブルーチン
*PPPを消してしまわないように、あらかじめ
RE飢別 400,
250などで避難させておくとよい。
310 FOR NQ=‑5 TO 5 :Q=NQ*M+QC 320 LlNE(O
,
Q)ー(640,
Q)330 NEXT NQ
340 FOR NP=‑5 TO 5 :P=NP*M+PC 350 LlNE(P,O)ー(P,399) 360 NEXT NP
これは
z平面の格子であり、グラフは
z平面の中に、
ω平面の図を描いた ものである。
次に複素関数 ω=f(z) の例として ω= Z 2を考える。
これも実部と虚部を明らかにすれば
包
+ v i = ( x + y i ) 2 = ( x 2 ‑y 2 ) + ( 2 x y ) i すなわち
旬=X2̲y2 , v=2xy
である。
同様にして複素関数 ω=Z3 については
u + v i = ( x + y i ) 3 = ( x 3 ‑3 x y 2 ) + ( 3 x 2 y ー が ) i
‑34一
すなわち である。
包
=
X3 ‑3Xy2,
v=
3x2y ̲y3P r a c t i c e 7
これもあらかじめ予想をたてて
( 1 )
複素関数ω =
Z2のグラフを描こう。おくことが大切である。
( 2 )
200
X V = X * X ‑ Y * Y : Y V = 2 * X * Y
複素関数ω =
z3のグラフを描こう。200
X V = X * X * X ‑ 3 * X * Y * Y : Y V = 3 * X * X * Y ‑ Y * Y * Y
ω =
Z2w=
Z3オイラーの表示
z
=r ( c o s 8 + i s i n 8 )を使えばそれぞれ
Z2 =γ2
( c o s 28 + i s i n 2 8 )
Z3
= γ 3 ( c o s 3 8 + i s i n 3 8 )
を得る。グラフの結果と突き合わせて納得することが大切である。
注意1 Z平面の格子が煩わしければ、その手前で END とすればよい。
注意2 倍 率 M
,
PとQに関する FORNEXTの範囲など適宜自分の気に 入った値に改めよ。次に逆数の関数
ω 1
について考える。これも実部と虚部を明らかにすれば
z
包
+ . 1
v~=
一一一一一 Z n n U nx + y i x 2 + y 2 x 2 + y 2
Z
‑y
包
= v=
z話 +y辺 x~
+y
五すなわち
‑35‑
ω =
よは二つの関数Zl= =
Z2とω =
土の合成関数と考えて、そのまま扱Z畠 Zl
う方が分かりよい。
すなわち
Y l = =
2xy‑Y l
v==x i +YI
2 ft.2 Xl
= =
X‑‑y‑,
Z1
包
x I + y r '
とするのである。
ω = 主 も Zl= =
Z3とω =
土の合成関数として扱う。
zv Zl
P r a c t i c e 8
関数
ω 1
のグラフを描く。z
︑ ︑ . ︐
I
寸aム
︐ ︐
aE︑ ︑
:yv=‑y/(x*x+y*y)
関数ω =
よのグラフを描く。Z"
XV=X/(X*X+Y*Y)
200( 2 )
Xl=X*X‑Y*Y :Yl=2*X*Y
XV=Xl/(Xl*Xl+Yl*Yl) : Y V =
ーYl/(Xl*Xl+Yl*Yl)
200205
どこに現れているかを確かめて、
関数
ω =
とのグラフを描け。zv
注意
P r a c
七i c e5
で導入した第1
象限が、納得しておくこと。
( 3 )
w== ・ でl
Z~
w==‑l z
~5
指数関数、対数関数、三角関数
指数関数 ω = ♂は、その定義から実部と虚部に分ければ
包
+ v i = e
x+
yi= e
x( c o s
y+ i s i n
y)すなわち u = e
Xc o s y , v = e
Ys i n y
である。従って虚部は周期
2πで同じパタ}ンが繰り返される。
複素関数としての対数関数 ω =l o g zは実部と虚部がそれぞれ u = l o g I z 1 = l o g J X2 +
y2, v = a r g z
= 紅C七a n ( y / x )
で与えられて、多価関数であるから、値域を限る必要がある。イ直域は u<v く
2πとしても ‑ π く
U三π としてもよいのであるが、ここではまず B a s i c の関数
ATN(X)
を調べてみる。
π π
V=ATN(X)
は一一く 2 ‑‑ ‑2
Uくーを与える。すなわち第 1 象限と第 4 象限の角度し か出力しない。
V = ATN(Y/X) :IF X<O叩ENV=V+3.14159
π 3 π
と補正することにより、一一く 2 ‑‑‑2
Uく?の範囲の値が得られるようになる。し かしさしあたってはこのことは使わない。
P r a c
七i c e9
( 1 ) 指数関数
ω=
eZのグラフを描け。
200 XV=EXP(X)*COS(Y) :YV=EXP(X)*SIN(Y)
( 2 ) 対数関数 ω =l o g z のグラフを描け。
200 XV=LOG(X*X+Y*Y)/2
205 YV=ATN(Y/X) :IF X<O THEN YV=YV+PI
ここで問題が起こる。 π が整数値でないため、グラフが美しくない。そこ 1 6
でーという量を用意して一周を 1 6 等分する。
π
135 K=16/3.14159
200 XV=LOG(X*X+Y*Y)/2*K 205 YV=ATN(Y/X)*K
‑37一
今度はうまく行った。しかも関数
A T N ( Y / X )
の補正を必要としていない。こ れはしかし偶然である。一周を1 6
等分したため、第 1象限と第3
象限、第2
象限と第4
象限が原点に関して対称になったため(1 6
が4
の倍数だから)の 見かけ上の現象にすぎない。ω = l o g z ω = expz
複素関数としての三角関数は指数関数から作られる。eU+e‑U c o s z =
-~2Z ρ ν ‑
一
‑
. ︒
b
一 一
2
z
ρ ‑
u‑
一 一
z n
a u
実部と虚部を取り出すには、双曲線関数との関係
s i n i y = i s i n h y c o s i y = c o s h y ,
と、加法定理を利用して
c o s z = c o s ( x + 勾) = c o s x c o s i y ‑ s i n x s i n i y
=
cosxcoshy ‑i s i n x s i n h y
s i n z
=s i n ( x +勾)
=s i n x c o s i y + c o s x s i n i y
= sinxcoshy ‑i c o s x s i n h y tanz =竺 nz
も扱うことができる。cosz P r a c
七i c e 1 0
( 1 )
三角関数s i n z
のグラフを描け。2 0 0 X V = S I N ( X ) * ( E X P ( Y ) + E X P ( ‑ Y ) ) / 2
2 0 5 Y V = C O S ( X ) * ( E X P ( Y )
ーE X P (
ーY ) ) / 2
( 2 )
三角関数七anz
のグラフを描け。200 XA=SIN(X)*(EXP(Y)+EXP(ーY))/2 210 YA=COS(X)*(EXP(Y)ーEXP(ーY))/2 220 XB=COS(X) *(EXP (Y)+EXP(ーY))/2 230 YB=‑SIN(X)*(EXP(Y)ーEXP(‑Y))/2 240 XV=(XA*XB+YA*YB)/(XB*XB+YB*YB) 250 YV=(YA*XB‑YB*XA)/(XB*XB+YB*YB)
初 =
S l n z
ω = tanz
~6 有理関数の零点と極
これまでのグラフを見ると、第一象限を示す黄色の部分があるのでかろうじ てどこが零点かを判別することが出来る。他方、
ω = l o g z
やω=logl =
z
‑39‑
‑logz では原点に同心円が現れる。このことから分かるように、一般に有 理関数などでは l o gを付けると零点と極を明示することができる。例えば
( z
ーα 1 ) ( z ‑ α 2 )
・・・( z ‑ a
n)のグラフには各向と各 b
iとに同心円が現
( z ‑ b
t)( z ‑ b
2) ・・・( z ‑ b
m)れる。
P r a c t i c e 1 1
(z
‑1)
( 1 ) ω = l o g のグラフを描け。
( z +
1)アポロニウスの円束と l と4 を通る円束とが互いに直角に交わる。
220 XA=X‑l :YA=Y :XB=X+l :YB=Y 230 XC=(XA*XB+YA*YB)/(XB*XB+YB*YB) 240 YC=(YA*XB‑YB*XA)/(XB*XB+YB*YB) 250 XV=LOG(XC*XC+YC*YC)/2*K
260 YV=ATN(YC/XC)*K
( 2 ) l o g ( z ‑1 ) ( z + 1 )のグラフを描け。
220 XA=X‑l :YA=Y :XB=X+l :YB=Y 230 XC=XA*XB‑YA*YB
240 YC=YA*XB+YB*XA
250 XV=LOG(XC*XC+YC*YC)/2*K 260 YV=ATN (YC/XC) *K
零点同士または極同士は青い線から分かるように互いに反発しあ
フ。それに対して零点と極は互いに引き合う。
( Z 2 + 1 )
( 3 ) l o g のグラフを描け。
( Z 2 ‑ 4 )
( z ‑
2 ‑i ) ( z ‑
2+ i )
( 4 ) l o g のグラフを描け。
( z +
2 ‑i ) ( z +
2+ i )
‑40‑
14
‑
噌i
二 +
Z
一
Zσ 0
0
一 一
切
ω = l o g ( z ‑1 ) ( z + 1 )
‑41‑