在python中使用matplotlib打印?

2024-10-17 10:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直试图用四阶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)的所有值吗?你知道吗


Tags: importas绘制pltk2k1mathmethod
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

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

    k1=f(x,5);

使用

    k1=f(x,y);

因为y的值不会在初始值保持不变。你知道吗

相关问题 更多 >