首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCILAB ode:如何求解二阶ODE

SCILAB ode:如何求解二阶ODE
EN

Stack Overflow用户
提问于 2019-05-07 07:39:30
回答 1查看 287关注 0票数 0

我来自MATLAB的ode45,正在尝试学习scilab中的ode。我遇到了一个异常,我不确定如何解决。

代码语言:javascript
复制
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,:));

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

代码语言:javascript
复制
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.

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 00:47:21

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

代码语言:javascript
复制
t = 0:0.1:5

通过

代码语言:javascript
复制
t = linspace(0,0.1,1001)

例如,在0、0.1和1000个时间步长内请求t的近似解,您将得到以下输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56013645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档