使用matplotlib在python中绘图?

时间:2016-07-16 14:56:33

标签: python matplotlib

我一直在尝试使用四阶Runge-Kutta method来模拟一阶微分方程,但我在绘制它时遇到了问题。

#simulation of ode using 4th order rk method  dy/dx=-2y+1.3e^-x,y(0)=5,h=0.01 from sympy import*
import math
import numpy as np
import matplotlib.pyplot as plt
h=0.01;
ti=0;
x=0;
n=0;
y=5;
def f(x,y):
    return 1.3*math.exp(-x)-2*y


while x < 10:

    k1=f(x,5);
    k2=f(x+h/2,y+(h/2)* k1);
    k3=f(x+h/2,y+(h/2)* k2);
    k4=f(x+h,y+h*k3);
    y=y+h/6*(k1+2*(k2+k3)+k4);
    x=x+h;
    plt.plot(x,y);

我知道问题是因为每次循环运行时更新x,y值,但是有人可以解释如何绘制(x,y)的所有值吗?

2 个答案:

答案 0 :(得分:2)

根据评论中的建议,您可以创建两个列表来存储xy值,并在while循环后绘制它:

import math
import numpy as np
import matplotlib.pyplot as plt
h=0.01;
ti=0;
x=0;
n=0;
y=5;
def f(x,y):
    return 1.3*math.exp(-x)-2*y

xs = [x]       # <<<
ys = [y]       # <<<
while x < 10:

    k1=f(x,5);
    k2=f(x+h/2,y+(h/2)* k1);
    k3=f(x+h/2,y+(h/2)* k2);
    k4=f(x+h,y+h*k3);
    y=y+h/6*(k1+2*(k2+k3)+k4);
    x=x+h;
    xs.append(x)    # <<<
    ys.append(y)    # <<<

plt.plot(xs,ys);

enter image description here

答案 1 :(得分:0)

错误结果的另一个来源是RK4循环中的第一行。而不是

    k1=f(x,5);

使用

    k1=f(x,y);

因为y的值不会保持在初始值不变。