|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
请教各位个问题,
关于状态空间法中的四个特性矩阵随时间变化时,A~D在s-function中如何定义呢?
问题是这样的,状态空间法中求解时A~D一般是常数矩阵,遇到耦合的问题,导致A~D是时变的,即为时间t的函数,这时候可以用其他的办法求解出来,但是,我就想,能否在s-function中直接定义A~D四个时变矩阵。我写的s-function代码贴出来是这样的:
- function [sys,x0,str,ts] = stest(t,x,u,flag)
- switch flag,
- case 0,
- [sys,x0,str,ts]=mdlInitializeSizes();
- case 1,
- sys=mdlDerivatives(t,x,u);
- case 3,
- sys=mdlOutputs(t,x,u);
- case {2,4,9},
- sys=[];
- otherwise
- error(['Unhandled flag = ',num2str(flag)]);
- end
- function [sys,x0,str,ts]=mdlInitializeSizes()
- A=zeros(4,4);
- D=zeros(2,2);
- sizes = simsizes;
- sizes.NumContStates = size(A,1);
- sizes.NumDiscStates = 0;
- sizes.NumOutputs = size(A,1)+size(D,1);
- sizes.NumInputs = size(D,2);
- sizes.DirFeedthrough = 1;
- sizes.NumSampleTimes = 1; % at least one sample time is needed
- sys = simsizes(sizes);
- x0 = zeros(size(A,1),1);
- str = [];
- ts = [-1 0];
- function sys=mdlDerivatives(t,x,u)
- A=[1,3,t,t^2;2,3,5,1;t-1,3,1,5;3,t,1,3];
- B=[2,1;3,t;3,;5,t];
- sys = A*x+B*u;
- function sys=mdlOutputs(t,x,u)
- C=[1,3,t,t^2;t-1,3,1,5];
- D=[1,t^2;2,t];
- sys = [C*x+D*u;x];
复制代码
运行就会提示undefined function or variable
麻烦高手帮我解答一下,十分感谢。 |
|