Python 求解和绘制具有相关参数的常微分方程
我正在编写一段代码,其中有以下方程组。问题是,我非常想解决多个k值的问题,并为每个k值绘制一个相平面/箭图。有人能帮我吗?这是迄今为止我为解算器所做的: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
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),这很漂亮!我可以自己试试箭袋。谢谢你,伙计。