« 行列の平方根(X^2 =AとなるX)をPython+SciPy(linalg.sqrtm)で計算。 | トップページ | 「人体―神秘への挑戦―」@上野の国立科学博物館を観てきた。ものすごい人出。アインシュタインの脳標本やタモリさんの内臓レゴブロックがあった。 »

2018年3月29日 (木)

Excel VBAで複素N×N行列(動的配列でNを決める)のさらに動的配列を作る方法(NポートSパラメータの周波数特性みたいな)

Excel VBAをよく使っているが、最近まで構造体の中に動的配列を入れて、その構造体をさらに動的配列にする方法を知らなかった。

どういう時に使いたいか、というと、NポートのSパラメータ(N×Nの複素行列)の周波数特性を保存するときに、Nも周波数ポイントも動的に確保したい、ようなとき。
どうするかというと、、、まず複素数の構造体を定義する
Public Type Complex
    x As Double
    y As Double
End Type
 

 

その上で、こんな風に構造体の変数に動的配列を使う。

Public Type snp
    S() As Complex
    nmax As Integer
    freq As Double
End Type
 

 

そして、これの構造体も行列の大きさも確保するには、

Public Sub Init_snp(S() As snp, port_num As Integer, freq_points As Integer)
    Dim i As Integer, j As Integer, k As Integer
        ReDim S(freq_points)
        For k = 1 To freq_points         ReDim S(k).S(port_num, port_num)         S(k).nmax = port_num     Next k
End Sub
 

のようなサブルーチンを作って呼び出すのが便利。

ようするに、構造体の配列をまずReDimで確保して、その上でその配列要素それぞれに構造体の内部の動的配列をReDimで確保する。
これを作った上で、関数で四則演算や逆行列を作ると、ほとんどNumpyみたいな感じ(いいすぎ、、、)でExcel VBA上で行列演算ができる。
また別途そのライブラリについてはいつか公開するかも。
これを作る前のもうちょっと簡便なライブラリについてはこちら:

Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ 

 

 

 

 

« 行列の平方根(X^2 =AとなるX)をPython+SciPy(linalg.sqrtm)で計算。 | トップページ | 「人体―神秘への挑戦―」@上野の国立科学博物館を観てきた。ものすごい人出。アインシュタインの脳標本やタモリさんの内臓レゴブロックがあった。 »

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 行列の平方根(X^2 =AとなるX)をPython+SciPy(linalg.sqrtm)で計算。 | トップページ | 「人体―神秘への挑戦―」@上野の国立科学博物館を観てきた。ものすごい人出。アインシュタインの脳標本やタモリさんの内臓レゴブロックがあった。 »

最近の記事

最近のコメント

2025年2月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  
フォト
無料ブログはココログ