FMI for ME と MOSFET モデル：モデルとソルバを分離しつつ、異なる“微分”を扱う話

# FMI for Model Exchange と MOSFET モデル：モデルとソルバを分離しつつ、異なる“微分”を扱う話

## はじめに

前回の記事では、「FMI (Functional Mock-up Interface) for Model Exchange (以下 FMI for ME) と MOSFET モデルは、どちらも“モデルとソルバを分離する”という意味で似ている」とお話ししました。  
両者とも、モデル（方程式や特性式）の定義と、それを解くためのソルバ（数値解法）を区別して考える枠組みを持っているからです。

しかし、一方で **“どのような微分を返すのか”** という点では大きく異なります。  
本記事では、まず「モデルとソルバの分離」という観点での共通点をおさえた上で、  
なぜ **FMI for ME が“時間微分”** を返し、そして **MOSFET モデルが“端子電圧に対する偏微分”** を返すのかをわかりやすく解説します。

---

## モデルとソルバを分離するという意味で似ている

### FMI for Model Exchange: モデル本体と数値積分器（ソルバ）の分離

FMI for ME は、以下のような常微分方程式 (ODE) ベースの状態空間モデルを想定します。

$$
\dot{\mathbf{x}}(t) = f\bigl(t,\mathbf{x}(t),\mathbf{u}(t)\bigr), \quad
\mathbf{y}(t) = g\bigl(t,\mathbf{x}(t),\mathbf{u}(t)\bigr).
$$

- **モデル本体**: $ \mathbf{x}$, $ \mathbf{u}$, $ \mathbf{y}$ と、それらの関係式 $ f$, $ g$。  
- **ソルバ**: この方程式を解くための数値積分器やシミュレーションエンジン（例: Euler 法、Runge-Kutta 法 など）。

FMI for ME は、モデルを **FMU (Functional Mock-up Unit)** という形でブラックボックス化し、  
**ソルバ（数値積分器）は外部に用意** します。  
FMU 側は「状態 $ \mathbf{x}$ と入力 $ \mathbf{u}$ を与えれば、$ \dot{\mathbf{x}}$ と $ \mathbf{y}$ を返す」という仕組みだけ実装しておけばよく、  
ソルバの具体的な実装はユーザ側に委ねられます。  
これが、「モデルをソルバから切り離しておける」という FMI for ME の大きな利点です。

### MOSFET モデル: SPICE などの回路シミュレータとの分離

MOSFET モデル（たとえば BSIM4）も、実は「モデル本体」と「ソルバ役の回路シミュレータ」を明確に切り分けています。

- **モデル本体**: ドレイン電流 $ I_d$ の計算式や、端子電圧に対する微分パラメータなど。  
- **ソルバ**: SPICE 系の回路シミュレータ（HSPICE, Spectre, LTspice など）が、モデルから返される電流および偏微分情報を用いて  
  非線形方程式 
  $$
  \mathbf{f}(\mathbf{V}) = 0
  $$
  を解く（ニュートン法など）。

つまり「モデルとソルバは別々の役割をもち、モデルは回路シミュレータに必要な情報（電流や偏微分）を返すだけで、  
実際の数値解法は回路シミュレータ側が担当している」のです。  
このように、**モデルとソルバを分けておく**というアプローチは FMI for ME と MOSFET モデルに共通しており、  
前回述べた“似ている点”といえます。

---

## それでも違うのは「返す微分」が異なるから

### FMI for ME は「時間微分」を返す

FMI for ME は、「**状態の時間変化** $ \dot{\mathbf{x}}$」を返すための仕様になっています。  
制御システムや機械システムなど、時間軸に沿って「状態がどう変化するか」を数値積分するのが中心です。  
ソルバ（数値積分器）は、FMU から返される $ \dot{\mathbf{x}}$ をもとに

$$
\mathbf{x}(t + \Delta t) \approx \mathbf{x}(t) + \int_{t}^{t+\Delta t} \dot{\mathbf{x}}(\tau) \, d\tau
$$

などと計算し、シミュレーションを進めていきます。

### MOSFET モデルは「端子電圧に対する偏微分」を返す

一方、回路シミュレータが必要としているのは「ノード電圧に対して回路方程式がどのように変化するか」、つまり **“偏微分”** です。  
具体的には、MOSFET（たとえば BSIM4）のドレイン電流 $ I_d$ は、ゲート電圧 $ V_g$、ドレイン電圧 $ V_d$、ソース電圧 $ V_s$、バルク電圧 $ V_b$ などに依存しており、

$$
I_d = I_d(V_g, V_d, V_s, V_b)
$$

という複雑な関係式になっています。  
ニュートン法では、1ステップごとに「いまの推定点まわりで $ \mathbf{f}(\mathbf{V})$ を一次近似」するため、

$$
\frac{\partial I_d}{\partial V_g}, \quad
\frac{\partial I_d}{\partial V_d}, \quad
\frac{\partial I_d}{\partial V_s}, \quad \dots
$$

のような **“端子電圧に対する微分”**（偏微分値）が不可欠です。  
これらの値がないと、回路方程式のヤコビ行列を構築できず、ニュートン法が解の更新方向（修正量）を計算できなくなります。  

---

## ニュートン法の幾何学的イメージ

### 1変数の場合：接線

1変数のニュートン法では「関数 $ f(x)$ の微分 $ f'(x_n)$ から接線を引き、  
x 軸との交点を次の推定値 $ x_{n+1}$ とする」という流れです。  
幾何学的には「近傍の曲線を直線近似して解を探す」イメージです。

### 多変数の場合：接平面（超平面）

回路シミュレータが解くような多変数の非線形方程式

$$
\mathbf{f}(\mathbf{V})=0
$$

では、1変数の「接線」が**「接平面（超平面）」**となります。  
式を1次近似すると、

$$
f_i\bigl(\mathbf{V} + \Delta \mathbf{V}\bigr)
\approx
f_i(\mathbf{V})
+ 
\sum_j
\frac{\partial f_i}{\partial V_j}\bigl(\mathbf{V}\bigr)\,
\Delta V_j.
$$

ここで 
$ \frac{\partial f_i}{\partial V_j}(\mathbf{V})$ は **「端子電圧に対する偏微分」** であり、  
MOSFET モデルが提供する重要な情報です。

---

## まとめ：モデルとソルバを分離する点で似ているが、返す微分は異なる

1. **モデルとソルバの分離という共通点**  
   - **FMI for ME** は「FMU (モデル)」と「数値積分ソルバ」を分離  
   - **MOSFET モデル** は「デバイスモデル本体」と「回路シミュレータ（ソルバ役）」を分離  
   - いずれも、モデルは自分の方程式（特性）を定義し、ソルバはその解法を担うという役割分担を行う

2. **扱う微分は異なる**  
   - **FMI for ME**: 「**時間微分**($ \dot{\mathbf{x}}$)」を返し、ODE ソルバで時間積分を行う  
   - **MOSFET モデル（BSIM4 など）**: 「**端子電圧に対する電流の偏微分**($ \partial I/\partial V$)」を返し、回路シミュレータがニュートン法で代数方程式を解く  

3. **なぜ微分が違うのか？**  
   - FMI for ME は「制御系や機械システムなど、状態の**時間変化**を中心に据えた解析」を想定  
   - 回路シミュレータは「各時刻で**ノード電圧を求めるための非線形方程式解法**（ニュートン法）」を主眼にしている  

---

**結論として、FMI for ME と MOSFET モデルは「モデルとソルバを切り離す」という点では確かに似ていますが、  
実際にやり取りされる微分情報（時間微分 vs. 端子電圧に対する偏微分）が大きく異なるため、  
適用分野や目的も違ってきます。**  

回路シミュレーションでは「いまの電圧に対する電流の変化量」を即座に把握する必要があるため、  
MOSFET モデルは偏微分を返す仕組みを備えているのです。