在python中求解ODE



在MATLAB中,我将此ode求解为:

B = [0 0 -5]'; 
y0 =[0 -5 0 5 0 0]';
f = @(t,y) [y(4:6); (q/m)*cross(y(4:6),B)];
[t,y] = ode45(f,[0 100],y0);

我一直在阅读以前关于如何在Python中求解ODE以及如何将MATLAB代码与相应的Python代码相匹配的答案,但是,当我尝试将相同的ODE求解为:

f=lambda t,y: np.array([y(np.arange(4,6)),(q/m)*np.cross(y(np.arange(4,6)),B)])
sol =solve_ivp(f, np.array([0 100]), y0)

我收到一条错误消息(第454行,在solve_ivp-solver=方法(fun,t0,y0,tf,矢量化=矢量化,**选项(中(

我也试过:

sol = integrate.odeint(f, np.array([0 100]), y0)

没有任何运气。

MATLAB中的
  1. y(4:6)不是Python中的y(np.arange(4,6))

    • 在MATLAB中,y(4:6)从数组y中获取第4到第6个元素
    • 在Python中,它应该是y[3:6](方括号;3而不是4,因为Python是0索引的;6而不是5,因为Python的右边界是非包容性的(
  2. 在MATLABf中,向量是垂直连接的(分号(,因此在Python中,它们应该与vstack()垂直堆叠。

  3. Python列表需要逗号。在sol行中,[0 100]需要是[0, 100]

你可能想要这样的东西:

f = lambda t, y: np.vstack([y[3:6], (q/m) * np.cross(y[3:6], B)])
sol = solve_ivp(f, np.array([0, 100]), y0)

相关内容

  • 没有找到相关文章

最新更新