在 Python Matplotlib 中绘制一个变化值的多条曲线

Plot multiple curves of one changing value in Python Matplotlib

我正在编写欧拉方法,我想在“h”或步长更改其值时在一个图中绘制不同的曲线,而不为每个 h 创建新变量。有简单的方法吗?

这是我的代码,后面是我想要的图表示例。谢谢!

from math import exp
import numpy as np
from matplotlib import pyplot as plt

sol = lambda x: exp(x**2/2)

dy = lambda x,y: x*y #Ecuacion Dif

sol2 = np.vectorize(sol)

x = 0 #intervalo

xn = 2 #intervalo mayor

y = 1 #VALOR INICIAL

h = 0.5 #STEP SIZE

n = int((xn - x)/h)
print("x \t\t y(Euler)\t y (Analitica)")
print("{0} \t {1} \t {2}".format(x,y,sol(x)))

yg = [y]
xg = [x]
xr = np.arange(0,n*h,0.01)

for i in range(n):

    y += dy(x,y)*h

    yg.append(y)

    x += h

    xg.append(x)

    print("{0:.5f} \t {1:.5f} \t {2:.5f}".format(x,y,sol(x)))

plt.plot(xr,sol2(xr),color='k',label='Analitca')
plt.plot(xg,yg,color='b',label="h = 0.5")
plt.xlabel('x')
plt.ylabel('y')
plt.title('Metodo de Euler')
plt.legend()
plt.grid(True)
plt.savefig('Euler_Metodo.png')
plt.show()

Graph that I'd like

这是我在工作之后所做的。我希望有人觉得它有用!

from math import exp
import numpy as np
from matplotlib import pyplot as plt

sol = lambda x: exp(x**2/2)
dy = lambda x,y: x*y #Ecuacion Dif
sol2 = np.vectorize(sol)
x = 0 #intervalo
xn = 2 #intervalo mayor
y = 1 #VALOR INICIAL
h = [1,0.5,0.2,0.05,0.01] #dif values h
nlista = []

for valor in range(len(h)):
    x = 0
    nlista.append(int((xn - x)/h[valor]))
    print(nlista)

for j in range(len(h)):
    x = 0
    y = 1
    yg = [1]
    xg = [0]


    for i in range(nlista[j]):


        y += dy(x,y)*h[j]

        yg.append(y)

        x += h[j]

        xg.append(x)

        #print("{0:.5f} \t {1:.5f} \t {2:.5f}".format(x,y,sol(x)))


    plt.plot(xg,yg,label="h = {0}".format(h[j]))
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Metodo de Euler')


xr = np.arange(0,2,0.01)
plt.plot(xr,sol2(xr),color='k',label='Analitca')
plt.legend()
plt.grid(True)
plt.savefig('Euler_Metodo.png')
plt.show()

结果如下:

RESULTS