電気回路から始める数値シミュレーションの基礎

---

# はじめに

私は、物理現象の数値シミュレーションに強い興味を持ち、とりわけ子供のころから電子工作が好きなこともあって、趣味の範囲で電気回路シミュレーションの分野に注目してきました。これまで、SPICEシミュレーターをはじめとする多くの専門書や文献を参考にしてきましたが、高度な理論や専門用語が多く、私にとっては理解が難しい部分が多々ありました。

そこで、私自身のいままでの学びの復習と、物理現象の数値シミュレーションの入門としての視点から、この記事を執筆・共有することにしました。  
本記事では、**陰的数値積分法**を用いた **微分代数方程式（DAE）** の過渡解析と **線形システム** の解法を中心に、**初期値問題**、**SPICEシミュレーター** の応用事例、そして電気回路特有の問題（硬い微分方程式、大規模な非線形連立微分代数方程式）について解説します。

また、電気回路シミュレーションは物理現象の数値シミュレーションを学ぶうえで非常に適していると考えています。電気回路は、比較的シンプルな構造にもかかわらず、陰的数値積分法、初期値問題、DAEのインデックス、予測子-修正子方式など、数値シミュレーションの基礎概念が一通り揃っており、入門教材として極めて有用です。

この記事は、これから数値シミュレーションを学ぶ皆さんへの入門資料として、また私自身がこれまで学んだことの復習として執筆・共有しています。学習の一助としていただければ幸いです。


# 1. 陰的数値積分法と微分代数方程式（DAE）の概要

## 1.1 微分代数方程式（DAE）とは

**微分代数方程式（DAE）** は、微分方程式（時間微分を含む部分）と代数方程式（時間微分を含まない部分）が混在した形で記述される方程式系です。

### 1.1.1 ODE（常微分方程式）との比較

下記の表は、常微分方程式 (ODE) と微分代数方程式 (DAE) の違いをまとめたものです。

| 項目                 | ODE                                          | DAE                                                      |
|----------------------|----------------------------------------------|----------------------------------------------------------|
| 一般的な形           | $ \dot{x} = f(x, t) $                         | $$\mathbf{f}\bigl(\mathbf{x}, \dot{\mathbf{x}}, t\bigr) = 0$$ |
| 代数的制約の有無     | なし（微分方程式のみ）                        | あり（微分方程式 + 代数的制約）                           |
| 必要な初期条件       | $ x(t_0) = x_0 $                             | $\mathbf{x}(t_0)$、代数制約も満たす必要がある              |
| 代表的な例           | 振動方程式、化学反応速度方程式など            | 電気回路シミュレーション、機械系の拘束問題など              |
| 数値解法の複雑さ     | 相対的に単純                                  | 代数部分との整合を取るため、追加の前処理・解析が必要         |

DAEは、時間微分を含む項と含まない代数的な制約が共存するため、単なるODEよりも数値解法に特別な工夫を要します。

### 1.1.2 DAE の一般形

```math
\mathbf{f}\bigl(\mathbf{x}(t), \dot{\mathbf{x}}(t), t\bigr) = 0.
```

ここで  
- $\mathbf{x}(t)$ : 未知関数ベクトル（状態ベクトル）  
- $\dot{\mathbf{x}}(t)$ : $\mathbf{x}(t)$ の時間微分  
- $\mathbf{f}$ : ODE 的な項と代数的な制約項を含む関数  

を表します.

## 1.2 陰的数値積分法の特徴

電気回路は、抵抗、コンデンサ、インダクタ、トランジスタなど多数の素子が組み合わされるため、**Stiff（硬い）** 問題となることが多いです。硬い問題では、明示的な解法（例：前進オイラー法）では数値的に不安定になりがちなので、**陰的数値積分法** を用いることが推奨されます。

代表的な陰的数値積分法の例を以下に示します。

| 手法名                 | 主な特徴                                                        | 用途・メリット                                      |
|------------------------|-----------------------------------------------------------------|-----------------------------------------------------|
| **後退オイラー法**     | 時間ステップ $\Delta t$ が大きくても比較的安定                 | 実装が簡単で硬い問題に向いている                      |
| **台形公式**   | 二次精度の陰的法（平均化を用いる）                               | 高い精度を得やすいが、ステップ幅の選定に注意が必要      |
| **Gear(BDF)法**             | 多段の後退微分公式 (Backward Differentiation Formula) を利用      | 非常に硬い問題への適用が可能                          |

たとえば、後退オイラー法では常微分方程式

```math
\dot{\mathbf{x}} = \mathbf{f}(\mathbf{x}, t)
```

を次のように離散化します.

```math
\mathbf{x}_{n+1} = \mathbf{x}_n + \Delta t\, \mathbf{f}(\mathbf{x}_{n+1}, t_{n+1}).
```

このように、**次の時刻の未知数 $\mathbf{x}_{n+1}$ が右辺に含まれている**（＝「陰的」）ことが、安定性を高める大きな要因となります.

---

# 2. 線形システムの場合の取り扱い

陰的手法では、次の時刻の未知数が式に含まれるため、**非線形**な場合はニュートン・ラフソン法などの反復解法が必要です。しかし、システムが**線形**の場合は、未知数が線形に現れるため、直接解法（LU分解、ガウス消去法など）を用いて高速に解けます.

## 2.1 線形系の例：後退オイラー法

システムが線形の場合、$\mathbf{f}(\mathbf{x}, t)$ は

```math
\mathbf{f}(\mathbf{x}, t) = \mathbf{A}(t)\,\mathbf{x} + \mathbf{b}(t)
```

のように表せます。このとき、後退オイラー法の離散化は

```math
\mathbf{x}_{n+1} = \mathbf{x}_n + \Delta t\, \Bigl( \mathbf{A}_{n+1}\,\mathbf{x}_{n+1} + \mathbf{b}_{n+1} \Bigr)
```

となり、整理すると

```math
\Bigl(\mathbf{I} - \Delta t\, \mathbf{A}_{n+1}\Bigr)\,\mathbf{x}_{n+1} = \mathbf{x}_n + \Delta t\, \mathbf{b}_{n+1}.
```

これは既知行列と既知ベクトルからなる線形方程式系であり、ガウス消去法やLU分解で容易に解けます.

## 2.2 DAEの場合の注意点

**DAE（微分代数方程式）**では、常微分方程式に加え代数的な制約が含まれるため、離散化後に必ずしも単純な線形系が得られるとは限りません。しかし、系全体が線形の構造を持つ場合、行列演算と直接解法が適用できるケースも多いです。  
DAE特有の**インデックスの問題**や**整合初期値**については、後述します.

---

# 3. 線形・非線形システムの比較と実装上のポイント

## 3.1 線形システムの利点

1. **直接解法の利用**  
   線形システムでは、LU分解やガウス消去法などの直接解法が利用でき、計算が効率的です.

2. **数値計算の安定性**  
   陰的数値積分法との組み合わせにより、大きなステップ幅でも比較的安定して解を得られる場合が多いです.

## 3.2 非線形システムの課題

1. **反復解法の必要性**  
   非線形システムでは、ニュートン・ラフソン法などの反復解法が必要であり、初期推定値や収束条件が非常に重要です.

2. **計算負荷の増加**  
   反復解法では、ヤコビ行列の評価や反復計算が生じるため、計算コストが増加する可能性があります.

---

# 4. 初期値問題について

**初期値問題 (Initial Value Problem, IVP)** は、微分方程式の解法における基本的なテーマです。  
初期条件と微分方程式が与えられたときに、解が一意に決定されるか、また数値解の収束性がどうなるかが鍵となります.

## 4.1 基本的な定式化

一般に、常微分方程式 (ODE) の初期値問題は次のように書かれます.

```math
\begin{aligned}
\dot{\mathbf{x}}(t) &= \mathbf{f}(\mathbf{x}(t), t), \quad t > t_0, \\
\mathbf{x}(t_0) &= \mathbf{x}_0.
\end{aligned}
```

ここで  
- $\mathbf{x}(t)$ : 時刻 $t$ の状態ベクトル  
- $\mathbf{f}$ : 変化率（勾配）  
- $\mathbf{x}_0$ : 初期状態

## 4.2 存在と一意性

ピカール・リンドレフの定理などから、$\mathbf{f}$ がリプシッツ連続であるとき、局所的に一意な解が存在することが保証されます.  
この理論は、数値解法の信頼性や安定性の基礎となります.

## 4.3 DAEにおける初期値問題の特殊性

DAEでは、$\mathbf{x}_0$ と代数変数 $\mathbf{z}_0$ を同時に与える必要があり、さらに

```math
\mathbf{g}(\mathbf{x}_0, \mathbf{z}_0, t_0) = 0
```

という代数的制約を初期時刻で満たす必要があります。  
このため、**整合初期値**を厳密に設定することが求められます.

## 4.4 数値解法との関連

陰的数値積分法など、初期値問題をステップごとに解いていく手法では、**初期値の設定**が非常に重要です。特に硬い問題や非線形問題では、初期条件の妥当性が解の収束性や安定性に大きく影響します.

---

# 5. Spiceシミュレーターとの関連性

SPICEシミュレーターは、電子回路の解析に広く利用され、ここで解説した**陰的数値積分法**や**初期値問題**、**DAE** の概念が直接適用されています.

## 5.1 DCオペレーティングポイント解析 (DCOP)

SPICEでは、過渡解析に入る前に回路の定常状態（DCオペレーティングポイント）を計算して **初期条件** を決定します。  
この過程では、抵抗や電源などの **代数方程式** と、コンデンサ・インダクタの **微分方程式** が組み合わされるため、DAEとして解く必要があります.

## 5.2 数値積分法の採用

SPICEの過渡解析では、以下の陰的数値積分法が利用されています.

| 積分法               | 特徴                                          | 用途                                                   |
|----------------------|-----------------------------------------------|--------------------------------------------------------|
| **後退オイラー法**   | 安定性が高く、実装が簡単                       | Stiff（硬い）回路問題にも適用しやすい                           |
| **トラペゾイダル法** | 高精度（二次精度）が可能                       | 適切なステップ幅の設定が求められる                     |
| **ギア法**           | 多段の後退微分公式を用いるため非常に安定        | 極めて硬い問題にも対応可能                              |

## 5.3 電気回路の特徴とMNA法

電気回路は、多数の素子が組み合わされた結果、次のような **大規模な非線形連立微分代数方程式** として表されます.

```math
\mathbf{F}(\mathbf{x}, \dot{\mathbf{x}}, t) = 0.
```

これを **MNA (Modified Nodal Analysis)** で定式化すると、ノード電圧や分枝電流を未知数とする形になり、ほとんどの場合 **Index 1** のDAEに整形されます.  
Index 1であれば、汎用DAEソルバを用いて比較的容易に解が得られます.

以下のMermaid図は、回路からMNA法を通してDAEを得る概略を示しています.

```mermaid
flowchart TD
    A[回路図<br>R, C, L, Vsrc, Isrc, etc.]
    B[ノード方程式の生成<br>KCL, KVL]
    C[修正ノード解析 MNA<br>代数 + 微分方程式]
    D[DAEの形になる]
    E[数値解法<br>陰的積分法 + 予測子-修正子]
    F[回路の過渡解析結果]

    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
```

---

# 6. 数学的な補足事項

ここでは、DAEや数値解法に関連する理論的背景について、さらに詳細に補足します.

## 6.1 数値積分法の安定性と収束性

1. **A-安定性:**  
   テスト方程式 $y' = \lambda y$ ($\Re(\lambda) < 0$) に対し、どのようなステップ幅をとっても数値解が発散しない性質を A-安定性と呼びます.  
   陰的手法は多くの場合 A-安定であり、硬い問題でも収束しやすいです.

2. **L-安定性:**  
   A-安定性に加えて、$\Delta t \lambda \to -\infty$ のとき数値解が急速に $0$ へ収束する性質を L-安定性と呼びます.  
   非常に硬い問題では、L-安定性が重要な役割を果たします.

3. **局所誤差とグローバル誤差:**  
   - **局所誤差:** 1ステップの離散化誤差  
   - **グローバル誤差:** 全時刻にわたる累積誤差  
   適切なステップ幅の制御と誤差評価により、グローバル誤差を抑制します.

## 6.2 非線形連立方程式の解法と収束性

非線形システムを解く際には、ニュートン・ラフソン法などの反復解法が用いられます.  
この場合、ヤコビ行列

```math
\mathbf{J} = \frac{\partial \mathbf{f}}{\partial \mathbf{x}}
```

の評価が必要となり、適切な初期推定値が与えられれば、局所的に二次収束する理論的保証があります。しかし、初期推定値が不適切な場合や、ヤコビ行列が特異に近い場合、収束が遅延または失敗することがあるため、**ラインサーチ**や **ダンピング** などが導入されます.

## 6.3 DAEのインデックスとその低減（Index 1 DAE）

- **Indexの定義:**  
  DAEを純粋なODEに変換するために必要な微分操作の回数を「Index」と呼びます.  
  Index 1のDAEは1回の微分操作でODE化可能です.

- **Index 1 のメリット:**  
  Index 1 DAEは、一般的なODEソルバや汎用DAEソルバ（例：SUNDIALS/IDA）で安定に解けるため、実装が比較的単純です.  
  Index 2 以上の場合、補助変数や追加の制約の導入が必要となり、アルゴリズムが複雑化します.

- **電気回路シミュレーションとIndex 1:**  
  MNA法により、電気回路は多くの場合 Index 1 に整形されるため、数値ソルバの適用が容易となります.

## 6.4 電気回路モデルの行列表現

電気回路を数値的にモデル化する際、各素子の特性方程式 (R, C, L, Vsrc, Isrc, etc.) を連立させて大規模な非線形連立微分代数方程式

```math
\mathbf{F}(\mathbf{x}, \dot{\mathbf{x}}, t) = 0
```

として組み上げます.  
ここで、$\mathbf{x}$ は各ノード電圧や素子電流などの状態ベクトルを表し、行列表現により回路全体の動作が記述されます.

## 6.5 予測子-修正子方式による誤差推定とステップサイズ制御

SPICEシミュレーターの過渡解析では、台形法やギア法などの陰的数値積分法とともに、**予測子-修正子 (Predictor-Corrector) 方式**が採用されます.  
この方式は以下の手順で実施されます。

1. **予測 (Predict):**  
   過去のステップの解
   例：
```math
   \mathbf{x}_n,\mathbf{x}_{n-1}
```   
   やその微分値を用い、多項式外挿などにより“仮の解” $\mathbf{x}_{n+1}^{(\mathrm{pred})}$ を計算します.

2. **修正 (Correct):**  
   予測値を初期推定値として、ニュートン法などの反復法で陰的方程式を解き、“本解” $\mathbf{x}_{n+1}^{(\mathrm{corr})}$ を求めます.

3. **誤差推定とステップサイズ制御:**  
   予測値と修正値の差

   ```math
   \mathbf{e}_{n+1} = \mathbf{x}_{n+1}^{(\mathrm{pred})} - \mathbf{x}_{n+1}^{(\mathrm{corr})}
   ```

   をローカル誤差の目安として評価し、この差が大きければステップ幅を縮小し、逆に小さい場合は拡大するなどの自動制御を行います.

以下のMermaid図は、予測子-修正子方式による過渡解析の大まかな流れを示しています.

```mermaid
flowchart TD
    A[予測 Predict<br>過去の解から仮の解を計算]
    B[修正 Correct<br>ニュートン法で本解を求める]
    C[誤差推定]
    D[ステップ幅制御<br>誤差大 縮小, 誤差小 拡大]
    E[次ステップへ進む]
    
    A --> B
    B --> C
    C --> D
    D --> E
```

---

# 7. よくある疑問

ここでは、電気回路シミュレーションや数値シミュレーション全般において、初学者が抱きがちな疑問をいくつか挙げ、その回答を紹介します。

---

### Q1. 「電気回路シミュレーションは、どうして数値シミュレーションの入門に適しているのですか？」

- **A1.** 電気回路は、比較的シンプルな構造でありながら、多様な要素（抵抗、コンデンサ、インダクタ、トランジスタ、電源など）が存在します。  
  さらに、これらの要素が組み合わさって発生する方程式は、微分方程式と代数方程式が混在する **DAE** となり、Stiff（硬い）問題にもなりやすいという特徴があります。  
  そのため、数値シミュレーションにおける基本概念（陰的法、初期値問題、インデックス、予測子-修正子方式など）を一度に学びやすい題材となっています。

---

### Q2. 「Stiff（硬い）とは、具体的にどういう状況ですか？」

- **A2.** Stiff（硬い）とは、大きく異なる時間スケールで変化する部分がシステム内に混在し、一部の高速変化を追うためにステップ幅を極端に小さくすると、全体の計算が非効率になる、という状況を指します。  
  明示的な解法では安定性を保つために非常に小さなステップ幅が必要になりますが、陰的法を使うと大きめのステップ幅でも安定的に解けるという利点があります。

---

### Q3. 「DAE のインデックスが高いと、何が問題になるのですか？」

- **A3.** インデックスが高い（Index 2 以上）のDAEでは、微分操作や補助変数の導入が必要になる場合が多く、アルゴリズムが複雑化し、誤差制御や実装の難易度が上がります。  
  一方、Index 1 であれば汎用のDAEソルバが比較的容易に適用でき、安定かつ高速に解が得られます。電気回路では Modified Nodal Analysis (MNA) によって多くの場合 Index 1 へと整形されます。

---

### Q4. 「SPICE で使われる台形法やギア法のステップサイズは、どうやって決まるのでしょうか？」

- **A4.** 一般的には、**予測子-修正子方式**や、異なる次数の近似解を比較する埋め込み (embedded) スキームなどにより、ローカル誤差が許容範囲内に収まるようステップ幅を自動調整します。  
  SPICE では、ユーザが設定する相対誤差、絶対誤差、電圧誤差など（RELTOL, ABSTOL, VNTOL など）を基準に、誤差が大きければステップ幅を縮め、誤差が小さければステップ幅を広げるといったアプローチが取られています。

---

### Q5. 「実際のハードウェアとの誤差はどこから来るのですか？」

- **A5.** 数値シミュレーションでは、以下のような要因で実際のハードウェアとの違いが生じます。  
  1. **モデル化の誤差**: 素子の特性式が理想的に近似されている場合、実際の特性とは乖離があるかもしれません。  
  2. **数値離散化の誤差**: 陰的法・明示的法を問わず、有限なステップ幅で離散化する以上、切り捨て誤差や丸め誤差が入ります。  
  3. **パラメータの不確定性**: 回路素子の実際の値がデータシートやシミュレーターのモデルと若干異なる可能性があります。

---

### Q6. 「電気回路以外の分野にも、これらの手法は使えますか？」

- **A6.** もちろんです。陰的数値積分法やDAEソルバは、機械系の拘束問題（剛体多体系など）、化学反応速度論、高分子力学、流体-構造連成など、多岐にわたる分野で応用されています。  
  電気回路は、これらの基礎となる概念をコンパクトに体験できる題材であり、他の分野でも同様の理論・手法が有効です。

---

# 8. まとめ

陰的数値積分法は、**硬い問題**や**大きなステップ幅**が求められるシステムに対して非常に有効な手法です。以下の点に注目してください。

- **DAEの取り扱い:**  
  DAEは代数的な制約を含むため、前処理（インデックス低減）や整合初期値の設定が重要となります.

- **初期値問題:**  
  初期条件の整合性が解の収束性や安定性に大きな影響を与えます。Spiceでは、DCオペレーティングポイント解析により初期条件が決定されます.

- **電気回路シミュレーション:**  
  電気回路は、抵抗・コンデンサ・インダクタなど多様な素子を含むため、大規模な非線形連立微分代数方程式としてモデル化され、陰的数値積分法により安定的に解かれます。MNA法のおかげで多くの回路がIndex 1に整形されるため、数値解法が適用しやすいです.

- **予測子-修正子方式:**  
  予測段階と修正段階の解の差をローカル誤差として推定し、ステップ幅を自動的に調整することで、真の解が分からない段階でも効率と精度の両立が可能となります.

こうした理論的背景や数値手法を習得することで、電気回路シミュレーションを始めとする様々な物理現象の数値解析に応用が可能となります。

---

# 9. 参考文献

- **Hairer, E., Wanner, G.**  
  『Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems』

- **Ascher, U. M., Petzold, L. R.**  
  『Computer Methods for Ordinary Differential Equations and Differential-Algebraic Equations』

---

# 10. 用語集

最後に、本文中で取り上げた用語や概念をまとめました。

| 用語                                             | 説明                                                                                                                     |
|--------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|
| **ODE (常微分方程式)**                           | 時間微分を含む方程式だが、代数的制約は含まない方程式。例：$\dot{x} = f(x, t)$                                            |
| **DAE (微分代数方程式)**                         | 微分方程式と代数方程式が混在した形。時間微分を含む式と含まない式が同時に存在。Index や整合初期値など特有の問題がある       |
| **Stif（硬い）問題**                         | 同時に存在する複数の時定数に大きな差があるなど、明示的手法では極端に小さいステップ幅が必要になりがちな問題               |
| **陰的数値積分法**                               | 次の時刻の未知数が式の右辺に現れる手法。硬い問題で大きめのステップ幅を取っても安定に解ける利点がある                    |
| **初期値問題 (IVP)**                             | $\dot{x}(t) = f(x(t), t)$ と $x(t_0)=x_0$ のように、ある時刻 $t_0$ での状態が与えられた問題                             |
| **Index (インデックス)**                         | DAEを通常のODEに変換するまでに必要な微分操作の回数。Index 1 なら1回微分でODE化できる                                     |
| **MNA (Modified Nodal Analysis)**                | 電気回路シミュレーションで使われる手法。ノード電圧や分枝電流を未知数として方程式を組み立て、Index 1 のDAEが得られることが多い |
| **予測子-修正子方式**                            | 予測段階と修正段階で解を2種類計算し、その差をローカル誤差の見積もりとしてステップ幅を制御する方法                          |
| **DCオペレーティングポイント解析 (DCOP)**         | 回路の定常状態（直流動作点）を求める解析。SPICEではこれにより初期条件が決定される                                          |

---

以上、**陰的数値積分法**を用いた **DAE** の過渡解析、**線形システム** の解法、**初期値問題**、**SPICEシミュレーター** との関連性、そして数学的な補足事項（安定性、収束性、DAEのインデックス、予測子-修正子方式による誤差推定、電気回路の行列表現など）について、解説しました。  
この記事は、物理現象の数値シミュレーションを学ぶための入門資料として、そして私自身がこれまで学んだことの復習として、執筆・共有しています。  
皆様の学習の一助となれば幸いです。

---