在python中使用欧拉方法寻找微分的解法

问题描述 投票:0回答:1

我想用欧拉法求某点微分方程的解,但得到的答案是错误的。请看我下面的代码。

#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)

输出:

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。

我是不是做错了什么?我确信我正确应用了欧拉法。

python python-3.x numerical-methods differential-equations
1个回答
0
投票

不,你的结果对于步长大小是正确的。你可以通过以下方法得到这个缩短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
© www.soinside.com 2019 - 2024. All rights reserved.