我正在使用 ode15i 求解器求解 DAE 问题。我有 8 个变量和 8 个方程,系统很复杂,到目前为止唯一可用的求解器是 ode15i。
我使用过该指南:http://se.mathworks.com/help/symbolic/set-up-your-dae-problem.html 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
戴伊问题:
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