なぜSPICEは収束しないのか?
「Timestep too small」のエラーに隠された数学的意味。
ニュートン法の発散メカニズムと、シミュレータが諦める瞬間。
1. 悪夢の "Timestep too small"
回路シミュレーションを行っていると、突然解析が止まり、以下のエラーメッセージが表示されることがあります。
! Error: Timestep too small; time = 1.2345e-06, timestep = 1.25e-19: trouble with node "vout"
これは「時間が足りなくなった」わけではありません。「次の一瞬の電圧を決めるための方程式が、どうしても解けなかった」ことを意味します。なぜコンピュータは答えを出せないのでしょうか?
2. 計算エンジン:ニュートン・ラフソン法
ダイオードやトランジスタを含む非線形回路の方程式 $f(v) = 0$ を解くために、SPICEはニュートン・ラフソン法 (Newton-Raphson Method) という反復解法を使用します。
現在の推定値を $v_n$ とするとき、次の推定値 $v_{n+1}$ を接線を用いて求めます。
$$ v_{n+1} = v_n - \frac{f(v_n)}{f'(v_n)} $$
ここで $f'(v_n)$ は、その動作点におけるコンダクタンス(接線の傾き)に相当します。 この計算を繰り返し、更新量が許容誤差(ABSTOL/RELTOL)以下になれば「収束した」とみなされます。
この手法は強力で、通常は数回の反復で真値に到達します。しかし、「初期値 $v_0$ が真値から遠すぎる」場合や、「関数 $f(v)$ の形状が悪い(変曲点や不連続点がある)」場合には、振動したり無限大へ発散したりしてしまいます。
3. なぜタイムステップは小さくなるのか?
過渡解析(Transient Analysis)において、SPICEは「現在の時刻 $t$」の解を使って、「次の時刻 $t + \Delta t$」の初期値を予測(Predict)します。
もしニュートン法が収束しなければ、SPICEは「予測が外れたのは、時間を進めすぎたせいだ」と判断します。そこで、タイムステップ $\Delta t$ を半分にして(時間をもっと細かく刻んで)、前回の解に近い場所でもう一度計算を試みます。
しかし、回路モデルに理想的なスイッチや急激な不連続性(微分不可能な点)が含まれていると、どれだけ時間を細かくしても滑らかな接線が引けず、収束しません。
最終的に $\Delta t$ が浮動小数点数の限界(または設定された `TMIN`)より小さくなったとき、SPICEは敗北を宣言します。これが "Timestep too small" の正体です。
4. Dr.WataWata's Insight
収束エラーの9割は、シミュレータのバグではなく「モデルの不備」です。特に、物理的にはありえない「理想的すぎるモデル」が元凶となります。
自然界に「瞬時に(時間ゼロで)切り替わるスイッチ」や「寄生容量ゼロの配線」は存在しません。SPICEにとって、連続性が保証されない関数は悪夢そのものです。
エラーが出たときは、オプション(`GMIN` stepping等)をいじる前に、回路を見直してください。スイッチにわずかな $R_{on}$ を入れる、急峻なノードに数pFの $C$ を付ける。「物理的なリアリティ(なまり)」を持たせることが、結果として数学的な収束性を救うのです。