![](/img/trans.png)
[英]Error in computing differential equations using the forward euler method in python
[英]Finding a solution of a differential using the Euler method in python
我正在嘗試使用歐拉方法在某個點找到微分方程的解,但我得到了錯誤的答案。 請參閱下面的代碼:
#Intial conditions
x0, y0 = 0, 1
h = 0.1 #step size
x_end = 1.0 #the value of x for which we want to know y
##The ODE function
def f(x,y):
return 1/(1 + x*x)
x_arr = np.arange(x0, x_end + h, h)
y_arr = np.zeros(x_arr.shape)
y_arr[0] = y0
for i, x in enumerate(x_arr[:-1]):
y_arr[i+1] = y_arr[i] + h*f(x, y_arr[i])
print("x array", x_arr)
print("y array", y_arr)
Output:
x array [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
y array [1. 1.1 1.1990099 1.29516375 1.38690687 1.47311376
1.55311376 1.62664317 1.69375727 1.75473288 1.8099815 ]
根據 python 解決方案,在 x = 1.0 時 y = 1.8099815 但我應該在 x = 1.0 時得到 y = 1.85998149722679。
難道我做錯了什么? 我確信我正確地應用了歐拉方法。
不,您的結果對於步長是正確的。 您可以通過以下方式獲得縮短 10 步的結果
x = np.arange(0,1-1e-6,0.1);
print(0.1*len(x), 1+0.1*sum(1/(1+x*x)))
## >>> 1.0 1.8099814972267896
另一個值用於x=1.1
處的下一步
x = np.arange(0,1.1-1e-6,0.1);
print(0.1*len(x), 1+0.1*sum(1/(1+x*x)))
## >>> 1.1 1.8599814972267898
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.