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

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

我正在编码一种Euler方法,当“ 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,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?