LabVIEW による Euler 公式参考プログラム
(最終改訂 2018/01/23)
書庫ファイル内容
LV_Euler.zipには本解説ファイル(LV_Euler.pdf)とLabVIEWによるEulerの公式参考プログラ ム(LV_Euler.vi、LV_circular.viおよびLV_Euler0.vi)のLabVIEW2013版実行プログラム(2017版 とはソースレベルの互換性に問題があるため実行プログラムのみとしており、実行にはLabVIEW2013 版ランタイムエンジンが必要。:備考参照)が含まれている。実行には、それぞれ同名の設定ファイル
(拡張子.ini)および実行時ライブラリlvanlys.dllを格納した同梱のdataフォルダを同じ場所に置く。
LV_Euler.viについて
複素平面に原点中心の単位円(半径200ドット)を表示し、円周上の点exp(iθ) = cosθ + i sinθ の偏角θを数値スライド(または付随する数値ボックス)で入力してEulerの公式の意味を確認するデ モVIで、フロントパネル左上の3個の押しボタンSW ”cosine & sine”、”differentiate”、”integrate”
でそれぞれ基本、微分、積分の画面を選択する(起動時の既定は”cosine & sine”)。θは数値スライド 左下の文字列制御器(ラベル ”radian (formula)”)にasin(sqrt(1/2))の様な数式(既定はpi(1/2))
を入力して”SET”の押下(区間[0, 2π)に還元し、NaN、±Infは0に強制)による設定もできる。”SET”
の下の”AUTO”をONでθが変化量0.01rad/stepで自動で増加または減少(押しボタンSW ”reverse /
normal”(既定はONで増加)で方向を設定)する。各部品(デモの種類により異なる)の表示ON/OFF、
色、線の種別は押しボタンSW、カラーボックス、リングで個々に設定できる。
図1 基本デモ画面 複素平面の右に虚軸への射影、下に実軸への射影が表示される
単位円、軸、ラベル、偏角θの半径の4部品は全てのデモ画面に共通である。基本デモ画面(p. 1図 1)に固有な部品には、円周上の点 exp(iθ)から両軸への垂線を表示する”cosine (real part)”、”sine
(imaginary part)”があり、複素平面の右と下の細長い2Dピクチャに両軸への射影が表示され、たとえ
ばAUTOをONにして単振動の様子を見ることができる。
微分デモ画面
単 位 円 周 上 の 2 点 exp{i(θ±Δθ/2)}の 差 と 変 化 率 、 微 分 の 関 係 を 確 認 す る 微 分 デ モ 画 面
(”differentiate” ON:図2)では、両軸への射影は省略され、区間幅Δθを指定する数値スライド(0.001
~π:起動時の既定はπ/3)が加わる。Δθの指定方法は偏角θと同様であるが、数式(既定はpi(1/3))
による入力では区間還元ではなく「頭打ち」され、NaN、±Infは0ではなく0.001に強制される。
表示制御には、基本デモ画面の”cosine (real part)”、”sine (imaginary part)”に代って ”radii of angles θ±Δθ/2”、”difference”、”derivative at θ”が加わる。対応する表示部品は、それぞれ偏角θ±Δθ/2の半 径(”show”がONのとき押しボタンSW ”show arc Δθ” を表示し、ONで間の弧を表示(起動時既定 はOFF):図2はONで表示した例)、exp{i(θ±Δθ/2)}の差(押しボタンSW ”divided by Δθ” ON では差exp{i(θ+Δθ/2)}- exp{i(θ-Δθ/2)}をΔθで割った値を原点に始点を移動して表示し、数値 表示器にθにおける微分との比を表示)、θにおける微分(”show”をOFFにして複素平面に非表示の場 合も実部、虚部の値は数値表示器に表示される)である。
図2 微分デモ画面 偏角θ±Δθ/2の半径と間の弧、exp{i(θ±Δθ/2)}の差、θにおける微分を表示する
exp{i(θ+Δθ/2)}- exp{i(θ-Δθ/2)}はexp(iθ)と直交し、その偏角はθにおける微分と同じθ+
π/2である。これをΔθで割った変化率と微分との比はsin(Δθ/2)/(Δθ/2)で、この例(Δθ=π/3)では 3 /πとなる。
p.3図3は”derivative at θ”の”show”をOFFにして微分を非表示として、“divided by Δθ”をON にして変化率を微分の表示位置に表示した例である。
図3 微分デモ画面 ”derivative at θ”を非表示、“divided by Δθ”をONに設定した例
積分デモ画面
exp(iθ)と区間幅Δθの積を区間 [θ-Δθ/2,θ+Δθ/2]での exp(iθ)のθについての定積分と比較 する積分デモ画面(”integrate” ON:図4)は微分デモ画面とほぼ同様で、部品の性質に即して既定の 色と配置を対応させている。
図4 積分デモ画面 偏角θ±Δθ/2の半径と間の弧、exp{i(θ±Δθ/2)}における不定積分とその差を表示
積分デモでは、微分デモの表示制御 ”difference” の位置に”integral atθ±Δθ/2”(既定の色 は”derivative atθ”と同じ)、”derivative atθ”の位置に”integral over [θ-Δθ/2,θ+Δθ/2]” (既定の色 は”difference”と同じ)を配置している(”show”をOFFにして複素平面に非表示の場合も実部、虚部の 値が数値表示器に表示されるのは微分デモの”derivative atθ”と同様である)。
θ±Δθ/2におけるexp(iθ)の不定積分exp{i(θ+Δθ/2)}/i、exp{i(θ-Δθ/2)}/iは偏角がそれぞ れexp{i(θ+Δθ/2)}、exp{i(θ-Δθ/2)}の偏角よりもπ/2 小さく、その差である定積分はexp(iθ) と平行になる。これらの関係は、定積分 exp{i(θ+Δθ/2)}/i - exp{i(θ-Δθ/2)}/i が微分デモ画 面の exp{i(θ+Δθ/2)}- exp{i(θ-Δθ/2)}に、exp(iθ)が微分デモ画面の exp{i(θ+π/2)}に対応 する。すなわち、exp(iθ)と区間幅Δθとの積の定積分に対する比は(Δθ/2)/sin(Δθ/2)で、この例(Δθ
=π/3)ではπ/3となる。
微分デモでは除算対象の表示制御である”difference”の右にあった押しボタンSW “divided by Δθ”
に対応する押しボタンSW “multiplied by Δθ”は乗算対象である”radius of angle θ”の右に配置されて いる。これをONにすると原点を中点としてexp(iθ)Δθを表示し、数値表示器に定積分に対する比を 表示する。原点を始点としていないのは、微分とは異なり絶対値(Δθ)が1を大きく超える場合があ ること、比較対象の定積分との位置関係を考慮したものである。図 5は、“multiplied by Δθ”をON にして表示した例である。
図5 積分デモ画面 “multiplied by Δθ”をONに設定した例
LV_circular.viについて
複素平面表示の2Dピクチャの右と下にそれぞれ1周期分の正弦と余弦のグラフを表示(モードに応 じて微分、積分、合成のグラフをオーバレイ)し、合成(加法定理デモ)モードを追加したもので、代 償として単位円のサイズがLV_Euler.viの半分となり、部品の表示制御も簡略化されている(p.5図6)。 モード選択の押しボタンSWはLV_Euler.viでの排他式ではなく、微分、積分、合成のモードは基本モ ードを経由する仕様としている。「一時停止後の再開継続」を可能にするため、ツールバーの「実行」
ボタン(停止時表示: )のすぐ左下に”HALT”ボタンを配置し、実行プラグラムのビルドでは停止再 開時にパラメータを継承できない「実行を中断」ボタン(実行時表示: )を表示させない設定として いる。
図6 LV_circular.viの基本モード画面 正弦、余弦のグラフが加わり表示制御は簡略化されている
偏角θの入力方法、自動増減の仕様はLV_Euler.viと同様であるが、数値スライドは正弦、余弦の両 グラフに沿えてグラフ画面と同じ100 dot/radにスケールを合せて配置(2本のスライドと数値ボック スの値は連動し何れを用いても入力できる)している。自動増減の方向を設定する押しボタン SW ”reverse / normal”は基本モード以外でも使用され、”angle AUTO”ボタンが非表示となる微分・積 分のモードでは区間幅の符号情報(”reverse”ではΔθが負)となる。
軸は値0xFF00(緑)で常に表示され、単位円、偏角θの半径等の部品の表示制御もカラーボックス
による色指定のみで非表示の指定はできない(色に黒を指定すれば軸と重なる箇所以外では非表示と同 等にはなる)。LV_Euler.viには無い自動増減の速度調節数値スライド(ラベル:”wait time (ms)”:起 動時の既定は20)は、合成モードでの使用を想定したものである。
微分モード
ボタンSW ”gradient”をONにした微分モード画面(他のモード選択ボタンは非表示となる:p.6図
7参照)では、偏角θを自動で毎ステップΔθ更新(Δθの符号は押しボタンSW ”reverse / normal”
で設定)して勾配 [exp(iθ)- exp{i(θ-Δθ)}]/ Δθを画面右下の複素平面(基本モード画面左上の 複素平面と同形式)に表示する。表示色はカラーボックスで指定し、原点から値への線分は”radius”、
実部、虚部の色は”gradient”の色である。押しボタンSW ”show derivative”(起動時既定はOFF)ON で微分の軌跡である単位円を点線(色はカラーボックス”derivative”で指定)で表示する。
勾配の偏角はθ-Δθ/2+π/2でexp(iθ)のθ-Δθ/2における微分の偏角に等しく、勾配と微分の比は
sin(Δθ/2)/(Δθ/2)となる(数値ボックス”ratio to derivative”に表示)。画面右上と左の正弦、余弦のグラ フには位相がπ/2 進んだ微分のグラフ(”derivative”の色)をオーバレイ表示し角θ-Δθ/2 の位置に勾 配の虚部と実部の値を(”gradient”の色)表示する。
区間幅Δθの絶対値は、数値スライドまたは付随する数値ボックスで指定し、押しボタンSW ”radian
/ division”がOFF(起動時既定)では|Δθ|を直接浮動小数点数で入力(既定は0.1)し、ONでは分
割数2π/|Δθ|を整数で入力(既定は63)する。θを更新するWhile loopの待時間は|Δθ|に比例さ
せ 、|Δ θ|が 大 き い 場 合 に は 更 新 速 度 を 遅 く ( 制 御 器 の 反 応 に は 時 間 が か か る ) し て い る た
め、”SET”、”HALT”等のボタン類は長押しする必要がある。微分・積分モードでは制御器 ”θ(formula)”
の下に押しボタンSW ”shift Δθ/2”が表示され(起動時OFF)、これがONのとき”SET”の押下でθに は制御器 ”θ(formula)”の値ではなくΔθ/2を加えた値が設定される。
図7は、Δθをπ/6に設定し、”shift Δθ/2” をOFFで”SET”を押下してθ=π/2を起点として開始 し、θ=π/6 で停止させた例である。グラフ上の角の表示はΔθを更新済の値となり、正弦、余弦のグ ラフのπ/2に黄色の点は無くπ/2+π/6が最初の点(勾配の最初の点はπ/2+π/12)、π/6が最後の点(勾 配の最後の点はπ/6-π/12)となる。
図7 LV_circular.viの微分モード画面 Δθ=π/6でθ=π/2から開始、θ=π/6で停止した例
押しボタンSW ”radian / division”がOFFの場合、正弦、余弦グラフで区間還元された別周期の勾配 の表示が重なり次第に密に詰る。勾配の表示は、基本モードから微分モードに移行、SETの押下、Δθ の変更(増減方向変更による符号変更を含む)、“clear”ボタンの押下、グラフにオーバレイされた微分 の色の変更の何れかに該当するときにクリアされる。
積分モード
ボタンSW ”accumulation” がONの積分モード画面で表示される制御器、表示器、複素平面・グラ
フでの表示指定は微分モードと(ラベルが対応して異なるのみで全く)同じである(図8参照)が、偏 角θの自動更新で表示する対象がexp(iθ)Δθの累積値であることが異なり(exp(iθ)の定積分は絶対 値最大2)、微分モードと同じスケールで描画するにはオフセットする必要がある。オフセット値は、積 分の始点をθ0とするとき、複素平面ではexp(iθ0)/i = exp{i(θ0-π/2)、正弦、余弦のグラフへの オーバレイではその虚部、実部である -cosθ0、sinθ0となる。
オフセットした中心から累積値への線分の色は”radius”、実部、虚部の色は”accumulation”で設定し、
押しボタン SW ”show integral”(起動時既定は OFF)ON で定積分の軌跡である単位円を点線(色 は”integral”で指定)で表示することも微分モードと同様である。exp(iθ)Δθと区間[θ-Δθ/2,θ+Δθ/2]
のexp(iθ)の定積分とは偏角が等しく比は (Δθ/2)/sin(Δθ/2)である(数値ボックス”ratio to integral”に 表示)。位相がπ/2 遅れた積分のグラフをオーバレイ表示した正弦、余弦のグラフでは、微分モードの 勾配と同様にΔθを更新後のθを基準として、角θ-Δθ/2の位置に累積の虚部と実部の値を表示する。
図8はΔθをπ/6に設定し、”shift Δθ/2” をOFFで”SET”を押下してθ=π/2を起点として開始し
(積分の始点はΔθ/2減じた5π/12:θ0を所定の値とするには”shift Δθ/2”をONにして”SET”を押 下する)、θ=11π/6で停止させた例である。微分モードと同様にグラフ上の角の表示はΔθを更新済の 値を示し、正弦、余弦のグラフではπ/2に黄色の点は無くπ/2+π/6が最初の点(累積の最初の点はπ/2+
π/12)、11π/6が最後の点(累積の最後の点は11π/6-π/12)となる。
図8 LV_circular.viの積分モード画面 Δθ=π/6でθ=π/2から開始、θ=11π/6で停止した例
微分モード画面と同様、押しボタンSW ”radian / division”がOFFの場合、正弦、余弦グラフで区間 還元された別周期の累積の表示が重なり次第に密に詰る。累積の表示は、基本モードから積分モードに 移行、SETの押下、Δθの変更(増減方向変更による符号変更を含む)、“clear”ボタンの押下、グラフ にオーバレイされた積分の色の変更の何れかに該当するときにクリアされる。“clear”を押下したとき、
積分の色を変更したときにはグラフ画面はクリアされるがθ0と累積値は変更されない。
合成モード
正弦、余弦は微分、積分により位相が変化するのみで形を変えないが、正弦、余弦の線形結合もまた 振幅と位相が変化するのみで形を変えない。これらの性質は、余弦と正弦が純虚数の指数関数のそれぞ れ実部と虚部である事を示すEulerの公式に内在する自明とも言えるものである。
合成モード画面では、中央下に合成表示のための一回り大きい複素平面、その右に合成の係数に関す るパラメータφを入力する制御器(基本モード画面のθ設定と同様)と簡略化(実部、虚部表示の細長 い射影画面を省略)した複素平面を表示している(図9参照)。
図9 合成モード画面 θをπ/6、φを2π/3とした例
a, bを実数とするとき、c = √(a2+b2)、φ=atan2(b, a)としてa cosθ - b sinθ = c cos(θ+φ)、
a sinθ + b cosθ = c sin(θ+φ) となるが、c = 1に規格化し、a =cos φ、b = sin φとすれば指数関数 の加法公式そのものである;a exp(iθ)+ib exp(iθ)= exp(iθ) exp(iφ)= exp{i(θ+φ)}.
画面下右の複素平面にはexp(iφ)を表示しその右の数値表示器にaとbの値を表示している。各部 品の表示色は画面左上の複素平面の各部品の表示色と同じで単位円は点線で表示している。
中央下の複素平面にa exp(iθ)+ib exp(iθ)を合成表示し、a exp(iθ)+ib exp(iθ)の成分の表 示色は”value”、a exp(iθ)およびib exp(iθ)の成分の表示色は”perpendicular”でそれぞれ指定する。
a exp(iθ)は原点中心の半径|a|の円周上の偏角θ(a < 0の場合はθ+π)の点であり、この点を中 心として半径|b|の周転円を描くと ib exp(iθ)は a exp(iθ)を基準として周転円上の偏角 θ+π/2
(b < 0の場合はθ-π/2)の点となる。a2+b2=1より、a exp(iθ)+ib exp(iθ)は原点中心の単位 円周上にあり、偏角はθ+φとなる。
半径|a|、|b|の二円は点線で表示され、単位円のみ実線で表示される。押しボタン SW ”angle AUTO”、”phase AUTO” をONにするとそれぞれのボタン上の押しボタンSW ”reverse / normal” の 設定方向に従いθ、φを0.01rad/stepで自動増減する。θとφの更新は同期しており、両者の増減方向 を逆にして自動増減した場合にはθ+φ(区間[0, 2π)に還元された値は複素平面下の数値表示器に表示 される)は一定になる。
画面上、左の正弦、余弦のグラフには位相をφ進めた正弦、余弦のグラフを表示色”curve”でオーバレ イし、角θの位置にsin(θ+φ)、cos(θ+φ) の値を表示色”value”で表示している。自動増減で変化を確認 のため更新を遅くしたい場合は数値スライド ”wait time (ms)” の値を大きくする。本 VI では複数の
While loopを使用しているため、基本モードと合成モードでは自動増減中に停止したときに停止時の数
値スライドのθの値と画面左上のθの値が1ループ分(0.01rad)ずれる場合があり、”wait time (ms)”
の値が小さいとその確率が大きくなる。
LV_Euler0.viについて
指数関数exp(z)の定義の一つにEulerが与えた{1+(z /n)}^nのn→∞ における極限がある。exp(z) への収束は、絶対値、偏角共に1/nのオーダーであるが、zが純虚数の場合には偏角が1/n2で収束す る。z =iθ として、{1+(iθ/n)}^k(1≦k≦n)を求める操作は、複素平面上では原点を角 atan(θ/n) の頂点、1を直角頂点とする上半平面に置かれた直角三角形の斜辺に原点を共有する相似な直角三角形 の隣辺を重ね、これを繰返すことにあたる。
図10 LV_Euler0.viの起動時のフロントパネル 既定はθ=π、n=10
p.9 図 10 に LV_Euler0.vi の起動時のフロントパネルを示す。表示範囲を限定し、単位円の半径を
LV_Euler.viの200ドットから500ドットに拡大している。部品の表示ON/OFF、色、線の種別の指定
方法はLV_Euler.viと共通で、真値との比較(ここでは{1+(iθ/n)}^n の絶対値、偏角とexp(iθ)の絶 対値、偏角との比)を表示することも同様である。n(上限を1024に制限している)が大きい値では一 瞬であるが描画終了までに時間を要するため、描画処理中は ”busy” LEDを点灯表示している。
Eulerの公式においてθをπとしたexp(iπ)=-1(またはexp(iπ)+1=0)はEulerの等式と呼ば れる、2個の独立な超越数の冪乗により1個の整数が得られる驚異の関係式で、これを既定画面のθと している。
複素数zをz =Δz1 +Δz2 + … +Δzk + … +Δzn とするとき、1+Δzkの乗積はMax |Δzk |→ 0 の極限でexp(z)に収束する。2Dピクチャ左上の押しボタンSW(ラベル ”arc path”)がOFFの既定 画面は複素平面上で線分0⇒iθをn等分したΔzk = iθ/nにより1+Δzkの乗積を求めexp(iθ)への収 束を見たが、ONではΔzkの選択による収束の変化を確かめられる。
ここではzを任意分割ではなく、0⇒iθ(0≦θ≦π)を時計回り(註参照)に中心角φ(0.001≦φ
≦π)で結ぶ円弧をn等分した分割点をzk(z0=0、zn =z )としてΔzk =zk -zk -1による1+Δzk
の乗積を求め、φの値による収束の違いを見る。φは、数値スライドまたは数値ボックス(既定はπ:
図11)で与え、"SET"の押下で文字列制御器に入力した数式(既定はpi(2/3):p.11図12)を評価して φの値とする。
既定モードのラベル表示指定の右に追加表示される経路表示指定(ラベル ”path (scaled to [0, i])”)
の ”show” をONにすると0⇒iθの経路を0⇒iにスケール(Δzk /θを順につないだもの)して表示す る(p.11図12)。
図11 半円弧の経路で求めた乗積の絶対値は急速に収束する(θ=π、n=10)
註:時計回りと反時計回りではΔzkの現れる順序が逆になるだけでn個の1+Δzkの乗積の値は同じで ある。θ>0の場合、反時計回りでは絶対値が1よりも大きな1+Δzkから始まり中間部で乗積の絶対値 が大きくなるため、ここでは時計回りとしている。
zが純虚数の場合、半円弧の経路(φ=π)では絶対値の誤差は1/nではなく指数関数的に減少(図
11)することをnの増分ボタンの操作で確かめられる。またφ=2π/3(数式入力の既定値)では偏角が
1/n2ではなく1/n4で収束し(図12)、nを倍にすると誤差が1/16になることを確かめられる。
図12 中心角2π/3の経路で求めた乗積の偏角は1/n4で収束する(θ=π、n=10)
備考
● LabVIEW2013ランタイムエンジン(ファイルサイズ257MiB)は下記のURLにある。
http://ftp.ni.com/support/softlib/labview/labview_runtime/2013/Windows/LVRTE2013std.exe National Instruments社はLabVIEW 2014までの旧版についてWindows10での動作を公式には 保証していないが、以下のフォーラム(2013の前の2012での議論)に見る様に問題なく動作する。
https://forums.ni.com/t5/LabVIEW/Can-I-install-2012-run-time-engine-under-windows-10/td-p/3 607729
● 実行プログラムはLabVIEW2013で情報科学研究教育センター前システムのVirtual Desktop(OS はWindows 7であるがシステムフォントはWindows XPと同じMS UI Gothicを採用)に合せて 作成されており、設定ファイルには以下の4行が書かれている。
[VIファイル名(拡張子無し)]
appFont="MS UI Gothic" 12 dialogFont="MS UI Gothic" 12 systemFont="MS UI Gothic" 12