ルンゲクッタ法を用いて微分方程式を解きたいのですが、ループ文がうまくつくれません。
具体的には関数RKで出た値'u0'をfor文で複数回繰り返す際に、値を更新していって欲しいのですが、コードを書くことが出来ずに同じ計算結果がリストに溜まってしまいます。
どのようなコードを書けばよいでしょうか?
初歩的なテクニックかもしれませんが、うまく書けません。
よろしくお願いいたします。
python
1#各モジュールをインポート 2import numpy as np 3import matplotlib.pyplot as plt 4%matplotlib inline 5 6#時間経過を定義 7dt_1=0.0001 8 9#時間の初期値を入力 10t0=0 11 12#時間の最大値 13t_max=10 14#試行回数 15trials_1=np.arange(t0,t_max,dt_1) 16 17#関数の値を入れるオブジェクトを生成 18a_points_1=[] 19 20#関数を定義 21def u(t,x,x1): 22 return -4*x 23#x'の式 24def y(t,x,x1): 25 return x1 26 27#runge-kuttaをtrials回実行 28#結果をa_pointsに入れる 29def rp(): 30 t,y0,u0=0,1,0 31 for t in trials_1: 32 x1=RK(y0,u0,dt_1) 33 a_points_1.append(x1) 34 print(a_points_1[:3]) 35 36#runge-kuttaの実行式 37#k:y, l:u 38def RK(y0,u0,dt): 39 40 k1=y0*dt 41 l1=u0*dt 42 43 k2=(u0+l1*0.5)*dt 44 l2=-4*(y0+k1*0.5)*dt 45 46 k3=(u0+l2*0.5)*dt 47 l3=-4*(y0+k2*0.5)*dt 48 49 k4=(u0+l3)*dt 50 l4=-4*(y0+k3)*dt 51 52 k=(k1+2*k2+2*k3+k4)/6 53 l=(l1+2*l2+2*l3+l4)/6 54 55 y0=y0+k 56 u0=u0+l 57 58 return u0 59#このu0の値をfor文で繰り返す際に更新していきたい 60#現状では初期値のu0=0が常に代入されて、同じ計算結果が返ってくる 61 62#プログラムを実行 63rp()
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/21 12:12
2018/02/21 12:37
2018/02/22 07:43