声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1508|回复: 0

[控制系统类] 状态方程中的特性矩阵A~D随时间变化,如何定义?

[复制链接]
发表于 2009-4-9 10:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教各位个问题,
关于状态空间法中的四个特性矩阵随时间变化时,A~D在s-function中如何定义呢?
问题是这样的,状态空间法中求解时A~D一般是常数矩阵,遇到耦合的问题,导致A~D是时变的,即为时间t的函数,这时候可以用其他的办法求解出来,但是,我就想,能否在s-function中直接定义A~D四个时变矩阵。我写的s-function代码贴出来是这样的:
  1. function [sys,x0,str,ts] = stest(t,x,u,flag)
  2. switch flag,
  3. case 0,
  4. [sys,x0,str,ts]=mdlInitializeSizes();
  5. case 1,
  6. sys=mdlDerivatives(t,x,u);
  7. case 3,
  8. sys=mdlOutputs(t,x,u);
  9. case {2,4,9},
  10. sys=[];
  11. otherwise
  12. error(['Unhandled flag = ',num2str(flag)]);
  13. end

  14. function [sys,x0,str,ts]=mdlInitializeSizes()
  15. A=zeros(4,4);
  16. D=zeros(2,2);
  17. sizes = simsizes;
  18. sizes.NumContStates = size(A,1);
  19. sizes.NumDiscStates = 0;
  20. sizes.NumOutputs = size(A,1)+size(D,1);
  21. sizes.NumInputs = size(D,2);
  22. sizes.DirFeedthrough = 1;
  23. sizes.NumSampleTimes = 1; % at least one sample time is needed
  24. sys = simsizes(sizes);
  25. x0 = zeros(size(A,1),1);
  26. str = [];
  27. ts = [-1 0];

  28. function sys=mdlDerivatives(t,x,u)
  29. A=[1,3,t,t^2;2,3,5,1;t-1,3,1,5;3,t,1,3];
  30. B=[2,1;3,t;3,;5,t];
  31. sys = A*x+B*u;

  32. function sys=mdlOutputs(t,x,u)
  33. C=[1,3,t,t^2;t-1,3,1,5];
  34. D=[1,t^2;2,t];
  35. sys = [C*x+D*u;x];
复制代码


运行就会提示undefined function or variable
麻烦高手帮我解答一下,十分感谢。

sfuntest.mdl

18.5 KB, 下载次数: 3

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 23:29 , Processed in 0.090721 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表