如何绘制使用scipy软件包中的solve_ivp在python中求解一组微分方程后获得的图形

如何绘制使用scipy软件包中的solve_ivp在python中求解一组微分方程后获得的图形,python,matplotlib,scipy,Python,Matplotlib,Scipy,我在python中使用solve_ivp来求解状态空间形式的一组微分方程。我的代码如下: import numpy as np import matplotlib.pyplot as plt from numpy import zeros from scipy.integrate import solve_ivp vin=12; vdon=.7; X=np.array([[0],[0],[0],[0]]) U= np.array([[vin],[vdon]]); A1=np.array([[(-

我在python中使用solve_ivp来求解状态空间形式的一组微分方程。我的代码如下:

import numpy as np
import matplotlib.pyplot as plt
from numpy import zeros
from scipy.integrate import solve_ivp
vin=12;
vdon=.7;
X=np.array([[0],[0],[0],[0]])
U= np.array([[vin],[vdon]]);
A1=np.array([[(-.01-10)/1e-5,-1/1e-5,10/1e-5,0] ,[1/1e-8,-1/(.05*1e-8),0,0],[10/1e-8,0,(-10-1)/1e-8,-1/1e-8],[0,0,1/1e-3,0]]);
B1=np.array([[1/1e-5,0],[0,1/(.05*1e-8)],[0,0],[0,0]]);
def conv(t,X):
    xdot= A1.dot(X).reshape(4,1)+B1.dot(U)
    return np.squeeze(np.asarray(xdot))
tspan=[0,.001]

X0=np.array([0,0,0,0])
sol=solve_ivp(conv,tspan,X0)
t=np.linspace(0,.001,10000)
tend=.001
plt.plot(t,X)
使用正常
plt.plot(t,X)
命令时显示错误。 如何在
X
t
之间绘制图形?
请帮助

这里的计算内容有点不清楚,但是检查
solve\u ivp
,似乎返回值(
sol
在本例中)有许多字段
sol.t
是时间点列表
sol.y
X
四个组件中每一个组件的计算值,对应于
sol.t
的每个值

下面是绘制4个组件的方法(它们都从0开始,因为
X0=(0,0,0,0)
)。解释取决于要解决的确切问题

将numpy导入为np
将matplotlib.pyplot作为plt导入
从numpy导入零
来自scipy.integrate import solve\u ivp
vin=12
vdon=.7
X=np.数组([[0],[0],[0],[0]])
U=np.数组([[vin],[vdon]])
A1=np.数组([[(.01-10)/1e-5,-1/1e-5,10/1e-5,0],
[1/1e-8,-1/(.05*1e-8),0,0],
[10/1e-8,0,(-10-1)/1e-8,-1/1e-8],
[0,0,1/1e-3,0]]
B1=np.数组([[1/1e-5,0],
[0,1/(.05*1e-8)],
[0, 0],
[0, 0]])
def conv(t,X):
xdot=A1.点(X).重塑(4,1)+B1.点(U)
返回np.挤压(np.asarray(xdot))
tspan=[0.001]
X0=np.数组([0,0,0,0])
sol=求解_ivp(conv,tspan,X0)
对于范围内的i(sol.y.shape[0]):
plt.plot(sol.t,sol.y[i],label=f'$X{i}(t)$)
plt.xlabel(“$t$”)#横轴表示时间
plt.legend()#显示颜色如何对应于X的分量
plt.show()

我找到了一种更简单的方法来绘制解决方案。
time\u数组=sol.t
解决方案\u数组=sol.y
然后简单地策划
plt.plot(时间数组、解决方案数组[0,:])

您的
t
具有10000个线性间隔值。你的
X
是一个四个零的向量。是的,错误显示相同。我应该做什么更改来绘制它?我不理解数学,但是你的
X
正确吗?如果是这样的话,您需要将其与相同长度(4)的时间轴进行对比,因此可能
t=np.linspace(0.001,4)
?@JohanC非常感谢!不客气。顺便说一下,
X=np.数组([[0],[0],[0],[0]])
可以删除(因为它没有被使用),并且
B1.dot(U)
可以在
conv
函数之外计算一次并重用。这将节省一点时间,添加
solve_ivp(…,vectoriazed=True)
@JohanC我很抱歉,我已经投票了,IDK为什么它没有出现。我又投票了。再次感谢