ダウンロード |
計算の精度は使い物になりませんが一番わかりやすい為、最初に見るのは良いと思います。
\( \frac{df}{dx}=3x^2 - 10 +5 \)
計算で求めるため実際のfはわからなくてもよいのですが、ここでは解析的に解ける式(というか、検証の為そんな関数にした)を選びました。
\( f=x^3 - 5x^2 + 5x +f_0 \)
離散的に解を求めると、
\( \frac{df}{dx}=\frac{f_{i+1}-f_{i}|}{h} \)
ここで、全部分かっているi番目の値を基準にしてi+1番目が求められるように、式の順番を入れ替えます。
\( f_{i+1}=f_i + h*\frac{df}{dx} \)
初期値付近ではほどほどの精度であるが、iが増えていくと誤差が大きくなる。
Option Explicit Public Const m = 100 Sub Euler() '変数の定義 ------------------------------------- Dim i%, j%, k%, n% Dim h#, x_ave# Dim f(m) As Double, t(m) As Double '初期値の設定 ---------------------------------- n = Cells(2, 3) 'データの数 h = Cells(3, 3) '刻み t(0) = Cells(5, 3) 'xの初期値 f(0) = Cells(6, 3) 'fの初期値 'xとfの計算 ------------------------------------ For i = 0 To n - 1 'VBAの配列は0から始まる! t(i + 1) = t(i) + h f(i + 1) = f(i) + h * dfdt(t(i), f(i)) Next i 'シート出力 ------------------------------------ For i = 0 To n - 1 Cells(i + 12, 2) = t(i) Cells(i + 12, 3) = f(i) Next i End Sub Function dfdt(t#, f#) As Double dfdt = f - 2 * Exp(-t) End Function Sub Initialize() Range("B12:C100") = "" End Sub |
0 件のコメント:
コメントを投稿