matlab中由传递函数生成到状态空间的指令dif2ss
我的matlab是7.0版本的,现在做一个求约旦型状态空间模型的题目,有个指令是dif2ss,但是我的这个版本上找不到这指令,无法调用,请问高手有么有其他的函数可以调用?...
我的matlab是7.0版本的,现在做一个求约旦型状态空间模型的题目,有个指令是dif2ss,但是我的这个版本上找不到这指令,无法调用,请问高手有么有其他的函数可以调用?或者给一下dif2ss的程序让我添加到我的函数库里,急用,谢谢
展开
展开全部
1、dif2ss并非MATLAB系统自带的命令,而是国内某本教材上所载的作者自编函数。我不知道楼主看的是哪本书,根据我查到的信息判断,可能是赵明旺等编著的《现代控制理论》(华中科技大学出版社,第73页):
http://ishare.iask.sina.com.cn/f/23221558.html
书中说该函数在随书光盘中提供,但我未能找到随书光盘。
2、如果愿意做,可以根据该书第49-53页关于约旦规范型的相关内容自行编写程序。
3、另外一个可行的做法是,使用符号数学工具箱的jordan函数来求变换矩阵,以下是示例:
>> num_1=[2 14 24]; den_1=[1 5 8 4];
>> sys_1=tf(num_1,den_1);
>> [a,b,c,d]=ssdata(sys_1);
>> [v,j]=jordan(a);
>> sys_2=ss(v\a*v,v\b,c*v,d)
a =
x1 x2 x3
x1 -1 0 0
x2 0 -2 1
x3 0 0 -2
b =
u1
x1 2
x2 0
x3 2
c =
x1 x2 x3
y1 6 -2 -5
d =
u1
y1 0
Continuous-time model.
需要注意,这个结果与上面所说赵明旺《现代控制理论》73页并不一致,这是因为,由于状态变量的选择不唯一,约旦规范型也不唯一。转换为输入输出关系的模型(传递函数)看的更清楚:
>> tf(sys_1-sys_2)
Transfer function:
-1.29e-014 s^3 - 7.466e-014 s^2 - 1.448e-013 s - 9.716e-014
-----------------------------------------------------------
s^6 + 10 s^5 + 41 s^4 + 88 s^3 + 104 s^2 + 64 s + 16
可见二者是等同的(不严格等于0是由于数值误差造成)。
追问
我用的教材确实是你说的,我后来找到解决的办法了,跟你说的一模一样,还找到了那光盘里面的东西,如果你需要的话留下你的邮箱,我发你。不过我有个问题,我觉得约旦规范型应该是唯一的,一个矩阵不管怎么化简,最后的最简形式应该是相同的,但是我用matlab验证的却是不唯一的。谢谢你。
追答
方便的话把光盘文件发给我吧,虽然眼下暂时用不到,作为资料储备一下也是好的。邮箱522319871 AT 企鹅,谢谢。
约旦型不是唯一的,这个道理非常简单,比如说,考虑一种特殊的约旦型——A为对角阵,我们如果随便互换两个状态变量的位置,ABC都会相应改变。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询