实验六 离散系统状态方程的求解
- 格式:doc
- 大小:253.50 KB
- 文档页数:4
资料范本本资料为word版本,可以直接编辑和打印,感谢您的下载求解系统的状态方程地点:__________________时间:__________________说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时请详细阅读内容求解系统的状态方程一、实验设备PC计算机,MATLAB软件,控制理论实验台二、实验目的(1)掌握状态转移矩阵的概念。
学会用MATLAB求解状态转移矩阵(2)学习系统齐次、非齐次状态方程求解的方法,计算矩阵指数,求状态响应;(3)通过编程、上机调试,掌握求解系统状态方程的方法,学会绘制输出响应和状态响应曲线;(4)掌握利用MATLAB导出连续状态空间模型的离散化模型的方法。
三、实验原理及相关基础(1)参考教材P99~101“3.8利用MATLAB求解系统的状态方程”(2)MATLAB现代控制理论仿真实验基础(3)控制理论实验台使用指导实验内容(1)求下列系统矩阵A对应的状态转移矩阵(a)(b)代码:syms lambdaA=[lambda 0 0;0 lambda 0;0 0 lambda];syms t;f=expm(A*t)(c)代码:syms t;syms lambda;A=[lambda 0 0 0;0 lambda 1 0;0 0 lambda 1;0 0 0 lambda];f=expm(A*t)(2) 已知系统a) 用MATLAB求状态方程的解析解。
选择时间向量t,绘制系统的状态响应曲线。
观察并记录这些曲线。
(1)代码:A=[0 1; -2 -3];B=[3;0];C=[1 1];D=[0];u=1;syms t;f=expm(A*t);%状态转移矩阵x0=0;s1=f*B*u;s2=int(s1,t,0,t)%状态方程解析解状态曲线:(2)A=[0 1;-2 -3];syms t;f=expm(A*t);X0=[1;0];t=[0:0.5:10];for i=1:length(t);g(i)=double(subs(f(1),t(i)));endplot(t,g)状态转移矩阵syms lambdaA=[lambda 0 0;0 lambda 0;0 0 lambda];syms tf=expm(A*t)b) 计算系统在初始状态作用下状态响应和输出响应的数值解(用函数initial( )), 绘制系统的状态响应曲线和输出响应曲线。
§9.6 离散时间系统状态方程的求解概述:离散系统状态方程的求解和连续系统的求解方法类似,包括时域和变换域两种方法。
矢量差分方程的时域求解;An 的计算;离散系统状态方程的Z 变换解一.矢量差分方程的时域求解离散系统的状态方程表示为(1)此式为一阶差分方程,可以应用迭代法求解。
设给定系统的起始状态为:在 , 则按式(1)有 以下用迭代法,求 时刻的值:对于任意n 值,当 可归结为 (2)上式中,当 时第二项不存在,此时的结果只由第一项决定,即 本身,只有当 时,式(2)才可给出完整的 之结果。
如果起始时刻选 ,并将上述对 值的限制以阶跃信号的形式写入表达式,于是有还可解得输出为()()()n n n Bx A λλ+=+10n n =()0λn ()()()0001n n n Bx A λλ+=+()()nn n ,,3,200 ++()()()0001n n n Bx A λλ+=+()()()()()()1 112000000+++=+++=+n n n n n n Bx ABx λA Bx A λλ2()()()()()()()21 2230000000+++++=+++=+n n n n n n n Bx ABx Bx A λA Bx A λλ230n n >()()()()()()()()()∑-=--------+=-+++++=-+-=110002001000 1 1 11n ni in nn n n n n n n i n n n n n n n n Bx A λABx Bx A Bx A λA Bx A λλ 0n n =()0n λ0n n >()n λ00=n n ()()()()()⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧-⎥⎦⎤⎢⎣⎡+=∑-=-- 零状态解零输入解10101n u i n u n n i i n Bx A λA λn ()()()n n n Dx C λy +=()()()()()()零状态解零输入解n u n n u i n u n i Dx Bx CA λCA i 1n n +-⎥⎦⎤⎢⎣⎡+=∑-=--1010由两部分组成:•一是起始状态经转移后在 时刻得到的响应分量 ;•另一是对时刻以前的输入量的响应。
实验六 离散系统状态方程的求解
一、实验目的
(1)了解离散系统状态方程求解方法。
(2)了解离散系统信号流图化简的方法。
(3)了解函数ode45的调用方法。
二、实验原理
离散系统状态方程的一般形式为 x(k+1)=Ax(k)+Bf(k)
在些只对单输入的n 阶离散系统的状态议程求解。
一般采用递推迭代的方式求解,由裙的条件x(0)和激励f(0)求出k=1时的x(1),然后依次迭代求得所要求的x(0),……,x(n)的值。
编程时应注意,MATLAB 中变量下标不允许为零,则裙点的下标只能取1,第n 步的x 的下标为n+1。
三、涉及的MATLAB 函数
zeros(2,1)
y=lsim(sys,f,[],x0)
for i=1:n end
clear all
采用函数ode45可以求解微分方程。
其调用格式如下
[t,y]=ode45(odefun,tspan,y0)
其中,odefun 指状态方程的表达式,tspan 指状态方程对应的起止时间]t0,tf],y0指状态变量的初始状态。
四、实验内容与方法
1.验证性实验
采用MATLAB 语言编程,求解离散系统状态方程,并绘制状态变量的波形。
(1)已知离散系统的状态方程为 )(01)1()1(25.025.005.0)1()1(2121k f k x k x k x k x ⎥⎦
⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡++⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡++ 初始条件为x(0)=⎥⎦
⎤⎢⎣⎡-5.01,激励为f(k)=0.5ε(k),确定该状态方程x(k)前10步的解,并画出波形。
MATLAB 程序:
%离散系统状态求解
%A=input(‘系统矩阵 A=’)
%B=input(‘系数矩阵 B=’)
%x0=input(‘初始状态矩阵 x0=’)
%n=input(‘要求计算的步长n=’)
%f=input(‘输入信号f=’) %需求长度为n的数组
clear all
A=[0.5 0;0.25 0.25];
B=[1;0];
x0=[-1;0.5];
n=10;
f=[0 0.5*ones(1,n-1)];
x(:,1)=x0;
for i=1:n
x(:,i+1)=A*x(:,i)+B*f(i);
end
subplot(2,1,1);stem([0:n],x(1,:));
subplot(2,1,2);stem([0:n],x(2,:));
离散系统状态方程的求解结果如图6.1所示
图6-1 离散系统状态方程的求解(2)离散系统状态求解
MATLAB程序:
A=[0 1;-2 3];B=[0;1];
C=[1 1;2 -1];D=zeros(2,1);
x0=[1;-1];%初始条件
N=10;f=ones(1,N);
sys=ss(A,B,C,D,[]);
y=lsim(sys,f,[],x0);k=0:N-1;
subplot(2,1,1);
stem(k,y(:,1),'b');
subplot(2,1,2);stem(k,y(:,2),'b');
离散系统状态议程的求解结果如图6.2所示。
图6-2 离散系统状态方程的求解
2.程序设计实验
(1)离散系统状态方程为: x(k+1)=Ax(k)+Bf(k)
其中A=⎥⎦⎤⎢⎣⎡25.025.005.0,B=⎥⎦
⎤⎢⎣⎡01,初始状态⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡00)0()0(21x x ,激励f(k)=δ(k),确定该状态方程x(k)前10步的解,并画出波形。
MATLAB 程序:
%离散系统状态求解
%A=input(‘系统矩阵 A=’)
%B=input(‘系数矩阵 B=’)
%x0=input(‘初始状态矩阵 x0=’)
%n=input(‘要求计算的步长 n=’)
%f=input(‘输入信号 f=’) %需求长度为n 的数组
clear all
A=[0.5 0;0.25 0.25];
B=[1;0];
x0=[0;0];
n=10;
f=[1 zeros(1,n-1)];
x(:,1)=x0;
for i=1:n
x(:,i+1)=A*x(:,i)+B*f(i);
end
subplot(2,1,1);stem([0:n],x(1,:));
subplot(2,1,2);stem([0:n],x(2,:));
求解结果如图6.3所示:
图6-3 离散系统状态议程的求解
(2)描述离散时间系统的信号流图如图所示,确定该系统的系统函数(离散系统信号流图的形式与连续系统相同,只不过是变量s换为z,在此不再详述。
)。
MATLAB程序:
syms z;
Q=[0 0 0 0 0 0;2 0 -3 0 -2 0;0 1/z 0 0 0 0;3 0 1 0 0 0;0 0 0 1/z 0 0;1 0 0 0 2 0];
B=[1;0;0;0;0;0];
I=eye(size(Q));
H=(I-Q)\B;
H6=H(6);
pretty(H6);
执行后得到结果:
2
24 + 9 z + z
-------------
2
z + 3 z + 2。