如何在Matlab中使用变化的输入/时间相关的输入函数来解决DAE?

时间:2015-09-02 08:59:38

标签: matlab input ode differential-equations

我用ode15i求解器解决了DAE问题。我有8个变量和8个方程,系统很复杂,到目前为止唯一的工作求解器是ode15i。

我已使用指南:http://se.mathworks.com/help/symbolic/set-up-your-dae-problem.html。但是,本指南并不能帮助我通过不同的输入来解决问题。

我的系统有一个与时间相关的输入,一个功能。函数本身很简单,但问题是DAE系统中的时间t是符号形式,我的输入函数不能求解相应的输入值,因为它不能计算符号时间值t

这是DAE系统的输入功能:

    function [delta] = delta(t)
    t=vpa(t)
       if t <= 1.01
       delta = 0;
       elseif t <= 3.61
       delta = 0.1222;
       elseif t <= 4.33
       delta = 0;
       elseif t <= 7.21
       delta = -0.1222;
       else
       delta = 0;
    end

Dae问题:

syms v1(t) r1(t) r2(t) r3(t) r4(t) fii(t) sig(t) psi(t);
tspan = 0:0.01:10;
....
a11 = delta(t)-(v1(t)+r1(t)*l_1_1)/u;
....
eqs = [...]
vars [...]
f = daeFunction(eqs,vars);
y0est = zeros(8,1);
yp0est = zeros(8,1);
opt = odeset('RelTol',10.0^(-7),'Abstol',10.0^(-7));
[y0,yp0] = decic(f,0,y0est, [], yp0est, [], opt);
[t,y] = ode15i(f,tspan, y0, yp0, opt);

我收到的错误如下:

Conversion to logical from sym is not possible.
 Error in delta (line 3)
    if t <= 1.01
 Error in Nonlin_painonsiirto_DUO2 (line 181)
 a11 = delta(t)-(v1(t)+r1(t)*l_1_1)/u;

如果delta输入是常数或(t)的三角函数,系统有效,如:

delta = 0.0175;
delta = sin(t)*0.0175;

我在没有vpa(t)命令和命令double(t)的情况下也尝试了delta函数,但它什么也没做。我还尝试使用我的系统的时间向量tspan = 0:0.01:10作为输入,这是ode15i的时间跨度:

delta(tspan)

但是,它会尝试计算整个向量tspan,这会导致错误,因为矩阵维度并不一致。

希望这里的问题是可以理解的,谢谢。

-Jere

0 个答案:

没有答案