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 モデルが提供する重要な情報です。
まとめ:モデルとソルバを分離する点で似ているが、返す微分は異なる
-
モデルとソルバの分離という共通点
- FMI for ME は「FMU (モデル)」と「数値積分ソルバ」を分離
- MOSFET モデル は「デバイスモデル本体」と「回路シミュレータ(ソルバ役)」を分離
- いずれも、モデルは自分の方程式(特性)を定義し、ソルバはその解法を担うという役割分担を行う
-
扱う微分は異なる
- FMI for ME: 「時間微分($ \dot{\mathbf{x}}$)」を返し、ODE ソルバで時間積分を行う
- MOSFET モデル(BSIM4 など): 「端子電圧に対する電流の偏微分($ \partial I/\partial V$)」を返し、回路シミュレータがニュートン法で代数方程式を解く
-
なぜ微分が違うのか?
- FMI for ME は「制御系や機械システムなど、状態の時間変化を中心に据えた解析」を想定
- 回路シミュレータは「各時刻でノード電圧を求めるための非線形方程式解法(ニュートン法)」を主眼にしている
結論として、FMI for ME と MOSFET モデルは「モデルとソルバを切り離す」という点では確かに似ていますが、
実際にやり取りされる微分情報(時間微分 vs. 端子電圧に対する偏微分)が大きく異なるため、
適用分野や目的も違ってきます。
回路シミュレーションでは「いまの電圧に対する電流の変化量」を即座に把握する必要があるため、
MOSFET モデルは偏微分を返す仕組みを備えているのです。