- 締切済み
Excelで微分方程式を解く際のべき数表現を教えて下さい。
ヤフー知恵袋でも質問したのですが、良い回答がなかったのでこちらで再び質問させて頂きます。 Excelで微分方程式を解く際のべき数表現を教えて下さい。 「Excelで微分方程式を解く」 http://szksrv.isc.chubu.ac.jp/excel/dif/dif5.html こちらのページにある方法で微分方程式を解きたいのですが、例えば d^2x/dt^2=-0.8(dx/dt)^1.4 というように「1.4乗」などの非整数乗の計算を行うと、 「プロシージャの呼び出し、または引数が不正です」 という実行時エラーが起きてしまいます。 「^1.4」を「^3」などの整数に直すと正しく計算されるので、 やはり非整数乗の表現には別の方法が要るのではないかと考えています。 色々と試してみたのですが、どうしても計算できません。 どなたか正しい非整数乗の表現を教えてくれませんか。 大学の授業でどうしてもこのツールを使う必要があるので、かなり困っています。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
#2の補足 誤解を呼びやすい文面ですので、書いておきます。 「この作者は、ExcelVBA自体は、ほとんど初心者のようですから、聞いても分からないと思います。」 これは、ご質問者さんのことではありませんから、お間違えないようにしてください。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 たぶん、この作者は、ExcelVBA自体は、ほとんど初心者のようですから、聞いても分からないと思います。私自身、どういう原因は分からないのですが、C言語が関係しているような、エラーです。 一応、データ型の宣言はしておきます。なくても良いと思いますが、こちらとしては、それがないとみっともないので入れました。どう直したかは、コードを見れば分かると思いますが、負数を直接計算させないように、絶対値にして、それをSng関数で、符号を加えました。 '----------------------------------- Sub RungeKutta2r() Dim t#, x#, v#, h&, n&, i& Dim k1#, k2#, k3#, k4# Dim l1#, l2#, l3#, l4# 'tの初期値 t = 0 'xの初期値 x = 1 'vの初期値 v = 0 'tの1ステップの変化量 h = 1 '何回計算するか n = 50 Cells(3, 1).Value = "tの初期値" Cells(3, 2).Value = "xの初期値" Cells(3, 3).Value = "vの初期値" Cells(3, 4).Value = "Δt" Cells(3, 5).Value = "tの終了" Cells(4, 1).Value = t Cells(4, 2).Value = x Cells(4, 3).Value = v Cells(4, 4).Value = h Cells(4, 5).Value = t + h * n Cells(6, 2).Value = "t" Cells(6, 3).Value = "x" Cells(6, 4).Value = "v" For i = 0 To n Cells(i + 7, 2).Value = t Cells(i + 7, 3).Value = x Cells(i + 7, 4).Value = v k1 = h * Gr(t, x, v) l1 = h * Fr(t, x, v) k2 = h * Gr(t + h / 2, x + k1 / 2, v + l1 / 2) l2 = h * Fr(t + h / 2, x + k1 / 2, v + l1 / 2) k3 = h * Gr(t + h / 2, x + k2 / 2, v + l2 / 2) l3 = h * Fr(t + h / 2, x + k2 / 2, v + l2 / 2) k4 = h * Gr(t + h, x + k3, v + l3) l4 = h * Fr(t + h, x + k3, v + l3) t = t + h x = x + (k1 + 2 * (k2 + k3) + k4) / 6 v = v + (l1 + 2 * (l2 + l3) + l4) / 6 Next i ' End Sub Function Fr(t#, x#, v#) 'f=dv/dt Fr = -0.8 * Sgn(x) * Abs(x) ^ 1.4 End Function Function Gr(t#, x#, v#) 'g=dx/dt=v Gr = Sgn(v) * Abs(v) ^ 1.4 End Function
- n-jun
- ベストアンサー率33% (959/2873)
提示されているツールについてでしたら、記載されている連絡先に問い合わせるのが 良いかと思いますが。