
関数(sinとかcosとか)それ自身は、Excelの関数に、必要に応じ四則演算や合成を用いて定義されているものとします。
この関数を、一階微分しようとした場合、たとえば
dt=0.00001
fplus=f(t+dt)
ft=f(t)
dfdt=(fplus-ft)/dt
のように計算すれば、そこそこの精度で計算結果がえられ、爆発のような不審な挙動は
なさそうな感じです。
一方、二階微分は数式で書くと
f''(t)=(f'(t+dt)-f'(t))/(dt)
で、
f'(t)=(f(t+dt)-f(t))/dt
f'(t+dt)=(f((t+dt)+dt)-f(t+dt))/dt
なので、結局
f''(t)=(f(t+2*dt)-f(t))/(dt*dt)
で計算できそうな気がするのですが、こうすると、
(dt*dt)の影響が大きくなりすぎて、計算結果が爆発的に大きくなってしまいます。
恐らく無限小の次数のようなものの影響なのではないかと思うのですが…。
対処方法を教えてください。よろしくお願いします。
■関連質疑
http://oshiete.goo.ne.jp/qa/1903228.html
No.1ベストアンサー
- 回答日時:
>f'(t)=(f(t+dt)-f(t))/dt
>f'(t+dt)=(f((t+dt)+dt)-f(t+dt))/dt
>なので、結局
>f''(t)=(f(t+2*dt)-f(t))/(dt*dt)
はおかしいです。
f''(t)= (f'(t+dt) - f'(t)) / (dt) = (f(t+2*dt) + f(t) - 2*f(t+dt))/(dt*dt)
が正しい。
この回答への補足
中心差分、前進差分、後退差分を含むExcelVBAのプログラムを作成しました。遅くなりもうしわけありません。
【Excelのワークシート上の設定】
ExcelのCellには、
B4セルにtの値が、
C4には関数が、例えば=sin(B4)のように入力されているものとします。
D4セルには、dtの値が、例えば0.00001のように入力されているものとする。
【表示結果】
下記マクロを実行すると、
E4セルに中心差分による一階微分の値が表示されます。
F4セルに中心差分による二階微分の値が表示されます。
G4セルに前進差分による一階微分の値が表示されます。
H4セルに前進差分による一階微分の値が表示されます。
I4セルに前進差分による一階微分の値が表示されます。
J4セルに前進差分による一階微分の値が表示されます。
【ソースコード】
Sub 二階微分()
t = Cells(4, 2)
dt = Cells(4, 4)
ft = Cells(4, 3)
'============一階微分============
Cells(4, 2) = t + dt
Lft = Cells(4, 3)
Cells(4, 2) = t - dt
Bft = Cells(4, 3)
dCft = (Lft - Bft) / (2 * dt)
dLft = (Lft - ft) / dt
dBft = (Lft - ft) / dt
Cells(i + 10, 4) = dft
Cells(i + 10, 7) = dgt
'============二階微分============
Cells(4, 2) = t + 2 * dt
LLft = Cells(4, 3)
Cells(4, 2) = t - 2 * dt
BBft = Cells(4, 3)
ddCft = (Lft - 2 * ft + Bft) / (dt ^ 2)
ddLft = (LLft - 2 * Lft + ft) / (dt ^ 2)
ddBft = (ft - 2 * Bft + BBft) / (dt ^ 2)
'============表示============
Cells(4, 5) = dCft
Cells(4, 6) = ddCft
Cells(4, 7) = dLft
Cells(4, 8) = ddLft
Cells(4, 9) = dBft
Cells(4, 10) = ddBft
End Sub
回答ありがとうございました。
おっしゃる通りです。大変恥ずかしいミスをしていました。
このまま、このスレを閉じてしまうと、単なるスレ汚しになってしまうので、
後で「補足」のところで、サンプルプログラム(VBA)と、簡単な考察を書きます。
のちに二階微分を計算しなきゃいけなくなった人のため…。
No.2
- 回答日時:
きちんと紙の上で計算すれば #1 の通り.
実際には中心差分
f''(t) = [f(t+dt) - 2f(t) + f(t-dt)]/dt^2
で計算する方がちょっとだけうれしい.
この回答への補足
下に、中心差分、後退差分も含んだソースコードを書きました。
遅くなりもうしわけありません。
後の人のために、参考にしたものを、以下に補足的に記載します。
■参考にしたWeb上の記事
http://ja.wikipedia.org/wiki/%E5%B7%AE%E5%88%86% …
http://d.hatena.ne.jp/nowokay/20080516/1210944893
http://d.hatena.ne.jp/nowokay/20080516/1210944893
http://okwave.jp/qa/q5935311.html
http://okwave.jp/qa/q4942769.html
http://workingout.jugem.jp/?cid=4
回答ありがとうございました。
大変恥ずかしいミスをしていました。後に、「補足入力」にて、
ExcelVBAのサンプルプログラム(中心差分版)を作成し、
後の人のためになるかならないかということで、公開します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
積分で1/x^2 はどうなるのでし...
-
∫1/(x^2+1)^2 の不定積分がわ...
-
e^-2xの積分
-
積分 Xの-2乗を積分するとどう...
-
1/X^2の積分ってlogX^2ですか?
-
∫1/√x dx 積分せよ 教えて下さい
-
微積分 dの意味
-
2次微分の変数変換
-
exp(-ax^2)*cosx の証明
-
項の右端につく縦棒の意味を教...
-
写真の赤丸のようになぜ、(d²y/...
-
【数学Ⅱ・Ⅲ】微分の問題
-
∫e^cos(x) dx の計算
-
(1+sinx)/sin2xの積分
-
y=f(x)と y′=f′(x)と dy/dxと d...
-
台形の任意の高さにおける上辺...
-
∮(1/(sinx)^3) dx 教えてください
-
媒介変数(t)の2回微分について...
-
フーリエ級数の問題で、f(x)は...
-
x=t これを両辺微分してください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
積分で1/x^2 はどうなるのでし...
-
e^-2xの積分
-
積分 Xの-2乗を積分するとどう...
-
∫1/(x^2+1)^2 の不定積分がわ...
-
∫1/√x dx 積分せよ 教えて下さい
-
項の右端につく縦棒の意味を教...
-
∫e^cos(x) dx の計算
-
【数学Ⅱ・Ⅲ】微分の問題
-
微積分 dの意味
-
1/X^2の積分ってlogX^2ですか?
-
2次微分の変数変換
-
フーリエ級数の問題で、f(x)は...
-
y=f(x)と y′=f′(x)と dy/dxと d...
-
x/(a^2+x^2)の積分について
-
dx^2を無視するのはなぜ?
-
∮(1/(sinx)^3) dx 教えてください
-
フーリエ変換の問題について
-
x−1分の2の微分の仕方を教えて...
-
写真の赤丸のようになぜ、(d²y/...
-
dy/dxについて
おすすめ情報