matlab中如何通过ss函数和tf2ss函数将微分方程转化...
例如下面的一道题。
方法一:
num=[0 0 10 10];
den=[1 6 6 10];
[A,B,C,D]=tf2ss(num,den)
方法二:
num=[0 0 10 10];
den=[1 6 6 10];
gs = tf(num,den)
gss = ss(gs)
matlab中由传递函数生成到状态空间的指令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(va*v,v,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状态空间模块
在命令窗口直接给A,B,C,D赋值
然后双击你在模型中的State-Space模块,就可以设置A,B,C,D了