« Numerical Recipes in Cの三重対角行列の方程式を解く関数をExcel VBAに移植 | トップページ | SMAPのソフトバンク プラチナバンドスタートのCMを見た。民放各局放映はチキンラーメンのCM以来かな? »

2012年7月25日 (水)

1次元拡散方程式(陰解法)をExcel VBAで計算。

さて、昨日Numerical Recipesの三重対角行列を計算するルーチンを作ったのは、この計算をするため。

∂u(t,x) /∂t = D ∂2u(t,x) / ∂x2

を陰的に差分化すると、

uik+1 = uik + s * (ui-1k+1 +ui+1k+1 -2*uik+1 )

となる。なので三重対角行列が計算できればこれも計算できる。

こんなルーチンでどうでしょう。

Option Explicit

Private Sub CommandButton1_Click()
    Dim n As Long
    Dim a() As Double, b() As Double, c() As Double
    Dim r() As Double, u() As Double
    Dim i As Integer, k As Integer
    Dim s As Double
   
    Application.ScreenUpdating = False
    s = 1#
    n = 128
    ReDim a(n), b(n), c(n), r(n), u(n)
   
    For i = 1 To n
        b(i) = 1# + 2# * s
        a(i) = -s#
        c(i) = -s#
    Next i
   
    c(1) = -2# * s
    a(n) = -2# * s
   
    For i = 1 To n
        If i > 0.5 * n - 5 And i < 0.5 * n + 5 Then
            r(i) = 1#
        Else
            r(i) = 0#
        End If
        Worksheets("Sheet1").Cells(i + 1, 2) = r(i)

    Next i
   
    For k = 1 To 500

        Call tridag(a, b, c, r, u, n)
        For i = 1 To n
            r(i) = u(i)
            Worksheets("Sheet1").Cells(i + 1, k + 2) = r(i)
        Next i
   Next k
   Application.ScreenUpdating = True
End Sub

で計算した結果がこちら。s=1でも計算出来てるようだ。

1ddiffusion

で、まだこれで終わりじゃなくてまだまだ続きが、、、

« Numerical Recipes in Cの三重対角行列の方程式を解く関数をExcel VBAに移植 | トップページ | SMAPのソフトバンク プラチナバンドスタートのCMを見た。民放各局放映はチキンラーメンのCM以来かな? »

学問・資格」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/512682/55265719

この記事へのトラックバック一覧です: 1次元拡散方程式(陰解法)をExcel VBAで計算。:

« Numerical Recipes in Cの三重対角行列の方程式を解く関数をExcel VBAに移植 | トップページ | SMAPのソフトバンク プラチナバンドスタートのCMを見た。民放各局放映はチキンラーメンのCM以来かな? »

2018年8月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト
無料ブログはココログ