我试图画出微分方程dy/dx = x + y/5的欧拉近似和解析解,其中y(0)= -3
import math
import matplotlib.pyplot as plt
def euler_method(step_size):
first_x = 0
last_x = 5
h = step_size
n = int((last_x-first_x) / h)
x=0
y=-3
dy = lambda x,y: x + (y/5)
f = lambda x,y: math.exp(x+(y/5))
x_values = []
euler_values= []
analytical_values = []
for i in range(1, n+1):
x_values.append(x)
euler_values.append(y)
analytical_values.append(f(x,y))
y = y + dy(x, y) * h
x = x + h
x_values.append(x); euler_values.append(y); analytical_values.append(f(x,y))
plt.plot(x_values, euler_values, 'ro', x_values, analytical_values)
plt.legend(['Euler values','Analytical values'])
plt.show()
euler_method(1)
我的输出如下:
这显然是不正确的,但我不知道为什么会发生这种情况,也不知道我必须做出什么改变来解决这个问题。
1条答案
按热度按时间gudnpqoy1#
Wolfram Alpha为您的问题提供this analytical solution。您的问题在我看来不正确。与Stephen Wolfram的观点不一致。
我更正了你的代码。现在可以正常工作了:
下面是它生成的图: