您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 现代控制理论6.7-Matlab问题
Ch.6Ch.6Ch.6Ch.6线性系统综合目录(1/1)目录�概述�6.16.16.16.1状态反馈与输出反馈�6.26.26.26.2反馈控制与极点配置�6.36.36.36.3系统镇定�6.46.46.46.4系统解耦�6.56.56.56.5状态观测器�6.66.66.66.6带状态观测器的闭环控制系统�6.76.76.76.7MatlabMatlabMatlabMatlab问题�本章小结MatlabMatlabMatlabMatlab问题(1/2)6.76.76.76.7MatlabMatlabMatlabMatlab问题�本章讨论系统综合问题,涉及的主要计算问题有�连续线性定常系统的状态反馈与极点配置、�系统镇定、�系统解耦、�状态规测器设计等。�本节将讨论上述问题基于Matlab的问题求解和系统仿真。MatlabMatlabMatlabMatlab问题(2/2)�在这一节中,还将介绍进行线性定常系统综合问题的仿真平台软件lti_synth_analysis,以及该软件平台在状态反馈与极点配置、系统镇定、系统解耦、状态规测器设计以及线性二次型最优控制等系统综合问题中的应用。�下面分别介绍�反馈控制系统的模型计算�反馈极点配置�系统镇定�系统解耦�状态观测器反馈控制系统的模型计算(1/7)6.7.16.7.16.7.16.7.1反馈控制系统的模型计算�基于Matlab提供的建立状态空间模型函数ss()和建立传递函数模型函数tf(),可以实现反馈控制系统的模型计算。�编著者为此设计了反馈系统模型计算函数fdb_model()。�该函数可以实现状态反馈和输出反馈的闭环系统状态空间模型和传递函数模型计算。反馈控制系统的模型计算(2/7)�反馈系统模型计算函数fdb_model()的源程序为functioncsys=fdb_model(sys,K,H,type1,type2)error(nargchk(3,5,nargin));%检查输入项的数目是否有误ifnargin==4%若输入项数为4,则type2缺省为'ss'type2='ss';elseifnargin==3%若输入项数为3,则type1和type2分别缺省为'state'和'ss'type1='state';type2='ss';endswitchtype1(1:3)case'sta'%反馈模型计算的选择语句A=sys.a-sys.b*K;B=sys.b*H;%计算状态反馈的系统模型ifsize(sys.c,1)==0C=sys.c-sys.d*K;D=sys.d*H;elseC=sys.c;D=sys.d;end反馈控制系统的模型计算(3/7)case'out'D1=inv(eye(size(sys.c,1))+sys.d*K);C=D1*sys.c;D=D1*sys.d*H;A=sys.a-sys.b*K*C;B=sys.b*H-sys.b*K*D;endswitchtype2(1:2)case'ss'csys=ss(A,B,C,D);case'tf'sta_sys_c=ss(A,B,C,D);csys=tf(sta_sys_c);end%计算输出反馈的系统模型%反馈模型输出的选择语句%输出为状态空间模型%输出为传递函数模型反馈控制系统的模型计算(4/7)�反馈系统模型计算函数fdb_model()用于计算反馈控制律状态反馈律:uuuu=-KxKxKxKx+HvHvHvHv输出反馈律:uuuu=-KyKyKyKy+HvHvHvHv下的闭环系统模型。�基于反馈系统模型函数fdb_model(),可方便地求解闭环控制系统的状态空间模型和传递函数模型。�函数fdb_model()的调用格式为:clsys=fdb_model(sys,K,H,type1,type2)其中,sys为状态空间模型;�K为反馈矩阵;�H为前馈矩阵。反馈控制系统的模型计算(5/7)�若type1为字符串‘state’,则K为状态反馈矩阵;�type1为字符串‘output’,则K为输出反馈反馈矩阵。�type2为字符串‘ss’,则表示输出模型clsys为状态空间模型;�若type2为字符串‘tf’,则输出模型clsys为传递函数模型矩阵。�输入项type2和type1可以按从右到左顺序分别缺省为'ss'和'state'。clsys=fdb_model(sys,K,H,type1,type2)反馈控制系统的模型计算(6/7)�MatlabMatlabMatlabMatlab问题6-16-16-16-1试在Matlab中计算例6-1的系统在状态反馈矩阵K=[31]下的状态反馈闭环系统的传递函数模型。MatlabMatlabMatlabMatlab程序m6-1m6-1m6-1m6-1如下。[]12031112⎡⎤⎡⎤=+⎢⎥⎢⎥⎣⎦⎣⎦=xxuxxuxxuxxuyxyxyxyẋA=[12;31];B=[0;1];C=[12];D=0;K=[3;1];H=eye(size(B,2))sys=ss(A,B,C,D);tfsys_cl=fdb_model(sys,K,H,'state','tf')%赋值开环系统各矩阵%赋值反馈与前馈矩阵%建立开环状态空间模型%计算反馈闭环系统传递函数模型反馈控制系统的模型计算(7/7)�MatlabMatlabMatlabMatlab程序m6-1m6-1m6-1m6-1执行结果如下.在状态反馈矩阵K=[31]下的状态反馈闭环系统的传递函数模型。�函数fdb_model()的源程序运用了3个新的Matlab的语句和函数,分别为�计算函数调用输入项项数函数nargin()、检查函数调用输入项项数范围函数nargchk()和�错误报告函数error()。Transferfunction:2s-------s^2-s函数narginnarginnarginnargin()()()()和nargchknargchknargchknargchk()()()()(1/4)(1)(1)(1)(1)函数narginnarginnarginnargin()()()()和nargchknargchknargchknargchk()()()()�前面介绍的Matlab函数(M文件)大多允许在调用时允许有不同的输入格式和输出格式,允许部分输入输出项缺省,使得一个函数可以实现多个相同或相似功能。�这种具有多重功能函数的程序设计方法称为函数重载。�Matlab的函数重载主要是通过检查函数调用时输入输出的项数以及各输入输出项的数据结构类型来实现的。�为此,Matlab提供了查询函数调用时输入输出项数、检查该项数是否合法以及输入输出项类型的函数。函数narginnarginnarginnargin()()()()和nargchknargchknargchknargchk()()()()(2/4)�函数nargin()用于Matlab的函数(M文件)体中,它查询它所在函数当前被调用时实际输入项的项数,其主要调用格式为:n=nargin其中,返回的数值n即为函数nargin所在函数体内当前被调用时的实际输入项的项数。�函数nargchk()的用途是在函数体内检查函数当前被调用的实际输入项是否符合指定的范围,其主要调用格式为msgstr=nargchk(minargs,maxargs,numargs)msgstr=nargchk(minargs,maxargs,numargs,'string')其中,minargs和maxargs为所在函数被调用的输入项项数的合法最小值和最大值;�numargs为求得的输入项项数,可以直接为函数nargin(返回的值为输入项项数)。函数narginnarginnarginnargin()()()()和nargchknargchknargchknargchk()()()()(3/4)�对第1种调用格式,当输入项项数小于最小值minargs或大于最大值maxargs时,输出msgstr分别为符号串‘Notenoughinputarguments.’或‘Toomanyinputarguments.’。�对第2种调用格式,当输入项项数超过范围时,输出msgstr为输入指定的符号串‘string’。�如在上述函数fdb_model()的调用中,若输入项type1和type2不缺省,nargin给出的值为5;�若输入项type1和type2从右到左顺序缺省,则nargin给出的值分别为4和3,此时程序通过判断nargin给出的值,自动将type1和type2分别设定为缺省值'ss'和'state'。msgstr=nargchk(minargs,maxargs,numargs)msgstr=nargchk(minargs,maxargs,numargs,'string')函数narginnarginnarginnargin()()()()和nargchknargchknargchknargchk()()()()(4/4)�类似检查函数调用输入项的函数nargin()和nargchk(),Matlab还设计了检查函数调用输出项的函数nargout()和nargchkout(),其调用格式分别与函数nargin()和nargchk()一致。�通过查询函数实际调用时输入输出项数,再辅以判别输入输出项的数据结构类型,就可以通过编程实现函数重载功能。函数error()error()error()error()(1/1)(2)(2)(2)(2)函数error()error()error()error()�函数error()的功能为错误报告并强行中止程序执行,返回到键盘控制,其主要调用格式为error('message')其中,输入的‘message’为需要报告的错误报告信息。�在编程中,合理地使用函数error()可以避免程序执行时陷入错误中并报告错误信息。�在程序调试时,可以根据函数error()报告的错误信息调试程序,提高程序调试效率。反馈极点配置(1/2)6.7.26.7.26.7.26.7.2反馈极点配置�极点配置是一种重要的反馈控制系统设计方法。�状态反馈极点配置问题主要为SISO系统极点配置、MIMO系统的基于旺纳姆或龙伯格能控规范II形的极点配置等。�Matlab提供了单输入系统状态反馈极点配置函数acker()和多输入系统状态反馈极点配置函数place(),若需进行其他极点配置方法,则需要用户自己编程设计相应的函数。�对MIMO系统的基于旺纳姆或龙伯格能控规范II形的极点配置,编著者编制了专门函数求解相应的状态反馈矩阵。反馈极点配置(2/2)�下面分别介绍�单输入系统状态反馈极点配置�多输入系统状态反馈极点配置单输入系统状态反馈极点配置(1/3)1.1.1.1.单输入系统状态反馈极点配置�单输入系统状态反馈极点配置函数acker()的调用格式为k=acker(A,b,p)其中,输入的A和b分别为单输入系统的系统矩阵和输入矩阵;�p为给定的期望闭环极点所组成的一维数组;输出k为求得的状态反馈矩阵。�由于单输入系统状态反馈极点配置问题的反馈矩阵K的解具有惟一性,因此函数acker()求得的反馈矩阵与6.2节介绍的求解结果完全一致。�Matlab在求得反馈矩阵后,就可以构造反馈系统,进行反馈系统的仿真与分析了。单输入系统状态反馈极点配置(2/3)�MatlabMatlabMatlabMatlab问题6-26-26-26-2试在Matlab中计算例6-2的系统在期望的闭环极点为-1±j2时的状态反馈矩阵,并计算闭环系统的初始状态响应并绘出响应曲线。MatlabMatlabMatlabMatlab程序m6-2m6-2m6-2m6-2如下。012221313−−⎡⎤⎡⎤⎡⎤=+=⎢⎥⎢⎥⎢⎥−−⎣⎦⎣⎦⎣⎦xxuxxxuxxxuxxxuẋA=[-1-2;-13];b=[2;1];x0=[2;-3];p=[-1+2j-1-2j];k=acker(A,b,p);A_c=A-b*k
本文标题:现代控制理论6.7-Matlab问题
链接地址:https://www.777doc.com/doc-6058542 .html