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 的近似解,您将获得以下输出:
我来自 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 的近似解,您将获得以下输出: