Python 求解和绘制具有相关参数的常微分方程

Python 求解和绘制具有相关参数的常微分方程,python,matplotlib,scipy,ode,scientific-computing,Python,Matplotlib,Scipy,Ode,Scientific Computing,我正在编写一段代码,其中有以下方程组。问题是,我非常想解决多个k值的问题,并为每个k值绘制一个相平面/箭图。有人能帮我吗?这是迄今为止我为解算器所做的: import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint def model(X, t): x = X[0] y = X[1] dxdt = k*x - y dydt = x + y ret

我正在编写一段代码,其中有以下方程组。问题是,我非常想解决多个k值的问题,并为每个k值绘制一个相平面/箭图。有人能帮我吗?这是迄今为止我为解算器所做的:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

def model(X, t):
    x = X[0]
    y = X[1]
    dxdt = k*x - y
    dydt = x + y
    return [dxdt, dydt]
#Initial state 
X0 = [1,1]

#Time
t = np.linspace(0,10)

X = odeint(model, X0, t)
这就是我到目前为止所策划的:

x = X[:,0]
y = X[:,1]

plt.plot(x,y)

请注意,我并不是简单地解决这个系统!我试图用多个值改变(k)并绘制出结果方程来解决这个问题

必须迭代k,并将该值作为附加参数传递:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

def model(X, t, k):
    x = X[0]
    y = X[1]
    dxdt = k*x - y
    dydt = x + y
    return [dxdt, dydt]
#Initial state 
X0 = [1,1]

#Time
t = np.linspace(0,10)
Ks = np.linspace(-1, 1, 10)

for kix in Ks:
    X = odeint(model, X0, t, args=(kix,))
    x = X[:,0]
    y = X[:,1]
    plt.plot(x,y)
plt.show()

通过更多的计算,您可以使用

xvalues, yvalues = np.meshgrid(np.arange(-2, 2, 0.02), np.arange(-2, 2, 0.02))
Ks = np.linspace(-1, 1, 12)

plt.subplots_adjust(hspace=0.4,wspace=0.4)
for j,kix in enumerate(Ks):
    xdot, ydot = model([xvalues,yvalues],0 , kix)
    plt.subplot(3,4,j+1)
    plt.streamplot(xvalues, yvalues, xdot, ydot, density=0.5)
    plt.title("k=%.2f"%kix)

plt.show()
得到


迭代k并将绘图添加到现有窗口中。我知道这是我应该做的,但我很难让它正常工作。我知道我需要将它添加到我的定义中
def model(X,t,k)
,但是我一直得到一个错误,k=(1,2,3,4),这很漂亮!我可以自己试试箭袋。谢谢你,伙计。