Skip to main content
 首页 » 编程设计

python之在 Python 中从 MATLAB 模仿 ode45 函数

2025年05月04日13zfyouxi

我想知道如何将 MATLAB 函数 ode45 导出到 python。根据文档应该如下:

 MATLAB:  [t,y]=ode45(@vdp1,[0 20],[2 0]); 
 
 Python:  import numpy as np 
          def  vdp1(t,y): 
              dydt= np.array([y[1], (1-y[0]**2)*y[1]-y[0]]) 
              return dydt 
          import scipy integrate  
          l=scipy.integrate.ode(vdp1([0,20],[2,0])).set_integrator("dopri5") 

结果完全不同,Matlab 返回的维度与 Python 不同。

请您参考如下方法:

如@LutzL 所述,您可以使用较新的 API,solve_ivp .

results = solve_ivp(obj_func, t_span, y0, t_eval = time_series) 

如果未指定 t_eval,那么每个时间戳不会有一条记录,这是我假设的大多数情况。

另一个边注是对于 odeint和其他积分器一样,输出数组是 [len(time), len(states)] 形状的 ndarray,但是对于 solve_ivp,输出是一维ndarray(长度等于t_eval)的list(length of state vector)。

所以如果你想要相同的订单,你必须合并它。你可以这样做:

Y =results 
merged = np.hstack([i.reshape(-1,1) for i in Y.y]) 

首先你需要重新整形使它成为一个[n,1]数组,然后水平合并它。 希望这对您有所帮助!