我用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