如何让Matlab将延时系统识别为符号?

时间:2015-09-29 19:49:33

标签: matlab symbolic-math

如何让Matlab将延时系统识别为符号?我有:

syms t x y     % which should declare x & y as functions of t
X = [x; t]     % which are the variables of my system
IC = [x0; y0]  % which are the initial conditions of my system

prog = sosprogram(X);
vec = monomials(X, 0:1:4);
[prog, V] = sospolyvar(prog, vec, 'wscoeff');
prog = sosineq(prog, V);

dx = -2*x(t) - x(t-T);     % where T is the constant delay
dy = -y(t) - x(t-T) - y(t-T);
D = [dx; dy];     % my system

Vd = -diff(V,x)*D(1) - diff(V,y)*D(2);

如果我根据dde23帮助页面创建一个单独的函数句柄,其中

D = @systemFunction;

然后我的脚本在确定Vd时断开并输出错误:没有足够的输入参数(我理解并想要取消函数句柄)。但是,如果我取消函数句柄并make systemFunction

dx = -2*x(t) - x(t-T);     % where T is the constant delay
dy = -y(t) - x(t-T) - y(t-T);
D = [dx; dy];     % my system

然后它会中断,因为MATLAB不会将y(t-T)识别为符号函数y(t),并添加了一些延迟T.无论如何我可以改变这个吗?我不想解决系统问题,而是使用SOSTools为它找到一个Lyapunov。

我的错误信息是:

Error using systemFunction.
Not enough input arguments.
Error in Script (line 50)
Vd = -diff(V,x).*D(1)-diff(V,y).*D(2);

我知道为什么会收到此错误。这是因为我试图调用systemFunction而不给它所有相关的位。所以我想废除它。为了做到这一点,我需要知道如何象征性地将y(t-T)表示为y(t)并添加一些延迟T.

编辑:添加了相关代码和一些其他说明。

0 个答案:

没有答案