ラベル 複素数用計算尺 の投稿を表示しています。 すべての投稿を表示
ラベル 複素数用計算尺 の投稿を表示しています。 すべての投稿を表示

2016年8月13日土曜日

複素数用計算尺

複素数用の計算尺があるという話をブログに書いたのは, 2009年8月のことだ.

最近すこし図を描き直し, Webでも楽めるようにしたので, その話をしたい.



上の図は対数の複素数を示す. 点Aから右へ延びる実線は1より大きい正の実数軸. Aは(虚数部が0の)複素数1. Bは複素数2, ...で, 2,3,4,...と対数的に間隔が狭くなっている.

Aで実数軸と交わる実線の曲線は, 実数部が1で虚数部が何かの複素数である.

一方, 点Cから右へ延びる破線はiより大きい正の(?)虚数軸. Cは(実数部が0の)複素数i, D は複素数2i, ... で, こちらも2i,3i,4i,...と対数的に間隔が狭くなっている.

Cで虚数軸と交わる破線は, 実数部が何かで虚数部がiの複素数である.

従って点Eは, 複素数1+iを示す.

実はこの上の図は下の真数のGauss平面を対数化したもので, 真数の図では実数軸と虚数軸の交点に0があるが, 対数では0は無限に遠くにあるので, 実数軸と虚数軸が平行になってしまう. 対数の図で, 実数軸と虚数軸の間にある部分は, 真数のGauss平面の第一象限に対応する.



この図には描いてないが, 正の実数軸の反対側には負の実数軸があるわけで, それは最初の対数の図では, Cから右に伸びる虚数軸のさらに上に現る. Cから上へACの距離だけ行ったところに, 負の実数の出発点 -1があって, 正の実数軸と同様に=1, -2, -3,...が右に出てくるのである.

さらにその上というか, Aから出発する正の実数軸の下というかに, 負の虚数軸があるのだが, 図がごちゃごちゃするから省略してある.

省略はそれだけではない. 10, 10i -10などの右には, これと同じパターンがあって, 20,30,... 20i,30i,... -20,-30,...と続くのである.

また左には0.9, 0.8,...があるのは理解できるであろう. つまり上の図はほんの一部を示しているに過ぎない.

もっと広範に描いて見ると, 下のような図になる.



前置きが長くなった. この図を使って複素数の乗算をするにはどうするかを述べよう. 通常の計算尺では, 2つの対数尺A, Bが次の図の上のように上下に並んでいて,

2掛ける何かを計算したければ, 下の図のようにB尺の1をA尺の2に合わせ, 例えばB尺の3に相対するA尺の目盛り6を見て, 2×3は6なることを 知るのである.

対数でも同様で, 1+iに何かを掛けようとするなら, B尺に相当する赤い図の1(点A)をA尺に相当する黒い図のEに合わせ, B尺の何か(例えば1+i(E))に 相対するA尺の値(Dつまり2i)を知る.



(1+i)×(1+i)=12+i2+2iで, 1の2乗とiの2乗の和は消えるから2iで正解だ.

このwebプログラムは http://www.iijlab.net/~ew/complexsr.htmlに置いてある. B尺のAを置きたいところをクリックすると, A尺が薄い色になり, 濃い色のB尺の1がその場所へ移動するから, B尺の乗数に相対するA尺を読めばよい.

2009年8月8日土曜日

複素数用計算尺

複素数用の計算尺があると知って, 例によってその絵を書いてみることにした. 複素数 x+iy の対数は実部が (log (sqrt (+ (* x x) (* y y)))), 虚部が(atan (/ y x))なので, Schemeで実験する. SchemeにはComplex型があるので, こういう時は便利だ.

(* 2+i 3+2i) => 4+7i

(define (clog x y)
(list (log (sqrt (+ (* x x) (* y y)))) (atan (/ y x))))

と定義し

(clog 2 1) => (.8047189562170503 .4636476090008061) ;log 2+i
(clog 3 2) => (1.2824746787307684 .5880026035475675) ;log 3+2i
(clog 4 7) => (2.0871936349478184 1.0516502125483738);log 4+7i

(+ .8047189562170503 1.2824746787307684) => 2.087193634947819
(+ .4636476090008061 .5880026035475675) => 1.0516502125483735

たしかに(clog 2 1) + (clog 3 2) = (clog 4 7) であった.

次にとりあえず x=1 にし, y= -10から1おきに10まで変えながら, clogをとると,

                                                                           
(do ((y -10 (+ y 1))) ((> y 10))
(display (clog 1 y)) (newline))

(2.30756025842063 -1.4711276743037347)
(2.2033596236321267 -1.460139105621001)
... 7行省略
(.3465735902799727 -.7853981633974483)
(0 0)
(.3465735902799727 .7853981633974483)
...7行省略
(2.2033596236321267 1.460139105621001)
(2.30756025842063 1.4711276743037347)

この数値を元に, 拡大や移動しながら, 曲線を描いてみた.


ここまで出来ればあとはPostscriptの出番である. PostScriptによるプログラムは以下のようだ.

/xscale 240 def /yscale 200 def
50 250 translate
/re {x x mul y y mul add sqrt log} def
/im {x y atan dup 180 gt {360 sub} if 100 div} def
/x 1 def /y 0 def re xscale mul im yscale mul moveto
xscale 2 mul 0 rlineto stroke
1 1 10{/x exch def
/y x -10 mul def
re xscale mul im yscale mul moveto
x -10 mul 0.1 x 10 mul{/y exch def
re xscale mul im yscale mul lineto} for
stroke} for

1 0 0 setrgbcolor
/y 1 def /x 0 def re xscale mul im yscale mul moveto
xscale 2 mul 0 rlineto stroke
1 1 10{/y exch def
/x y -10 mul def
re xscale mul im yscale mul moveto
y -10 mul 0.1 y 10 mul{/x exch def
re xscale mul im yscale mul lineto} for
stroke} for


基本の部分を曲線群を以下に示す.

アルファベットで示す各点の複素数と, 座標は

A 1 (0.0 0.9)
B +i (0.0 0.0)
C 1+i (0.15051499 0.45)
D 2i (0.30103 0.0)
E 1+2i(0.349485 0.265650511)
F 2+i (0.349485 0.634349465)
G 5i (0.69897 0.0)

であり, (* 1+i 1+i)=2i, (* 1+2i 2+i)=5i なども読み取れる.

計算尺として使うには, 一方を透明, 他方を不透明の紙に, この図を2枚用意し, 1+2i(E) * 2+i(F)を計算するには, 不透明の図のEに透明のAを重ね, 透明の図のFの下の不透明の図を位置を読むのである. 透明の紙は不透明の紙と平行に動かさなければならない.

なお, 詳しいウェブページはhttp://cs.stmarys.ca/~dawson/sliderule.gifhttp://ci.nii.ac.jp/naid/110000218130/enにある.