SPICEで3次関数の接線を引いてみる
SPICEの「変態的」な使い方。
電子回路シミュレータに純粋な数学を解かせる。
1. SPICE指向型解析法とは
SPICEは電子回路シミュレータですが、実は強力な「数式解析エンジン」としての裏の顔を持っています。
回路設計の現場では、オペアンプの増幅率を確認したり、トランジスタの過渡応答を波形で見たりするためにSPICEを使います。しかし、電圧や電流を単なる「数学の変数」とみなし、数式をそのまま回路網として記述して解を求めさせることも可能です。
このような、純粋な数学的課題をシミュレータの機能に落とし込んで解決するアプローチを、当サイトでは「SPICE指向型解析法」と呼んでいます。今回は少し息抜きとして、この手法を用いた変態的な接線の求め方をご紹介します。
2. お題: $y = x^3 - 3x$ の接線の傾き
ターゲットとして、高校数学でおなじみの以下の3次関数を用意しました。
$$ y = x^3 - 3x $$
この曲線の $x=1$ および $x=2$ の地点における「接線の傾き」を求めたいと思います。手計算(微分)であれば、導関数は $y' = 3x^2 - 3$ となります。ここにそれぞれの $x$ を代入すると、以下の理論値が得られます。
- $x=1$ のときの傾き: $3(1)^2 - 3 = 0$ (谷底なので傾きはゼロ)
- $x=2$ のときの傾き: $3(2)^2 - 3 = 9$
では、この計算をSPICEにやらせるための「変態的なネットリスト」を組んでみましょう。
3. 回路屋の美学を込めたネットリスト
数式を解かせる際、Bソース(非線形従属電源)をそのまま電圧源として記述するのが最もシンプルですが、今回は少し回路屋としての「粋」を込めて、以下のような構成にしました。
***** MacSpice Sens Test ***** * xの現在地を決めるツマミ(ここでは x=1 に設定) Vx x 0 1 * y = x^3 - 3x を計算する非線形従属「電流源」 By 0 y I = V(x)^3 - 3 * V(x) * 電流を電圧に変換するための1Ωの抵抗 Ry y 0 1 * yの電圧に対する各変数の「感度」を求めよ .SENS V(y) .END
数式を電流源 `I` として計算させ、それを1Ωの抵抗 `Ry` に流し込むことで、オームの法則($V = I \times R$)によりノード `y` に計算結果の電圧を発生させています。そして、今回の主役となるのが `.SENS V(y)` というコマンドです。
`.SENS` (感度解析)の真の姿
`.SENS` は一般的に「この回路の出力電圧に対して、どの抵抗のバラツキが一番悪影響を与えるか?」といったワーストケース解析などに使われます。
しかし、その内部でやっている計算の正体は「指定した出力に対して、回路内の全パラメータの偏微分を一斉に計算する」というものです。SPICEは「随伴回路法(Adjoint Network Method)」という行列計算のトリックを使い、現在のDC動作点におけるすべての変数の偏微分(勾配ベクトル)を、たった1回の計算で導き出します。
つまり `.SENS` とは、現在地における「各方向への接線の傾き」をズバリ具体的な数値として出力してくれる、超強力な微分計算コマンドなのです。
4. 結果発表:SPICEは数学を解けたか?
上記のネットリスト($x=1$)をMacSpiceで実行してみます。
MacSpice 5 -> run MacSpice 6 -> print all ry = -2.00000e+00 vx = 0.00000e+00
`vx`(入力 $x$ に対する感度、つまり接線の傾き)が見事に `0.00000e+00` と出力されました。グラフの谷底であることを正確に見抜いています。
次に、ネットリストの1行目を `Vx x 0 2` に書き換えて実行してみます。
MacSpice 7 -> run MacSpice 8 -> print all ry = 2.00000e+00 vx = 9.00000e+00
今度は `vx` が `9.00000e+00` となりました。これも手計算の理論値と完全に一致しています!
5. Dr.WataWata's Insight
このように、SPICEはただの回路検証ツールではなく、多変数関数の微分(勾配)を一瞬で導き出すことができる優秀な数学ソルバーでもあります。
この `.SENS` が吐き出す「接線の傾き」を羅針盤として使えば、複雑な非線形最適化問題(方程式の全解探索など)を解かせることも夢ではありません。たまには視点を変えて、シミュレータに純粋な数学を解かせてみるのも、エンジニアにとって最高にエキサイティングな遊びではないでしょうか。