5章:VBAによるN元の連立微分方程式プログラムリスト

  1. N元の連立微分方程式プログラムリスト
     3章のN元の連立微分方程式の解の求め方をVBAで書くと以下のようになります。

    'グローバル変数の定義
    Dim n As Integer '連立数
    Dim Nc As Integer '計算回数
    Dim t As Double '時間
    Dim h As Double '時間刻み幅
    Dim Y(11) As Double '変数
    Dim f(11) As Double '変数
    Dim Ka(11), Kb(11), Kc(11), Kd(11) As Double 'K値

    Sub Main()
     n = Sheets("Sheet1").Cells(5, 2).Value
     h = Sheets("Sheet1").Cells(6, 2).Value
     Nc = Sheets("Sheet1").Cells(7, 2).Value

     t = Sheets("Sheet1").Cells(23, 2).Value '初期値tを読み込み
     Sheets("Sheet1").Cells(10, 6).Value = t '初期値tを設定

     For i = 1 To n Step 1
      Y(i) = Sheets("Sheet1").Cells(23, 2 + i).Value '変数Y(i)の初期値を読み込み
      Sheets("Sheet1").Cells(10 + i, 6).Value = Y(i) '変数Y(i)の初期値を設定
     Next i

     For j = 0 To Nc Step 1
      For i = 1 To n Step 1
       f(i) = Sheets("Sheet1").Cells(9 + i, 2).Value '関数f(i)の値を読込
       Ka(i) = h * f(i)
      Next i

      Sheets("Sheet1").Cells(10, 6).Value = t + h / 2 '時間tを設定
      For i = 1 To n Step 1
       Sheets("Sheet1").Cells(10 + i, 6).Value = Y(i) + Ka(i) / 2 '変数Y(i)の値を設定
      Next i
      For i = 1 To n Step 1
       f(i) = Sheets("Sheet1").Cells(9 + i, 2).Value '関数f(i)の値を読込
       Kb(i) = h * f(i)
      Next i

      Sheets("Sheet1").Cells(10, 6).Value = t + h / 2 '時間tを設定
      For i = 1 To n Step 1
       Sheets("Sheet1").Cells(10 + i, 6).Value = Y(i) + Kb(i) / 2 '変数Y(i)の値を設定
      Next i
      For i = 1 To n Step 1
       f(i) = Sheets("Sheet1").Cells(9 + i, 2).Value '関数f(i)の値を読込
       Kc(i) = h * f(i)
      Next i

      Sheets("Sheet1").Cells(10, 6).Value = t + h '時間tを設定
      For i = 1 To n Step 1
       Sheets("Sheet1").Cells(10 + i, 6).Value = Y(i) + Kc(i) '変数Y(i)の値を設定
      Next i
      For i = 1 To n Step 1
       f(i) = Sheets("Sheet1").Cells(9 + i, 2).Value '関数f(i)の値を読込
       Kd(i) = h * f(i)
      Next i

      t = t + h '次の時間tを計算
      Sheets("Sheet1").Cells(24 + j, 1).Value = j '計算Noを出力
      Sheets("Sheet1").Cells(24 + j, 2).Value = t '時間tを出力
      For i = 1 To n Step 1
       Y(i) = Y(i) + (Ka(i) + 2 * Kb(i) + 2 * Kc(i) + Kd(i)) / 6 '次のY(i)の値を計算
       Sheets("Sheet1").Cells(24 + j, 2 + i).Value = Y(i) 'Y(i)の値を出力
      Next i
     Next j
    End Sub

  2. プログラムリスト解説
    1. ワークシート("Sheet1")の初期値セルから初期値を読み出します。
    2. ワークシート("Sheet1")の変数セルに値を設定します。
    3. ワークシート("Sheet1")の関数セルに計算結果を読み出します。
    4. プログラム中には、関数が設定されておらず、ワークシート("Sheet1")の関数セルに 設定します。
    5. 本プログラムでは、プログラムを変更することなく関数を変更できます。
    6. 本プログラムは10元以内のあらゆる線形微分方程式に適用できます。



6章:N元の連立微分方程式フリーソフトに行く。

トップページに戻る。