在 python 中求解 ODE
Solving ODE in python
在 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,6)),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, np.array([0 100]), 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' s 右边界是非包容性的)。
在 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)
在 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,6)),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, np.array([0 100]), 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' s 右边界是非包容性的)。
- 在 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)