【问题标题】:MATLAB- ode solver: Unable to meet integration tolerancesMATLAB- ode 求解器:无法满足积分容差
【发布时间】:2015-07-28 05:16:03
【问题描述】:

我对 MATLAB 中的 ode 求解器 有疑问。我使用了 所有 ode 求解器,例如 ode23s、ode23、ode15s、ode45 等。由于错误警告,我的代码无法计算:

警告:在 t=8.190397e+01 失败。无法满足整合 公差而不将步长减小到最小值以下 在时间 t 允许 (2.273737e-13)。

我想计算一下,请直接在我的代码中帮助我。谢谢。

第一个脚本:

% floq.m
global c_alpha c_beta c_gama om ms ks bs mii

 % Parameters            
   c_alpha=1;
   c_beta=1.1;
   c_gama=1.1;  
   ms=1;                             
   ks=1;                                                       
   D=0.01;
   OM=sqrt(ks/ms);                     
   bs=2*D*ms*OM;                       

 % Solver    
   sourad = 0.1:0.13:10;
   for pom = 1:length(sourad)
       eta= sqrt(1/sourad(pom));
       om=eta*OM;                          
       T=2*pi/(eta*OM);    

       for mii=-10*(eta^2):0.13:10*(eta^2)  
           tspan=0:0.01:T;
           [tt,x1]=ode23(@fun,tspan,[1; 0]);    
       end
   end       

第二个脚本=函数:

% fun.m

 function v=fun(tt,x1);
 global c_alpha c_beta c_gama om ms ks bs mii

 mt=ms*cos(om*tt);
 bt=bs*cos(2*om*tt);
 kt=ks*cos(2*om*tt);

 % Matrix A
 A=[(-bs+mii*c_beta*bt)/(ms-mii*c_gama*mt) (-ks+mii*c_alpha*kt)/(ms-mii*c_gama*mt); 1 0];

 % Method
 v=A*x1;

谢谢。

【问题讨论】:

    标签: matlab integration ode


    【解决方案1】:

    您正在对 ODE 函数的一个极点进行积分。在极点,每个解决方案都结束了。杆的左右轨迹不能合并成一个更大的轨迹。

    极点是1 = mii*c_gama*cos(om*t) 的第一个正解t。如果mii*c_gama >= 1总是有这样的解决方案。

    【讨论】:

    • 我明白,但是如何修改它以使其工作。我无法更改矩阵 A。
    • 你不能。轨迹走向无限,无法从中恢复。如果存在解决方案的物理原因,请在数学或物理论坛中讨论方程的形成。
    猜你喜欢
    • 2017-10-22
    • 2010-09-27
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多