簡體   English   中英

使用matplotlib在Python中繪圖?

[英]Plotting in python using matplotlib?

我一直在嘗試使用四階Runge-Kutta方法模擬一階微分方程,但是在繪制時遇到了問題。

#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)的所有值嗎?

如注釋中所建議,您可以創建兩個列表來存儲xy值,並在while循環后對其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);

在此處輸入圖片說明

錯誤結果的另一個來源是RK4循環的第一行。 代替

    k1=f(x,5);

采用

    k1=f(x,y);

因為y的值不會保持恆定在初始值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM