予測子修正子法シミュレーター 戻る
数値解析

予測子修正子法シミュレーター — ホイン法

常微分方程式を解く2段階の数値積分法「ホイン法(予測子修正子法)」を可視化するツールです。オイラー法で予測し台形公式で修正する仕組みを、刻み幅 h と初期値を変えながら確認でき、オイラー法に対する誤差改善率と厳密解との一致がリアルタイムで分かります。

パラメータ設定
テスト方程式
厳密解が分かっている常微分方程式を選択
刻み幅 h
1ステップで進める時間幅
初期値 y0
t=0 における y の初期値
計算時間 t_end
s
積分を行う総時間
計算結果
予測子修正子法の最終値
オイラー法の最終値
厳密解の最終値
予測子修正子法の最大誤差
オイラー法の最大誤差
誤差改善率 (%)
予測子・修正子の1ステップ — 解平面アニメーション

厳密解の曲線上をマーカーが1ステップずつ進みます。拡大表示では、オイラー予測子の傾き・予測点と、台形修正子(始点と予測終点の傾きの平均)・修正点を比較しています。

数値解 vs 厳密解 y(t)
最大誤差 vs 刻み幅 h
理論・主要公式

$$\tilde y_{n+1}=y_n+h\,f(t_n,y_n)\quad(\text{予測子})$$

予測子は前進オイラー法。始点 t_n の傾きだけで1ステップ進み、終点の暫定値 ỹ を得る。f は右辺、h は刻み幅。

$$y_{n+1}=y_n+\frac{h}{2}\big[f(t_n,y_n)+f(t_{n+1},\tilde y_{n+1})\big]\quad(\text{修正子})$$

修正子は台形公式。始点と予測終点の傾きを平均してステップを進める。これがホイン法の本体。

$$\text{局所誤差}=O(h^{3}),\qquad \text{大域誤差}=O(h^{2})$$

ホイン法は2段2次のルンゲ・クッタ法(RK2)であり、大域誤差は O(h²)。h を半分にすると誤差は約1/4になる。

予測子修正子法とは

🙋
微分方程式をコンピュータで解くとき、まずオイラー法を習いました。でも「予測子修正子法」って名前、なんだか手順が2段階ありそうですね。何をしているんですか?
🎓
ざっくり言うと、その名のとおり「予測して、修正する」の2ステップなんだ。まず雑でいいから次の点をざっくり当てる(予測子)。その当たりを使って、もっと正確な公式で計算し直す(修正子)。ホイン法はその代表選手で、予測にオイラー法、修正に台形公式を使う。たった2段階だけど、これで精度がオイラー法より1段階上がるんだよ。
🙋
オイラー法は「今いる点の傾きで真っ直ぐ進む」でしたよね。それの何が物足りないんですか?
🎓
いいところを突くね。問題は、傾きが区間の途中で変わってしまうこと。例えば y'=-2y のように解がカーブして減衰する場合、始点の傾きだけで真っ直ぐ進むと、ステップの終わりではいつも実際よりズレた場所に着く。減衰なら毎回ちょっと下に行きすぎる、という具合に系統的に外れるんだ。だから刻み幅 h を小さくしないと誤差が減ってくれない。
🙋
なるほど。じゃあ台形公式を使うと、その「途中で傾きが変わる」問題が直るんですか?
🎓
そう、まさにそこ。台形公式は始点の傾きと終点の傾き、その2つを平均して進む。区間の入口と出口の両方を見るから、途中の傾き変化を1次まで補正できる。でも困ったことに、終点の傾きを知るには終点の値が要る——それがまだ分からない。そこで「予測子」の出番だ。まずオイラー法でざっくり終点を予測して、その予測値で終点の傾きを計算する。予測→修正、これがホイン法の全体像だよ。
🙋
関数 f を計算する回数が1ステップで2回になりますよね。手間が増えた分、本当に得をしているんですか?
🎓
それが、しっかり得をするんだ。オイラー法は1次精度で、誤差は h に比例する。ホイン法は2次精度で、誤差は h² に比例する。だから h を半分にすると、オイラー法は誤差が半分、ホイン法は1/4になる。上の「最大誤差 vs 刻み幅」グラフを見ると、ホイン法の線のほうが急に下がっているのが分かるはずだ。手間は2倍でも、同じ精度をずっと大きな h で出せるから、トータルの計算量はむしろ減ることが多いよ。
🙋
予測子修正子法って、いろんな種類があるんですか?ホイン法以外も気になります。
🎓
あるよ。ホイン法は予測も修正も「今のステップの情報だけ」で完結する単段法だけど、実務で大きな計算をするときは、過去の数ステップ分の傾きをためて使う「アダムス・バッシュフォース/アダムス・モルトン」の組み合わせがよく使われる。予測子に明示型のアダムス・バッシュフォース、修正子に陰型のアダムス・モルトンを当てる、という形だね。考え方はホイン法と同じ「予測してから修正」。だからホイン法を理解しておくと、その先の高次の予測子修正子法もすっと入ってくるんだ。

よくある質問

予測子修正子法は、まず簡単な公式で次のステップの値を「予測」し、その予測値を使って精度の高い公式で「修正」する2段階の数値積分法です。ホイン法はその代表例で、予測子に前進オイラー法 ỹ = y + h·f(t,y) を使い、修正子に台形公式 y_new = y + (h/2)·[f(t,y) + f(t+h, ỹ)] を使います。区間の始点と予測終点の傾きを平均することで、オイラー法の1次精度を2次精度(大域誤差 O(h²))に引き上げます。
前進オイラー法は1次精度で、大域誤差は O(h) です。ホイン法は2次精度で大域誤差は O(h²) のため、刻み幅 h を半分にすると誤差はオイラー法で約1/2、ホイン法で約1/4に減ります。例えば y'=-2y を h=0.2 で解くと、ホイン法の最大誤差はオイラー法の数十分の一になります。1ステップあたり関数 f の評価が2回必要になりますが、同じ精度をより大きな h で達成できるため、総計算量はむしろ少なくなることが多いです。
前進オイラー法は区間の始点 t_n の傾き f(t_n,y_n) だけで1ステップ進むため、傾きが変化する区間では系統的にずれます。台形公式は始点の傾き f(t_n,y_n) と終点の傾き f(t_{n+1},ỹ) の平均を使うので、区間内の傾き変化を1次まで補正できます。終点の値が未知なので、まず予測子(オイラー法)で ỹ を推定し、それを終点傾きの計算に代入するのがホイン法の要点です。これは台形公式を1回反復した形と見ることもできます。
はい、ホイン法は明示的な2段2次ルンゲ・クッタ法(RK2)の一種です。RK2には係数の取り方で複数の変種があり、ホイン法は始点と予測終点の傾きを等しい重み 1/2 で平均する「台形型RK2」に相当します。中点法(区間中央の傾きを使うRK2)も同じ2次精度ですが、傾きを評価する点が異なります。どちらも局所打ち切り誤差 O(h³)、大域誤差 O(h²) で、オイラー法(RK1)とRK4の中間的な手法です。

実世界での応用

制御系・ロボティクスのリアルタイムシミュレーション:ドローンや産業ロボットの運動方程式をマイコン上で時間積分するとき、オイラー法では精度が足りず、RK4では1ステップの計算が重すぎることがあります。ホイン法は関数評価2回で2次精度が得られるため、限られた計算資源で「そこそこ正確・そこそこ軽い」のバランスを取りたいリアルタイム制御に適しています。予測ステップを使うモデル予測制御(MPC)でも、内部の積分器としてよく使われます。

分子動力学・粒子シミュレーション:多数の粒子の運動を解く分子動力学では、ホイン法と同じ「予測してから修正」の考え方を持つ速度ベルレ法や予測子修正子型の積分器が標準的です。位置をまず予測し、新しい力(傾き)で速度を修正する流れは、本ツールのホイン法とまったく同じ構造です。エネルギー保存性を保ちつつ大きな時間刻みを取るために、予測子修正子の枠組みが重宝されます。

回路シミュレーション・過渡解析:SPICE系の回路シミュレータは、台形法(ホイン法の修正子と同じ公式)を陰的に解くのが定番ですが、初期推定としてオイラー法による予測値を使うことで反復回数を減らせます。予測子修正子法は、陰的解法のニュートン反復の良い初期値を供給する役割も果たします。

数値解析の教育とアルゴリズム検証:ホイン法は「オイラー法から一歩進んだ最初の高次法」として、数値解析の講義で必ず登場します。本ツールのように刻み幅 h を変えて誤差が h² で減ることを実際に観察すると、「収束次数」という抽象的な概念が体感できます。新しい積分ソルバを実装したとき、既知の解と比較して傾き2の収束線が出るかを確認する検証手法は、実務でも広く使われています。

よくある誤解と注意点

まず最大の誤解が、「2次精度だから刻み幅 h はいくらでも大きくしてよい」という思い込みです。精度の次数が高いことと、安定であることは別の話です。ホイン法にも有限の絶対安定領域があり、減衰の速い(剛性の強い)問題で h を大きくしすぎると、2次精度であっても数値解が振動・発散します。実際、本ツールで y'=-2y を h=1.0 まで上げると、誤差が急に大きくなるのが分かります。h は「精度の要求」と「安定領域に収まること」の両方から決める必要があります。

次に、「修正子を何回も繰り返せば、もっと精度が上がる」という誤解です。ホイン法は予測1回・修正1回で完結する「PEC(予測・評価・修正)」型です。修正子を収束するまで反復しても、得られるのは台形法そのものの解であって、精度の次数は2次のまま上がりません。反復は安定性をいくらか改善することはありますが、関数評価の回数が増えるだけで次数は変わらない、という点を誤解しないでください。精度を3次・4次に上げたいなら、反復ではなくRK3・RK4のような別の手法に切り替えます。

最後に、「予測子は適当でよいから、予測の精度は気にしなくてよい」という考え方も要注意です。確かにホイン法全体としては予測子がオイラー法(1次)でも最終的に2次精度になりますが、それは予測子・修正子の次数がうまく噛み合っているからです。高次の予測子修正子法(アダムス系など)では、予測子と修正子の次数を揃えないと、せっかくの修正子の次数が活かせません。予測子修正子法を自分で組むときは、両者の次数の整合を必ず確認してください。

使い方ガイド

  1. 刻み幅hを0.001~0.1の範囲で設定し、ホイン法による積分精度を調査します
  2. 初期値y0を-5~5の範囲から選択し、常微分方程式dy/dt=f(t,y)の初期条件を決めます
  3. 積分終了時刻tEndを0.1~10の範囲で指定し、予測子修正子法とオイラー法を同時に計算します
  4. シミュレーション実行後、最終値・最大誤差・誤差改善率を確認し、手法の収束特性を可視化します

具体的な計算例

微分方程式dy/dt=-2y+t、初期値y0=1.0、刻み幅h=0.01、終了時刻tEnd=2.0の場合:ホイン法では予測ステップでy*=yn+h×f(tn,yn)を計算し、修正ステップでyn+1=(yn+y*)/2+h×f(tn+h,y*)/2により誤差を削減します。結果として予測子修正子法はy(2.0)≈0.0536、オイラー法はy(2.0)≈0.0421、厳密解y(2.0)≈0.0541となり、最大誤差はホイン法で0.00049、オイラー法で0.012となるため、誤差改善率は約96%に達します。

実務での注意点

  1. ホイン法は2次精度であるため、刻み幅を半減させると局所誤差は1/4に低下します。精密機械設計の動特性解析ではh≤0.001を推奨します
  2. 化学反応速度式dy/dt=k×exp(-E/RT)×y など指数関数を含む硬い方程式では、ホイン法でも刻み幅を0.0001以下に設定しないと誤差が蓄積することがあります
  3. 構造振動解析で減衰係数ζ>0.8の過減衰系を扱う場合、刻み幅を時定数の1/100以下にすることで安定性を確保できます
  4. シミュレーション結果と実測値の乖離が5%を超える場合は、モデルの非線形項やパラメータ同定を再検討してください