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)⁻¹とどちらでもいいことを確認。 »
「日記・コラム・つぶやき」カテゴリの記事
- ExcelのCopilotにPlanモードが追加されていた。早速変な並びのSパラメータのTouchstoneフォーマットデータ(5ポート)を並び変えてもらうとちゃんと計画を立ててうまくできた。裏でPythonを使っていると言ってきた。(2026.05.13)
- 高周波・RFニュース 2026年5月12日 IEEE Microwave Magazineはモデリングと最適化特集、Journal of Microwavesも5月号発行、iFixitがHuawei Pura X Maxを分解、TDKがSensorGPTを開発、Mini-CircuitsのLNA MMIC解説動画など(2026.05.12)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/3-5/10(2026.05.10)
- 高周波・RFニュース 2026年5月8日 QualcommがSnapdragon 6 Gen5と4 Gen5発表、Pythonの高周波ライブラリscikit-rfがv1.12.0でKlopfensteinテーパ導入、Mini-CircuitsがGNSSを車載複数システムに使うアプリケーションノート発行、GSAがミッドバンドスペクトラムのレポート発行(2026.05.08)
« Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その1、成分で書く場合 | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その3. S=(Z+Zo)⁻¹(Z-Zo)とS=(Z-Zo)(Z+Zo)⁻¹とどちらでもいいことを確認。 »



コメント