ODE23从MatLab转到Python

gijlo24d  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(184)

我用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, []);

其中An x n方阵,BFn 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?

7vhp5slm

7vhp5slm1#

与问题相关:如何将matlab的ode23翻译成Python?

默认情况下,scipy.integrate.solve_ivp使用5(4)阶的Runge-Kutta方法。如果要使用类似ode23的方法,则必须在参数中指定该方法:

q = scipy.integrate.solve_ivp(func, Time_Step, y0, method='RK23')

与问题相关:错误无法将输入数组从Shape(20,20)广播到Shape(20,)

我认为@Lutz Lehmann的评论是正确的。

相关问题