求解和绘制具有相关参数的 ODE
Solving and plotting ODE with dependent parameters
我正在编写一些代码,其中我有以下方程组 here。问题是我非常想解决多个 k 值,以及为每个 k 值绘制相位 plane/quiver 图。有人可以帮帮我吗?这是我到目前为止对求解器的了解:
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()
获得
我正在编写一些代码,其中我有以下方程组 here。问题是我非常想解决多个 k 值,以及为每个 k 值绘制相位 plane/quiver 图。有人可以帮帮我吗?这是我到目前为止对求解器的了解:
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()
获得