Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その1:複素数演算の基礎
会社では、まあ開発部門は何のプログラム言語を使ってもいいのだけれど
工場ではそういうわけにもいかない。そもそも外部のネットワークに接続できなかったりする。
ちょっとした設計や計測に使うソフトウェアを作って配りたい、
というときに非常に困る。
ソフトウェアを買え、という話もあるが、損益が厳しい工場が買うはずがないのだ。(これを導入したらいくらの売り上げUPか利益率いくらUPが定量的に示せないと何も買わないのだ)
MicrosoftのOfficeくらいならどの工場のPCでも入っている、ということで
フルスクラッチでExcelのマクロ(VBA)で計算・計測プログラムを作って配っていたりする。
DLLですらダウンロードできないので、全部ソースに書いているという。
※ちなみに仕事でやっているわけでなくて、単なるサービスというか、趣味。
私はもはやエンジニアでもないのだったりする。
ということで、今回はそのライブラリを紹介します。まあそれなりにみんなに使ってもらっているので致命的なバグはないと思いますが、細かいミスはご勘弁を、、、(責任は全くとらない方向で)
まずライブラリ本体:
またルンゲクッタ8次のDOP853ルーチンとそのドライバ。
メルセンヌツイスタ用
――
今回は第一回ということで複素数演算などの使い方。
Numerical Recipesについてはこちらから本が丸ごと読めます。
まずはVBAの編集画面から、ファイルのExportを行い、
ComplexMath.bas
を読み込みます。これで複素数演算(FFT,連立一次方程式,逆行列)、フィッティング(線形・非線形)などが
使える状態になります。
複素数は構造体で定義されています。
Public Type Complex
x As Double
y As Double
End Type
この変数を作るときは、
Dim x As Complex
のように宣言します。
もちろん、配列も宣言できます。行列を作るには
Dim A() as Complex
Redim A(3,3)
とすれば可変長の行列ができます。
※Numerical Recipesの表現に合わせたので、0からではなくて1からです。
明示的に最初に Option BASE 1 としておくと便利
値を代入するには、
z = ToComplex(1.2, 3.5)
のように実部と虚部に分けて設定することができます。
この場合 z=1.2+3.5i と入力したことに相当します。
また
z = x
のように別の複素数は直接代入できます。
四則演算については +,-,×,÷はそれぞれ
z = Cadd(x, y)
z = Csub(x, y)
z = Cmul(x, y)
z = Cdiv(x, y)
Cdiv(x,y)のみ順番に注意が必要で、x/yの意味です。
複素共役,絶対値、偏角はそれぞれ、
z=Conj(z), a=Cabs(z), p=CPhase(z)
実数部分、虚数部分を取り出すにはそれぞれ
a=Rez(z), b=Imz(z)
などとします。
※ついでに角度が±πに対応したatan2(x,y)という関数も使えます。x/y=tanθの逆関数。
複素数の指数、対数関数、べき乗関数はそれぞれ(多価関数は±πのみを取る)
z=Cexp(x), z=Clog(x), z=Cpow(x,y)となる。ただしべきはz=x^yの意味。
--
では次回はFFTを。
--
こちらも参照:
« #NHKスペシャル 2/4は”シリーズ 人体 神秘の巨大ネットワーク 第5集 “脳” すごいぞ! ひらめきと記憶の正体”でした。速記メモ。 | トップページ | #深イイ話 徳井さんが一番会いたいダンサーとして東京ゲゲゲイが登場。あ、ゲゲゲイの鬼太郎のダンサーか! »
「パソコン・インターネット」カテゴリの記事
- 高周波回路シミュレータQucsStudioを使ってみる(その3)Mixed Mode S parameterを計算(2018.10.12)
- 高周波回路シミュレータQucsStudioを使ってみる(その2)SパラメータのTouchStoneフォーマットで出力するには?(2018.10.11)
- 高周波回路シミュレータQucsStudioを使ってみる(その1)まずは何をさておきμの文字化けだけには注意。(2018.10.10)
- 円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算(カシオの高精度計算サイト自作式)で180°以上、複数解に対応。(2018.10.09)
- macbook proをmacOS Mojaveにアップデート。せっかくなんでダークモードにしてみる。(2018.09.26)
「学問・資格」カテゴリの記事
- iPhoneで使える数学ソフトMaple Calculatorで手書き入力でMathematicaの常微分方程式の例を試す(その1)(2021.03.29)
- 高周波(RF・マイクロ波・ミリ波・5G)関連ニュース2021年3月16日 IEEE Microwave magazineの特集は中国のマイクロ波技術、Microwave Journalの特集はCATRでミリ波ビームスキャンを測定、SIJの特集はなんと450ドルのネットアナ、フリーの高周波シミュレータ(Qucsなど)。(2021.03.16)
- 高周波(RF・マイクロ波・ミリ波・5G)関連ニュース2021年2月16日 IEEE Microwave Magazineの特集はオールデジタルのRFID、Microwave JournalはEバンド ミリ波通信に衛星や気球を使う話、アメリカの半導体企業がバイデンに投資を迫る、(2021.02.17)
- カオスを生じる電気回路、Chua’s circuitをLTspiceで回路シミュレーションしてみる。(2021.02.19)
- Labyrinth Chaos(迷宮カオス)を生むThomas-Rössler方程式のパラメータbを色々変えて、Python+Scipyでルンゲクッタ8次のDOP853(Dormand&Prince)を使って計算してGIFアニメ(2021.02.16)
「日記・コラム・つぶやき」カテゴリの記事
- 新型コロナウイルス、中国、日本、韓国、アメリカ、ドイツ、フランス、イギリスでの感染者数を指数関数&ロジスティック関数&Log-Logプロットでべき関数フィッティングした(4/11更新)日本は陽性者50万人を超え第四波の始まり、というかイギリス以外は全部増えだしてる。(2021.04.12)
- 3乗すると(奇数回べき乗すると)元に戻る数59161727622001114846846461792218008213239954784512519836425781249(2乗すると元に戻る数はペレリマン数列)(2021.04.11)
- 円と接線を使った1枚の絵でsin/cos/tan/sec/csc/cotを表すもの、複素数を使って接線のパラメータ表示(z=exp(iθ)+i exp(iθ) t )で計算してみる。(2021.04.05)
- 新型コロナウイルス、中国、日本、韓国、アメリカ、ドイツ、フランス、イギリスでの感染者数を指数関数&ロジスティック関数&Log-Logプロットでべき関数フィッティングした(4/4更新) フランス・ドイツの増え方がエグイが日本・韓国もやはり増加中。イギリスの減速がすごいな。(2021.04.05)
- 分数階微分(Fractional Calculus)の計算をPythonのdifferint(Riemann-Liouvilleの定義で計算するもの)でやってみる。(2021.04.02)
トラックバック
この記事へのトラックバック一覧です: Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その1:複素数演算の基礎:
« #NHKスペシャル 2/4は”シリーズ 人体 神秘の巨大ネットワーク 第5集 “脳” すごいぞ! ひらめきと記憶の正体”でした。速記メモ。 | トップページ | #深イイ話 徳井さんが一番会いたいダンサーとして東京ゲゲゲイが登場。あ、ゲゲゲイの鬼太郎のダンサーか! »
コメント