微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中解决ODE

如何解决在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)

运气不好。

解决方法

  1. 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 的右边界是非包含的)。
  2. 在 MATLAB f 中,向量是垂直连接的(分号),因此在 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?