こんにちは私はRunge Kuttaメソッドを使用してODEを解決しプロットするスクリプトに取り組んでいます。私はスクリプトが異なる機能を使用するようにしたいので、後でそれを拡張することができます。関数定義を書いてもうまく動作しますが、def()を使うとプロットウィンドウを開くことも、結果を出力することもありません。あなたより!Runge Kutta Not Plotを計算する関数
from numpy import *
import matplotlib.pyplot as plt
#H=p^2/2-cosq
#p=dp=-dH/dq
#q=dq=dH/dp
t = 0
h = 0.5
pfa = [] #Create arrays that will hold pf,qf values
qfa = []
while t < 10:
q = 1*t
p = -sin(q*t)
p1 = p
q1 = q
p2 = p + h/2*q1
q2 = q + h/2*p1
p3 = p+ h/2*q2
q3 = q+ h/2*p2
p4 = p+ h/2*q3
q4 = q+ h/2*p4
pf = (p +(h/6.0)*(p1+2*p2+3*p3+p4))
qf = (q +(h/6.0)*(q1+2*q2+3*q3+q4))
pfa.append(pf) #append arrays
qfa.append(qf)
t += h #increase time step
print("test")
plt.plot(pfa,qfa)
print("test1")
plt.show()
print("tes2t")
はあなたが呼び出しされていない 'rk'、しかし、あなたが行う場合でも、あなたの例は以下となります。FN引数をハードコーディングを避けるために(あなたの本当のコードでは、いくつかのエラー処理予期しないコマンドライン入力のために持っている必要があります)単一点を計算すると、グラフは表示されますが空白になります。 – talonmies
@talonmies私はそれをプロットする方法を説明できますか? – Surfcast23
'plot()'に線を描画するように要求していますが、1点しか供給しません。あなたが 'plot([p、pf]、[q、qf])'のようなことをしたなら、2点を試してみるでしょう。それでも、整数計算と 'h/6 = 0'を実行しているので' p 'と' pf'と 'q'と' qf'は 'h <6'なら等しいでしょうから、まだプロットしていません。 6未満のすべての正のhに対して。また、これが本当に4段階明示ルンゲクッタ法であると想定される場合、式が正しくないように見えます。 – talonmies