Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その2,行列とベクトルのまま計算する場合。非可換シンボル(commutative=False)を使う。
昨日は行列とベクトルを成分に直して計算した。イマイチかっこわるい、、、ということで行列とベクトルのまま計算する方法。
Sympyで行列はMatrixSymbolで定義できるが、実はこれではどうやら今回のものは計算できないっぽい。
それは、solveがMatrixSymbolに対応してないから。
じゃあどうするか?というと、非可換の変数として定義する。
https://docs.sympy.org/latest/tutorial/manipulation.html
例えば
A=Symbol('A', commutative=False)とすると非可換になる。これならsolveが使える。ただしcollectiveは使えない。
成分と同様、こうやって計算できる。
from sympy import *
init_printing()
#Sパラメータ, Zパラメータの非可換の変数定義
V = Symbol('V', commutative=False)
I = Symbol('I', commutative=False)
a = Symbol('a', commutative=False)
b = Symbol('b', commutative=False)
S = Symbol('S', commutative=False)
Z = Symbol('Z', commutative=False)
#特性インピーダンスを対角成分にもつ行列のみ可換
Zo = Symbol('Zo')
#Zパラメータの定義
expr = V - Z*I
#V,Iを入射波a, 反射波bで書き直す。
expr2=expr.subs([(I, (a-b)/sqrt(Zo)), (V, (a+b)*sqrt(Zo))])
#反射波bについて解いたものがSパラメータ
Sconvert = solve(expr2, b)
#aをくくりだす
display(separatevars(Sconvert[0]))
結果はおなじみのものが得られた。
答え:
« Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その1、成分で書く場合 | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その3. S=(Z+Zo)⁻¹(Z-Zo)とS=(Z-Zo)(Z+Zo)⁻¹とどちらでもいいことを確認。 »
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
- MATLAB Onlineで高周波用のRF Toolboxを使ってみる。Touchstoneファイルの読み込み、dB表示グラフ、スミスチャートなど簡単にできるし、フィルタ合成やIEEE P370 De-embedding(ZC-2xThru)も使える(MATLABで書かれたものがオリジナル)。(2024.12.05)
« Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その1、成分で書く場合 | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その3. S=(Z+Zo)⁻¹(Z-Zo)とS=(Z-Zo)(Z+Zo)⁻¹とどちらでもいいことを確認。 »
コメント