我在MATLAB中有以下代码,
n = 5;
ainit = zeros(1,n);
for i=1:ndof
ainit(i) = 0;
end
binit = zeros(1,ndof);
disp(binit)
x0 = [ainit,binit];
tf = 10; step = .001; tspan = 0:step:tf
funky=@(t,x) A*x + BF; %beam(t,x,K,M,wns,psi2,Load);
[t2,q2] = ode23(funky,tspan, x0, []);
其中A
是n x n平方矩阵,BF
是n x 1向量
我正在尝试将这些代码转换为Python。到目前为止,
y0 = np.zeros((4*n))
Time_Step = np.arange(0, 10, 0.001)
func = lambda x, t: (A*x+BF)
q = scipy.integrate.solve_ivp(func, Time_Step, y0)
这给了我一个错误,状态为could not broadcast input array from shape (20,20) into shape (20,)
如何将MATLAB的ode23
翻译成Python?
相关问题:如何将MATLAB的ode23转换为Python
默认情况下,scipy.integrate.solve_ivp使用5(4(阶的Runge-Kutta方法。如果你想使用像ode23这样的方法,你必须在参数中指定方法:
q = scipy.integrate.solve_ivp(func, Time_Step, y0, method='RK23')
与问题相关:错误无法将输入数组从形状(20,20(广播到形状(20,(
我认为@Lutz Lehmann的评论是正确的。