SCILAB ode:如何求解二阶 ODE

SCILAB ode: How to solve 2nd order ODE

我来自 MATLAB 的 ode45,试图在 scilab 中学习 ode。我 运行 进入异常我不知道如何解决。

function der = f(t,x)
    wn3 = 2800 * %pi/30; //rad/s
    m = 868.1/32.174; //slugs
    k = m*wn3^2; //lbf/ft
    w = 4100 * %pi/30; //rad/s
    re_me = 4.09/32.174/12; //slug-ft
    F0 = w^2*re_me; //lbf

    der(1) = x(2);
    der(2) = -k*x(1) + F0*sin(w*t);
endfunction

x0 = [0; 0];
t = 0:0.1:5;
t0 = t(1);
x = ode(x0,t0,t,f);
plot(t,x(1,:));

我收到这条我不理解的错误消息:

lsoda--  at t (=r1), mxstep (=i1) steps   
needed before reaching tout
      where i1 is :        500                                                  
      where r1 is :   0.1027287737654D+01                                       
Excessive work done on this call (perhaps wrong jacobian type).
at line    35 of executed file C:\Users\ndomenico\Documents\Scilab\high_frequency_vibrator_amplitude_3d.sce

ode: lsoda exit with state -1.

谢谢!

你的颂歌特别生硬(k = 2319733)。对我来说,给这么大的最后时间是没有意义的。您采取的时间步长 (0.1) 对驱动频率也非常大 w.r.t。如果您替换行

t = 0:0.1:5

来自

t = linspace(0,0.1,1001)

即在 [0,0.1] 和 1000 个时间步长内请求 t 的近似解,您将获得以下输出: