SSブログ

#3898 複素数計算とコンピュータ: [Visual Studio 17] Jan. 14, 2019 [52. 数学]

 好奇心はそのままにしていても際限なく広がっていくものです。コンピュータで複素数の計算をどのようにやるのか想像してみます。たとえば、(2+i) と (3+2i)という複素数のセットで足し算と引き算はそれぞれ実部同士、虚部同士の加減算でこと足りますが、乗除算はそうはいきません。実部と虚部の乗算や除算がでてきます。冪(べき)乗計算になると指数や対数そして三角関数のおでましです。複素数専用の四則演算と冪乗計算のプログラミングが必要なことが明白です。

 必要があって複素数の計算を前回#3907でやってみました。複素数のべき乗計算を指数と対数と三角関数に展開して手計算でやるのも、関数計算機でやるのもしんどいので、HP-35sの複素数計算機能を利用しました。これだとRPN(逆ポーランド方式)で複素数をそのまま式に代入するだけで計算できました。とっても便利です。
 複素平面から複素平面への対応を調べ、複素数のべき乗関数グラフを描くためには次のような計算を繰り返す必要があります。
①z平面のxを固定し虚軸のyi1を0.5単位で±100の範囲で計算してみる。
②z平面の虚軸yiを固定してxを0.5単位で±100の範囲で計算してみる。
③zの長さを固定してxとyiのセットをつくりだして、zの絶対値が0~100の範囲で0.5刻みで計算してみる。

 こうすれば、それぞれに応じたw平面が0.5の点で表現できそうです。工夫次第でz平面で0.5の網目のグラフを描くデータが揃います。複素数の冪乗関数のグラフを描くのはじつにやっかいな作業を要します。

 プログラミング言語の「C++」に複素数計算機能があることは前回書きましたが、再掲します。

   class complex { double re, im;};

 実部と虚部があるので、ダブル型の関数として定義されています。加算と減算はすなおにそのままできそうですが、乗除や冪乗計算はそのままできません。

 C++の演算子一覧をみても、冪乗演算子はないから、Z^aはZをa回かけるしかありません。if文でカウンタをaになるまでループさせればいいだけですが、加算や減算も実数の場合とは違うから、プログラムが必要です。
 これらは基本計算に属しますから、C++のライブラリにあるのではないかと考え、検索してみたらありました。「第3章 C++標準ライブラリを用いた 複素数計算の基本」という学術論文を見つけました。
*http://na-inet.jp/fft/chap03.pdf

 18頁に「図 3.1: IEEE754-1985規格の2進浮動小数点数の形式」の解説図を見ると、浮動小数点表示で単精度で32bit、倍精度で64bit、拡張倍精度で80bitで計算できます。

------------------------------------
 すこし脱線します。
 1978年から84年1月末まで産業用エレクトロニクスの輸入専門商社で働き、84年2月からは臨床検査最大手のSRLへ転職して仕事してました。78年に産業用エレクトロニクス専門輸入商社では財務構造と収益体質を変革するために社長が提案した5つのプロジェクトの仕事を抱え、問題解決のために納期管理や外貨決済管理、仕入業務管理、円定価システム、為替予約管理などいくつかのシステム開発をせざるをえなかったので、三菱電機のオフコン、NEC製小型汎用機を使いました。SRLでは富士通製汎用大型機(84年から92年ころまで当時国内最大規模のコンピュータ)のユーザでした。プログラミングも必要があって3言語独習しています。プログラミングできないとスマートな外部仕様書やプログラミング仕様書が書けません。内部設計はソフトハウスのSEがやってくれるので、システム仕様書を書いたり実務設計をすることが仕事でした。1978年から一貫して84年まで、経営管理にかかわる統合システムのパッケージ全体をデザインしていたことになります。仕事柄SRL八王子ラボの検査システムも現物を自分の目でみていましたから、1990年代初頭のころのミニコンの使われ方もよく知ってます。
 そういうわけで、コンピュータに関する専門書を7年間ほど片っ端から読み漁ってましたので、このあたりも周辺知識がすこしだけあります。でも数値計算プログラミングだけは例外でした。経営分析のモデルつくりに必要な範囲で1978年と79年にからHP-67とHP-97をつかってやってただけ、C++を使った数値計算プログラミングの経験はありません。当時のオフコンや小型汎用機では加減乗除の四則演算機能しかありません。√やべき乗すらできません、基本的な統計計算すら扱えませんでした、関数機能がライブラリーとして提供されていませんでしたから。オフコンや小型汎用機ユーザにはそういう用途で利用する人がいなかったのでしょう。
 84年2月にSRLへ転職して3月には全社予算編成と固定資産管理そして経営統合システム開発プロジェクトを任されていました。予算減価償却費の実績値との誤差が1億円以上出ていましたので、東証2部上場要件に予算精度の向上という項目があり、減価償却費の誤差を2千万円以下にできないかと経理担当取締役の岩本さんから相談を受けました。元々の固定資産管理がどうなっているのかから調べ、全部の固定資産を実地棚卸して台帳の整理からしなければいけません。そのために固定資産の実地棚卸をしていたら、使われていないDECのミニコンが2台ありました。検査受付業務システムにDECのミニコン2台を購入したのですが、開発に失敗して練馬のラボに放置してありました。当時の購入金額で1台5000万円してました。どうせ使っていないのだから、経営分析用のモデル構築と計算用に使わせてほしいと上司の経理担当役員岩本さんへ申し出ましたが、ノーでした。「ebisuよ、それは無理だぜ」、山口県出身の人で(愛媛県の松山商業卒業後富士銀行へ、筆を使わせたら名人)、ウマが合いました。わたしは経理部所属で、入社2か月後には予算編成と統括管理と同時に暗礁に乗り上げていた統合システム開発プロジェクトのメンバの一人に任命されました。(当時のSRLの予算規模は300億円でした。入社2か月の社員に全社予算編成と統括管理を任せる、じつに面白い会社です。)
 岩本さんは富士銀からの出向者で、システム部門へ押しが利かなかったのでしょう。UNIX系のマシンですからC言語が使った数値プログラミングができるマシンでした。結局、高価なミニコンはだれも使わないまま廃棄しました。システム部門が使えないのでDECのミニコンを経理部員が使うなんて話は、いま考えたら「常識外れ」の要求です。でもわたしが岩本さんなら「わかった、やってみろ」と伝え、創業社長の藤田さんに根回ししたでしょうね。そういう常識外の要求が何かを生み出すことがあります。常識の範囲に囚われていたらクォンタム・リープ(飛躍)はありません。経営分析モデルはHP67とHP97で5年前(78~79年)に作ってありましたから、とりあえずか載せ替えるだけで使えました。92年ころに子会社6社の経営管理に経営分析モデルを使いました。一度っきりでした、関係会社管理部へ異動して翌年には福島県郡山市の臨床検査会社への資本出資交渉をまとめて役員出向してました。子会社の経営管理には79年に開発した経営分析モデルをEXCELに載せ換えただけでそのまま使えました。5群27項目の経営指標と総合偏差値評価のできる、時代の尖端を走る経営分析モデルでした。子会社6社が総合偏差値で評価できるだけでなく、生産性の改善、財務安定性の改善、収益性の改善、成長性の改善、活動性の改善、これらを五分野の27指標群に分けて数値目標を設定できます。予算達成したらどれくらいの5つのディメンションでどういう経営改革になるのか、それに加えて総合偏差値でも評価のできるものでした。おそらくいまでもないでしょうね、5群27項目の経営分析指標とそれをベースにした総合偏差値で会社の経営状態を測定できるようなモデルは日本にはいまでもないでしょう。40年以上時代に先んじて経営分析・経営改善の仕事をしていました。それくらいでなくっちゃ仕事は面白さが出てきません。
 1984年にDECミニコンの使用を上司の岩本取締役に申し出たのはSRLに上場準備要員として入社して半年ぐらいの時期でした。統合システムのサブシステム間のインターフェイス仕様も、担当した会計及び買掛金支払いシステムや固定資産管理システムの設計が終わってプログラミング開発に入っていました。暇だったのです。システムはノープロブレムで8か月で本稼働してます。「わたし失敗しない人なので」どこかで聞いたセリフです。(笑)
-----------------------------------------------

 話を元へ戻します、23頁に複素数の冪乗の関数名と機能が載っています。

 「complex exp(complex a) exp(a) = e^a 」

 推測通りでした、C++の標準ライブラリーをつかえば、複素数のべき乗計算ができます。
 無償提供されている[Visual Studio 17]をつかえば、テキストエディタを使ってプログラムを書き、コンパイルできることがわかりました。
  対応しているプログラミング言語は次の8つ。
*Visual Studio 17: ウィキペデイアへ
https://ja.wikipedia.org/wiki/Microsoft_Visual_Studio


 興味のある高校生や大学生にはこれだけで十分な情報です、やって遊んでみたらいかがですか?




nice!(0)  コメント(2) 

nice! 0

コメント 2

KK

私は、Eclipse、Visual Studio Codeという2つの統合開発環境を使ってアプリケーションを開発しています。どちらも環境も無料で使えますので、ご参考までにコメントさせていただきます。

by KK (2020-12-26 20:14) 

ebisu

KKさん
ずいぶんと専門的になってきましたね、情報ありがとうございます。
興味のある方はこちらのwikiの解説をご覧ください。

https://ja.wikipedia.org/wiki/Eclipse_(%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83)

https://ja.wikipedia.org/wiki/Visual_Studio_Code


by ebisu (2020-12-26 23:13) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。