如何让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.
编辑:添加了相关代码和一些其他说明。