DAE仿真中断

时间:2017-03-02 18:12:38

标签: matlab ode

使用MATLAB DAE求解器时遇到问题。 我正在尝试使用拉格朗日力学来模拟机械系统的行为。为此,我按照the following tutorial使用了MATLAB的DAE解算器。

但是当我运行我的代码时,我收到以下错误消息:

Warning: Failure at t=5.076437e-01.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed
(1.803513e-15) at time t.
 In ode15i (line 406)

试图找到我的错误,我真的从教程中复制了代码并运行它。代码如下:

syms l g m real 
syms x(t) y(t) T(t) 

eqns = [(m*diff(x(t),2) - T(t)/l*x(t)),
    (m*diff(y(t),2) - T(t)/l*y(t) + m*g),
    (x(t)^2 + y(t)^2 - l^2) ];

vars = [x(t); y(t); T(t)];

[eqns, vars] = reduceDifferentialOrder(eqns, vars);
if(~isLowIndexDAE(eqns, vars))
  [DAEs, DAEvars] = reduceDAEIndex(eqns, vars);
  [DAEs, DAEvars] = reduceRedundancies(DAEs, DAEvars);
end

%change to function, set parameters
f = daeFunction(DAEs, DAEvars, m, l, g);
m = 1.0;
r = 1.0;
g = 9.81;

F = @(t, Y, YP) f(t, Y, YP, m, r, g);

%get initial conditions
y0est = [0.5*r; -0.8*r; 0; 0; 0; 0; 0];
yp0est = zeros(7,1);
opt = odeset('RelTol', 10.0^(-7), 'AbsTol' , 10.0^(-7));
[y0, yp0] = decic(F, 0, y0est, [], yp0est, [], opt);

%simulate
[t,y] = ode15i(F, [0, 5], y0, yp0, opt);

0 个答案:

没有答案