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集 “脳” すごいぞ! ひらめきと記憶の正体”でした。速記メモ。 | トップページ | #深イイ話 徳井さんが一番会いたいダンサーとして東京ゲゲゲイが登場。あ、ゲゲゲイの鬼太郎のダンサーか! »
「パソコン・インターネット」カテゴリの記事
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。(2023.03.31)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。(2023.03.30)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。(2023.03.27)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(1)複素行列を定義して一次方程式や逆行列、行列式などを計算する。(2023.03.24)
- KeysightのADSで位相を±180°に限らずに連続にする関数をよく聞かれるがいつも忘れる…unwrap()だ。PythonのNumPyでもあるので(matlabにもある)いい加減に覚えたい。とりあえずPythonでやってみて記憶する。(2023.03.02)
「学問・資格」カテゴリの記事
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。(2023.03.31)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。(2023.03.30)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。(2023.03.27)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(1)複素行列を定義して一次方程式や逆行列、行列式などを計算する。(2023.03.24)
- 高周波(RF・マイクロ波・ミリ波・5G)関連ニュース(3/16) IEEE Microwave Magazineは女性マイクロ波研究者特集、Microwave Journalで285GHz帯で30GHz帯域のOTA測定!QorvoがUWB室内ナビのデモ、STMとonsemiのBluetooth新商品、IDTechExの6Gレポート、など。(2023.03.16)
「日記・コラム・つぶやき」カテゴリの記事
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。(2023.03.31)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(3) 高速フーリエ変換(FFT)を実行する。FourierOptionsにMatlabとNumerical Recipesがあるのが意外。(2023.03.30)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。(2023.03.27)
- Visual Basic (VB.NET)でC#用の数値計算ライブラリMath.NET Numericsを使う(1)複素行列を定義して一次方程式や逆行列、行列式などを計算する。(2023.03.24)
- BingのAIチャットに最大の素数はいくつ?と聞くと、存在しないが今知られている最大の素数は2^89589933-1だと答えた。が、これは引用している記事が誤植していて、実際は2^82589933-1だ...間違った記事を引用すると間違った答えになる。英語で聞くと1つ前のメルセンヌ素数に…(2023.03.17)
トラックバック
この記事へのトラックバック一覧です: Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その1:複素数演算の基礎:
« #NHKスペシャル 2/4は”シリーズ 人体 神秘の巨大ネットワーク 第5集 “脳” すごいぞ! ひらめきと記憶の正体”でした。速記メモ。 | トップページ | #深イイ話 徳井さんが一番会いたいダンサーとして東京ゲゲゲイが登場。あ、ゲゲゲイの鬼太郎のダンサーか! »
コメント