如何解决在python中解决ODE
在 MATLAB 中,我将这个颂歌解决为:
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,B)])
sol =solve_ivp(f,np.array([0 100]),y0)
我收到一条错误消息(第 454 行,在 solve_ivp solver = method(fun,t0,y0,tf,vectorized=vectorized,**options))
我也试过:
sol = integrate.odeint(f,y0)
运气不好。
解决方法
-
y(4:6)
在 MATLAB 中不是y(np.arange(4,6))
在 Python 中。- 在 MATLAB 中,
y(4:6)
从数组y
中获取第 4 到第 6 个元素。 - 在 Python 中,这应该是
y[3:6]
(方括号;3 而不是 4,因为 Python 是 0 索引的;6 而不是 5,因为 Python 的右边界是非包含的)。
- 在 MATLAB 中,
-
在 MATLAB
f
中,向量是垂直连接的(分号),因此在 Python 中它们应该使用vstack()
垂直堆叠。 -
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。