JP / EN
SPICE Internal

なぜ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$ を付ける。「物理的なリアリティ(なまり)」を持たせることが、結果として数学的な収束性を救うのです。