python
1import numpy as np 2import matplotlib.pyplot as plt 3 4def f(x,t): 5 return x*(5-x) 6 7a = 0.0 8b = 2.0 9N = 200 10h = (b-a)/N 11i = 0 12 13t = np.arange(a,b,h) 14x_0 = 1 15 16x = np.empty(N) 17x[0] = x_0 18 19while i < N: 20 print(f'{i=}\t{x[:3]=}\t{t[:3]=}\n') 21 k_1 = h * f(x[i],t[i]) 22 k_2 = h * f(x[i] + k_1 /2 , t[i] + h/2 ) 23 k_3 = h * f(x[i] + k_2 /2 , t[i] + h/2 ) 24 k_4 = h * f(x[i] + k_3 , t[i] + h ) 25 x[i+1] = x[i] + 1/6 * (k_1 + 2*k_2 + 2*k_3 + k_4 ) 26 27 28 if i == N: 29 break 30 31 i += 1 32 33plt.plot (t, x) 34plt.xlabel("t") 35plt.ylabel("x(t)") 36plt.show() 37 38```というルンゲクッタ法を用いたコードなのですが、実行すると、 39```python 40i=0 x[:3]=array([1.00000000e+000, 6.40563783e-312, 6.40566675e-312]) t[:3]=array([0. , 0.01, 0.02]) 41 42i=1 x[:3]=array([1.00000000e+000, 1.04060055e+000, 6.40566675e-312]) t[:3]=array([0. , 0.01, 0.02]) 43 44i=2 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 45 46i=3 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 47 48i=4 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 49 50i=5 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 51 52i=6 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 53 54i=7 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 55 56i=8 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 57 58i=9 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 59 60i=10 x[:3]=array([1. , 1.04060055, 1.08240344]) t[:3]=array([0. , 0.01, 0.02]) 61 62 63```以上のように、i、x、tすべて1から順番に結果が出ます。 64こうではなく、例えばi=2の場合にそれに対応したx=1.08240..とt=0.02のように、それぞれの値の場合の結果を表示したい場合はprintのコードをどう修正すればよろしいでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/14 06:21