µÚ5Õ»ùÓÚLMIµÄ¿ØÖÆÏµÍ³¿¹±¥ºÍ¿ØÖÆ ÔÚʵ¼ÊµÄ¿ØÖÆÏµÍ³ÖУ¬ÓÉÓÚÆä×ÔÉíµÄÎïÀíÌØÐÔ¶øÒýÆðµÄÖ´Ðлú¹¹Êä³ö·ùÖµÊÇÓÐÏ޵쬼´ÊäÈë±¥ºÍÎÊÌ⣬¸ÃÎÊÌâÊÇĿǰ¿ØÖÆÏµÍ³ÖÐ×îΪ³£¼ûµÄÒ»ÖÖ·ÇÏßÐÔÎÊÌâ¡£ÓÉÓÚ¿ØÖÆÊäÈë±¥ºÍµÄ´æÔÚ£¬¿ÉÄܵ¼ÖÂÕû¸ö¿ØÖÆÏµÍ³·¢É¢£¬½ø¶øµ¼ÖÂÕû¸ö¿ØÖÆÏµÍ³Ê§¿Ø¡£¼´Ê¹ÏµÍ³²»·¢É¢£¬³¤Ê±¼ä¸ßÇ¿¶ÈµÄÕñµ´Ò²»áµ¼Ö¿ØÖÆÏµÍ³µÄ½á¹¹Ë𻵣¬´Ó¶øµ¼Ö¹ÊÕÏ¡£¿ØÖÆÊäÈë±¥ºÍÎÊÌâÊǶàÄêÀ´Ñо¿µÄÈÈÃÅ¿ÎÌâ¡£ Ŀǰ½â¾ö¿ØÖÆÊäÈëÊÜÏÞÏ¿ØÖÆÆ÷µÄÉè¼ÆÎÊÌâÓÐÁ½ÖÖ·½·¨£º Ò»ÖÖÊÇÉè¼ÆÓнçµÄ¿ØÖÆÊäÈ룬ÀýÈçÎÄÏ×£Û3,4£ÝÖУ¬²ÉÓÃË«ÇúÕýÇк¯ÊýÉè¼ÆÓнçµÄ¿ØÖÆÂÉ£¬µ«¸Ã·½·¨¹ýÓÚ±£ÊØ£¬»áÔì³ÉÖ´ÐÐÆ÷ÀûÓõÄЧÂʲ»¸ß£» ÁíÒ»ÖÖÊÇ»ùÓÚ¿ØÖÆÊäÈë±¥ºÍµÄ·½·¨£¬²ÉÓÃLMI·½·¨Éè¼Æ¿ØÖÆÆ÷µÄÔöÒæ£Û1,2£Ý£¬ÊµÏÖ¿ØÖÆÊäÈ볬³ö½çÏÞ²¿·ÖµÄÓÐЧ²¹³¥£¬¸Ã·½·¨ÓëÓÐ½ç¿ØÖÆÊäÈë·½·¨Ïà±È£¬¿É±£Ö¤¿ØÖÆÊäÈë°´×î´óµÄÖµ£¬ÓÐЧµØÌá¸ßÁËÖ´ÐÐÆ÷µÄÀûÓÃЧÂÊ¡£ ½üЩÄêÀ´¹úÄÚÍâµÄѧÕß¶Ô¿¹±¥ºÍÎÊÌâ½øÐÐÁËÉîÈëµÄÑо¿£¬ÏßÐÔ¾ØÕó²»µÈʽLMI×÷ΪһÖÖÓÐЧµÄÊýѧ¹¤¾ß£¬±»¹ã·ºµØÓ¦ÓÃÓÚ¿¹±¥ºÍ¿ØÖÆÁìÓòÖ®ÖС£G.GrimmµÈ£Û2£ÝÕë¶ÔÒ»°ãÇé¿öϵÄÎȶ¨Ä£ÐÍϵͳÉè¼ÆÁË»ùÓÚLMIµÄ¶¯Ì¬²¹³¥Æ÷£¬±£Ö¤ÏµÍ³Îȶ¨£¬²¢±£Ö¤ÏµÍ³Êä³ö¶ÔÍⲿ¸ÉÈžßÓÐL2ÔöÒæ¡£H.S.HuµÈ£Û5£ÝÕë¶ÔÒ»°ãϵͳÑо¿ÁË»ùÓÚLMIµÄL2ÔöÒæÌØÐÔ¼°Îȶ¨ÇøÓò¡£ ±¾ÕÂÕë¶Ô¿ØÖÆÏµÍ³¿¹±¥ºÍÎÊÌ⣬½éÉÜÁË»ùÓÚLMIµÄ¿¹±¥ºÍ²¹³¥Æ÷£¬±£Ö¤ÁËϵͳÔÚÊäÈëÊÜÏÞÇé¿öϱջ·Îȶ¨¡£ 5.1LQG¿ØÖÆÆ÷µÄÉè¼Æ 5.1.1ϵͳÃèÊö ¿¼ÂÇÈçÏÂÄ£ÐÍ x¡¤p=Apxp+Bpuu+Bpww y=Cpyxp+Dpyuu+Dpyww+v0(5.1) ÆäÖУ¬xp=x1x2T£¬w=w0rT£¬Bpw=Bpw0Bpwr£¬Dpyw=Dpyw0Dpywr£¬Bpwr=0£¬Dpywr=0£¬rΪָÁw0ºÍv0·Ö±ðΪ¼ÓÔÚÊäÈëºÍÊä³öµÄÐźÅÔëÉù¡£ 5.1.2¿ØÖÆÆ÷µÄÉè¼Æ LQG¿ØÖÆÆ÷ÓÉLQI¿ØÖÆÆ÷ºÍKalmanÂ˲¨Æ÷×éºÏ¹¹³É£¬Èçͼ5.1Ëùʾ¡£²ÉÓÃKalmanÂ˲¨Æ÷ʵÏÖÎÄÏ×£Û1£ÝÖпØÖÆÆ÷ʽ(4.9)µÄ¶¯Ì¬ÏµÍ³½á¹¹£¬Í¬Ê±¿ÉʵÏÖÐźŵÄÂ˲¨¡£ ²ÉÓôøÓлý·ÖµÄLQG¿ØÖÆÆ÷½á¹¹Èçͼ5.2Ëùʾ£¬ÆäÖÐxiΪ¸ú×ÙÎó²îµÄ»ý·Ö¡£²ÉÓÃlqi()º¯ÊýÇó¿ØÖÆÆ÷ÔöÒæK£¬²ÉÓÃKalmanÂ˲¨Æ÷ʵÏÖ¶¯Ì¬ÏµÍ³µÄ״̬¹À¼Æ¡£ ͼ5.1LQG¿ØÖÆÏµÍ³½á¹¹ ͼ5.2´øÓлý·ÖµÄLQG¿ØÖÆÆ÷½á¹¹ Õë¶ÔÄ£ÐÍʽ(5.1)£¬KalmanÂ˲¨Ë㷨Ϊ x=Apx^+Bpuu+L(y-Cpyx^-Dpyuu)(5.2) ÆäÖÐ,LΪkalmanÔöÒæ¡£ ²ÉÓÃÈçÏÂÃüÁîʵÏÖKalmanÂ˲¨Ëã·¨£¬´Ó¶øÇóµÃÔöÒæL£º £Ûkest,L,P£Ý = kalman(sys,Qn,Rn,Nn)(5.3) ÆäÖÐ,sys=ss(Ap,Bpu,Cpy,Dpyu)½«Ä£ÐÍʽ(5.1)ת»»Îª×´Ì¬¿Õ¼äµÄÐÎʽ£¬kestΪKalmanÂ˲¨Æ÷µÄ½á¹¹ÐÅÏ¢£¬Qn£¬Rn·Ö±ð±íʾÊäÈëÔëÉùw0ºÍÊä³öÔëÉùv0µÄЭ·½²îÊý¾Ý£¬Qn=E(w0wT0)£¬Rn=E(v0vT0)£¬PΪRiccati·½³ÌµÄÐÅÏ¢¡£ ¶þ´ÎÐÍÐÔÄÜÖ¸±êΪ Ju=¡Ò¡Þ0x-TQx-+2x-TNu+uTRudt(5.4) ÆäÖÐ,x-=x^xiT£¬Q¡¢R¡¢N·Ö±ðΪÃèÊö״̬ºÍ¿ØÖÆÊäÈëµÄȨֵ¾ØÕó¡£ ²ÉÓÃMATLABÖеÄlqi()º¯Êý£¬¿ÉÇóµÃÂú×ã¶þ´ÎÐÍÐÔÄÜÖ¸±êµÄ×îÓÅ¿ØÖÆÔöÒæºÍ¿ØÖÆÆ÷Ϊ K=lqi(sys,Q,R,N)(5.5) u=-Kx-=-Kxx^-Kixi(5.6) ÆäÖÐ,xiΪ¸ú×ÙÎó²îµÄ»ý·Ö£¬K=KxKi£¬x¡¤i=r-y¡£ ¿ØÖÆÄ¿±êΪ£º ÔÚx^ºÍu¾¡Á¿¼õСµÄÇé¿öÏ£¬±£Ö¤xi¡ú0£¬¼´r¡úy¡£ ÔÚKalmanÂ˲¨Æ÷ÖУ¬ÓÉÓÚ Apx^+Bpuu+Ly-Cpyx^-Dpyuu =Apx^-BpuKxx^-BpuKixi+Ly-LCpyx^+LDpyuKxx^+LDpyuKixi =Ap-BpuKx-LCpy+LDpyuKxx^+-BpuKi+LDpyuKixi+Ly ÔòLQG¿ØÖÆÆ÷Ë㷨״̬·½³Ì¿ÉдΪ x x¡¤i=Ap-BpuKx-LCpy+LDpyuKx-BpuKi+LDpyuKi 00x^ xi+0L 1-1r y (5.7) ÆäÖУ¬ 0L 1-1r y=L -1y+0 1r¡£ 5.1.3±Õ»·ÏµÍ³µÄ״̬·½³Ì±íʾ ¸ù¾Ýʽ(5.1)£¬¿ÉÖª±»¿Ø¶ÔÏó״̬·½³Ì x¡¤ p=Apxp+Bpuu+Bpw0w0 y=Cpyxp+Dpyuu+Dpyw0w0+v0(5.8) ¸ù¾Ýʽ(5.6)ºÍʽ(5.7)£¬¿É½«LQG¿ØÖÆÆ÷Ë㷨д³É״̬·½³ÌÐÎʽ x¡¤c=Acxc+Bcyy+Bcww u=Ccxc+Dcyy+Dcww(5.9) ÆäÖУ¬xc=x^ xi£¬Ac=Ap-BpuKx-LCpy+LDpyuKx-BpuKi+LDpyuKi 00£¬Bcy=L -1£¬Bcw=00 00 01£¬Cc=-K£¬Dcy=0£¬Dcw=00¡£ 5.1.4·ÂÕæÊµÀý ±»¿Ø¶ÔÏóȡʽ(5.1)£¬¼´ x¡¤1=x2 x¡¤2=-x1-10x2+ u+w0 y=x1+w0+v0 ¶ÔӦʽ(5.1)£¬Ap=01 -1-10£¬Bpu=0 1£¬Bpw=Bpu£¬Cpy=10£¬Dpyu=0£¬Dpyw0=1£¬w0ºÍv0·Ö±ðΪ¼ÓÔÚÊäÈëºÍÊä³öµÄÐźÅÔëÉù£¬w0=0.001sin(10t)£¬v0=0.001rands(1)¡£ ͨ¹ýLQI·½·¨Çó¿ØÖÆÔöÒæK£¬¸ù¾Ý¶þ´ÎÐÍÐÔÄÜÖ¸±êʽ(5.4)£¬²»¿¼ÂÇw0ºÍÊä³öÔëÉùv0Ö®¼äµÄÏ໥ӰÏ죬ȡQ=500 050 0060£¬R=0.001£¬N=0£¬ÀûÓÃK=lqi(sys,Q,R,N)ÇóµÃK=-Cc=202.342864.1936-244.949¡£ ͨ¹ýKalmanÂ˲¨Ëã·¨ÇóÔöÒæL£¬¸ù¾Ýʽ(5.3)£¬½«ÊäÈëÔëÉùw0ºÍÊä³öÔëÉùv0µÄЭ·½²îÊý¾Ý·Ö±ðȡΪQn=100£¬Rn=100£¬ÀûÓãÛkalmf,L£Ý=kalman(Plant,Qn,Rn)ÇóµÃÔöÒæL=0.008 0.50£¬´Ó¶øµÃµ½¿ØÖÆÆ÷ʽ(5.9)¡£È¡Ö¸ÁîrΪ·½²¨Ðźţ¬r=1.5square(0.25t)£¬·ÂÕæ½á¹ûÈçͼ5.3ºÍͼ5.4Ëùʾ¡£ ͼ5.3x1µÄ·½²¨ÏìÓ¦ ͼ5.4¿ØÖÆÊäÈë ·ÂÕæ³ÌÐò£º (1) LQG¿ØÖÆÆ÷Éè¼Æ³ÌÐò£º chap5_1LQG.m %LQG Controller design clear all; close all; %Plant Ap=£Û0 1;-1 -10£Ý; Bpu=£Û0;1£Ý; Bpw0=Bpu; Cpy=£Û1 0£Ý; Dpyu=0; Dpyw0=1; %LQI design sys=ss(Ap,Bpu,Cpy,Dpyu);%in state space without noise Q=£Û5 0 0;0 5 0;0 0 60£Ý; %Used in lqi for x and xi R=0.001; N=0; K=lqi(sys,Q,R,N); Kx=£ÛK(1) K(2)£Ý; Ki=K(3); %Kalman filter Plant=ss(Ap,£ÛBpu Bpw0£Ý,Cpy,£ÛDpyu Dpyw0£Ý);%in state space with noise Qn=100;Rn=100; £Ûkalmf,L£Ý=kalman(Plant,Qn,Rn); %LQG controller Ac=£ÛAp-Bpu*Kx-L*Cpy+L*Dpyu*Kx -Bpu*Ki+L*Dpyu*Ki; 0 0 0£Ý Bcy=£ÛL;-1£Ý; Bcw=£Û0 0;0 0;0 1£Ý; Cc=-K Dcy=0; Dcw=£Û0 0£Ý; save lqg_file Ac Bcy Bcw Cc Dcy Dcw; (2) SimulinkÖ÷³ÌÐò£º chap5_1sim.mdl (3) ¿ØÖÆÆ÷³ÌÐò£º chap5_1ctrl.m function £Ûsys,x0,str,ts£Ý=s_function(t,x,u,flag) switch flag, case 0, £Ûsys,x0,str,ts£Ý=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 3, sys=mdlOutputs(t,x,u); case {1,2, 4, 9 } sys = £Û£Ý; otherwise error(£Û'Unhandled flag = ',num2str(flag)£Ý); end function £Ûsys,x0,str,ts£Ý=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 3; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys=simsizes(sizes); x0=£Û0 0 0£Ý; str=£Û£Ý; ts=£Û0 0£Ý; function sys=mdlDerivatives(t,x,u) r=1.5*square(0.25*t); y=u(1); load lqg_file; %Ac,Bcy,Bcw sys(1:3)=Ac*x+Bcy*y+Bcw(:,2)*r; function sys=mdlOutputs(t,x,u) r=1.5*square(0.25*t); y=u(1); load lqg_file; %Cc,Dcy,Dcw xc=£Ûx(1) x(2) x(3)£Ý'; ut=Cc*xc+Dcy*y+Dcw(:,2)*r; sys(1)=ut; (4) ±»¿Ø¶ÔÏó³ÌÐò£º chap5_1plant.m function £Ûsys,x0,str,ts£Ý=s_function(t,x,u,flag) switch flag, case 0, £Ûsys,x0,str,ts£Ý=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 3, sys=mdlOutputs(t,x,u); case {2, 4, 9 } sys = £Û£Ý; otherwise error(£Û'Unhandled flag = ',num2str(flag)£Ý); end function £Ûsys,x0,str,ts£Ý=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 2; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys=simsizes(sizes); x0=£Û0 0£Ý; str=£Û£Ý; ts=£Û0 0£Ý; function sys=mdlDerivatives(t,x,u) ut=u(1); w0=0.001*sin(10*t); Ap=£Û0 1;-1 -10£Ý; Bpu=£Û0;1£Ý; Bpw0=Bpu; sys(1:2)=Ap*x+Bpu*ut+Bpw0*w0; function sys=mdlOutputs(t,x,u) ut=u(1);%sizes.DirFeedthrough = 1 Cpy=£Û1 0£Ý; Dpyu=0; Dpyw0=1; w0=0.001*sin(10*t); v0=0.001*rands(1); sys=Cpy*x+Dpyu*ut+Dpyw0*w0+v0; (5) ×÷ͼ³ÌÐò£º chap5_1plot.m close all; r=1.5*square(0.25*t); figure(1); plot(t,r,'-.r',t,y,'k','linewidth',2); xlabel('time(s)');ylabel('x1 response'); figure(2); plot(t,ut(:,1),'r','linewidth',2); xlabel('time(s)');ylabel('Control input'); 5.2»ùÓÚLMIµÄ¿¹±¥ºÍ±Õ»·ÏµÍ³ÃèÊö 5.2.1ϵͳÃèÊö ºöÂÔÔëÉùÓ°Ï죬ÈÔ¿¼ÂÇÄ£ÐÍʽ(5.1)£¬¼´ x¡¤p=Apxp+Bpuu+Bpww y=Cpyxp+Dpyuu+Dpyww(5.10) ¿ØÖƵÄÄ¿±êÊÇͨ¹ýÊ©¼ÓÒ»¸ö¿ØÖÆÊäÈëu£¬Ê¹y¡úr¡£ÓÉÓÚÊäÈëÊÜÏÞ²¿·ÖµÄ´æÔÚ£¬±Õ»·ÏµÍ³¿ÉÄÜ·¢É¢»òÕß²úÉú¼¤ÁÒµÄÕñµ´£¬Îª±£Ö¤ÏµÍ³Îȶ¨£¬ÐèÒªÉè¼Æ¿¹±¥ºÍ²¹³¥Æ÷£¬¿ØÖÆÊäÈëÊÜÏÞ¿ØÖÆÏµÍ³Èçͼ5.5Ëùʾ¡£ ͼ5.5¿¹±¥ºÍ²¹³¥¿ØÖÆÏµÍ³ ¿ØÖÆÊäÈë±¥ºÍº¯Êý±í´ïÈçÏ satu=u-£¬u>u- u£¬-u-¡Üu¡Üu- -u-£¬u0(5.32) ÉÏÃæÌõ¼þÏ£¬ÇóʹÂú×ãminR,¦Ã¦ÃµÄ¦ÃºÍR¡£ µÚ¶þ²½£º Çó½âDaw »ùÓÚ¿¹±¥ºÍÔöÒæÇó½âµÄLMIʽΪ ¦·(U,¦Ã)+GTU¦«TUHT+H¦«UGU<0(5.33) ÆäÖУ¬ ¦·(U,¦Ã)=HeAclRBclqU+QCTcluBclwQCTclz 0DcluqU-UDclywUDTclzq 00-¦Ã2IDTclzw 000-¦Ã2I H=BTclv0|DTcluv|0|DTclzv GU=00|I|00 ÆäÖÐ,HeX=X+XT¡£ ÓÉÓÚ²ÉÓõÄÊǾ²Ì¬²¹³¥Æ÷£¬¹Ênaw=0£¬Q=R¡£ ΪÁ˱£Ö¤±Õ»·ÏµÍ³µÄÇ¿Îȶ¨ÐÔ£¬¦«UºÍUÐèÒªÂú×ãÈçÏÂLMI²»µÈʽ£Û1£Ý£º -21-¦ÌU+HeDcluqU+0nu¡ÁncInu¦«U<0(5.34) ÆäÖÐ,¦ÌÊǺÜСµÄÕýʵÊý¡£ Çó½â²»µÈʽ(5.30)ÖÁʽ(5.34)£¬¿ÉµÃ¦«UºÍU£¬´Ó¶ø¿ÉµÃ¾²Ì¬²¹³¥Æ÷Ϊ Daw=¦«UU-1£¬v=Dawq(5.35) 5.2.4±Õ»·ÏµÍ³Îȶ¨ÐÔ·ÖÎö Ê×ÏÈ£¬½øÐбջ·ÏµÍ³Îȶ¨ÐÔ·ÖÎö£¬Éè¼ÆLyapunovº¯ÊýV=xTPx£¬Í¨¹ýÈ¡V¡¤<0²¢½øÐб任£¬¿ÉµÃµ½Ê½(5.33)¡£ È»ºó£¬¸ù¾ÝÎÄÏ×£Û2£ÝÖеÄÒýÀí5¿ÉÖª£¬Ê½(5.33)ÓнâµÄÌõ¼þÊǵ±ÇÒ½öµ±ÎÄÏ×£Û2£ÝÖÐʽ(31)³ÉÁ¢£¬ÒÀ¾ÝÊǾØÕóÏû³ý¶¨ÀíºÍ£Û2£ÝÖж¨Àí2¡¢¶¨Àí5µÄÖ¤Ã÷£¬´Ó¶ø¿ÉµÃµ½Ê½(5.30)ÖÁʽ(5.32)¡£ ʽ(5.30)ÖÁʽ(5.33)µÄÖ¤Ã÷ºÍ·ÖÎöÀ´Ô´ÓÚÎÄÏ×£Û2£Ý¡£ 5.2.5·ÂÕæÊµÀý ¿¼ÂDZ»¿Ø¶ÔÏóΪʽ(5.10)£¬³õʼ״̬Ϊ0 0 0£¬Ö¸ÁîΪ·½²¨Ðźţ¬²ÉÓÃMATLABº¯ÊýʵÏÖ£¬È¡Ö¸ÁîΪr=1.5square0.08t¡£Çó½â²»µÈʽʽ(5.30)ÖÁʽ(5.34)£¬È¡v0=0£¬¿ÉµÃ ¦Ã=2.7518£¬Daw=-0.00020.00190.00061.0 °´Ê½(5.25)Éè¼Æ¿ØÖÆÂÉ£¬¿ØÖÆÊäÈëÊÜÏÞֵΪu-=5.0£¬Èç¹û¼Ó²¹³¥Æ÷£¬¸ù¾Ýʽ(5.35)Çó²¹³¥v=Dawq£¬·ÂÕæ½á¹ûÈçͼ5.6ºÍͼ5.7Ëùʾ¡£Èç¹û²»¼Ó²¹³¥Æ÷£¬È¡Daw=0£¬ÿðþ½›=0£¬·ÂÕæ½á¹ûÈçͼ5.8ºÍͼ5.9Ëùʾ¡£¿É¼û£¬¼ÓÈë²¹³¥Æ÷ºó£¬·½²¨¸ú×ÙÐÔÄܺͿØÖÆÊäÈëÐźŵõ½Á˺ܴóµÄ¸ÄÉÆ¡£ ͼ5.6·½²¨ÏìÓ¦(¼Ó²¹³¥Æ÷) ͼ5.7¿ØÖÆÊäÈë(¼Ó²¹³¥Æ÷) ͼ5.8·½²¨ÏìÓ¦(²»¼Ó²¹³¥Æ÷) ͼ5.9¿ØÖÆÊäÈë(²»¼Ó²¹³¥Æ÷) ·ÂÕæ³ÌÐò£º (1) LMIÉè¼Æ³ÌÐò£º chap5_2LMI.m % Generic antiwindup LMI program clear all; close all; % Dimension defination np=2; % ±»¿Ø¶ÔÏó¶¯Ì¬½×Êý nc=3; % ¿ØÖÆÆ÷¶¯Ì¬½×Êý nu=1; % ¿ØÖÆÊäÈë¸öÊý nw=2; % Íâ¼ÓÊäÈë¸öÊý nz=1; % ÐÔÄÜÖ¸±ê¸öÊý naw=0; % ²¹³¥Æ÷״̬½×Êý ncl=np+nc; nv=nu+nc; npc=np+nc; n=np+nc+naw; m=ncl+nu+nw+nz; % Plant defination Ap=£Û0 1;-1 -10£Ý; Bpu=£Û0;1£Ý; Cpy=£Û1 0£Ý; Dpyu=0; Bpw0=Bpu; Bpr=zeros(2,1); Bpw=£ÛBpw0 Bpr£Ý; Dpyw0=1; Dpyr=0; Dpyw=£ÛDpyw0 Dpyr£Ý; % error performance Cpz=Cpy; Dpzu=Dpyu; Dpzw=Dpyw-£Û0 1£Ý; % other performance nx=2; %״̬άÊý ny=1; %Êä³öάÊý sys=ss(Ap,Bpu,Cpy,Dpyu); %Used in lqi Q=£Û5 0 0;0 5 0;0 0 60£Ý; R1=0.001; N=0; K=lqi(sys,Q,R1,N); Kx=K(1:nx); Ki=K(nx+1:nx+ny); Plant=ss(Ap,£ÛBpu Bpw0£Ý,Cpy,£ÛDpyu Dpyw0£Ý); Qn=10;Rn=10;Nn=0; £Ûkalmf,L£Ý=kalman(Plant,Qn,Rn,Nn); Ac=£ÛAp-Bpu*Kx-L*Cpy+L*Dpyu*Kx -Bpu*Ki+L*Dpyu*Ki; zeros(ny,nx) zeros(ny,ny)£Ý; Bcy=£ÛL;-eye(ny)£Ý; Bcwr=£Ûzeros(nx,1);eye(ny)£Ý; Bcw=£Ûzeros(3,1) Bcwr£Ý; Cc=-K; Dcy=0; Dcw=£Û0 0£Ý; deltau=inv(eye(1)-Dcy*Dpyu); deltay=inv(eye(1)-Dpyu*Dcy); Acl=£ÛAp+Bpu*deltau*Dcy*Cpy Bpu*deltau*Cc; Bcy*deltay*Cpy Ac+Bcy*deltay*Dpyu*Cc£Ý; Cclz=£ÛCpz+Dpzu*deltau*Dcy*Cpy Dpzu*deltau*Cc£Ý; Cclu=£Ûdeltau*Dcy*Cpy deltau*Cc£Ý; Bclq=£Û-Bpu*deltau;-Bcy*deltay*Dpyu£Ý; Bclw=£ÛBpw+Bpu*deltau*(Dcw+Dcy*Dpyw);Bcw+Bcy*deltay*(Dpyw+Dpyu*Dcw)£Ý; Dclzq=-(Dpzu*deltau); Dclzw=Dpzw+Dpzu*deltau*(Dcw+Dcy*Dpyw); Dcluw=deltau*(Dcw+Dcy*Dpyw); Dcluq=eye(1)-deltau; Bclv=£Ûzeros(np,nc) Bpu*deltau; eye(nc) Bcy*deltay*Dpyu£Ý; Dclzv=£Ûzeros(nz,nc) Dpzu*deltau£Ý; Dcluv=£Ûzeros(nu,nc) deltau£Ý; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ga=sdpvar(1); R11=sdpvar(np); R12=sdpvar(np,nc); R22=sdpvar(nc); R=£ÛR11 R12;R12' R22£Ý; Openloop=£ÛR11*Ap'+Ap*R11 Bpw R11*Cpz';Bpw' -ga*eye(nw) Dpzw';Cpz*R11 Dpzw -ga*eye(nz)£Ý; Closedloop=£ÛR*Acl'+Acl*R Bclw R*Cclz';Bclw' -ga*eye(nw) Dclzw';Cclz*R Dclzw -ga*eye(nz)£Ý; F=set(Openloop<0)+set(Closedloop<0)+set(R>0); %First step, LMI to get R and gama solvesdp(F,ga); gama=double(ga); R=double(R) Q=R; U=sdpvar(nu); Au=sdpvar(naw+nv,naw+nu); ga=sdpvar(1); fai=£Û(Acl*R)+(Acl*R)' Bclq*U+Q*Cclu' Bclw Q*Cclz'; (Bclq*U+Q*Cclu')' Dcluq*U-U+(Dcluq*U-U)' Dcluw U*Dclzq'; Bclw' Dcluw' -ga*eye(nw) Dclzw'; (Q*Cclz')' (U*Dclzq')' Dclzw -ga*eye(nz)£Ý; % H1=£ÛBclv' zeros(naw,nv)£Ý; %naw=0 H1=Bclv'; H2=Dcluv'; H3=Dclzv'; H=£ÛH1 H2 zeros(naw+nv,nw) H3£Ý; % GU=£Ûzeros(naw,nu+nw+nz);zeros(nu,n) eye(nu) zeros(nu,nw+nz)£Ý; %naw=0 GU=£Ûzeros(nu,n) eye(nu) zeros(nu,nw+nz)£Ý; Mu=0; Stro=-2*(1-Mu)*U+(Dcluq*U+£Ûzeros(nu,nc) eye(nu)£Ý*Au)+(Dcluq*U+ £Ûzeros(nu,nc) eye(nu)£Ý*Au)'; Anti=fai+GU'*Au'*H+H'*Au*GU; Fa=set(Stro<0)+set(Anti<0); %Second step, LMI to get Au and UU solvesdp(Fa,ga); gama=double(ga) Au=double(Au); UU=double(U); Daw=Au*inv(UU) Daw1=Daw(1:2,:); Daw2=Daw(3,:); save anti_file Daw; (2) SimulinkÖ÷³ÌÐò£º chap5_2sim.mdl (3) ¿ØÖÆÆ÷³ÌÐò£º chap5_2ctrl.m % LQG controller with AW function £Ûsys,x0,str,ts£Ý=s_function(t,x,u,flag) switch flag, case 0, £Ûsys,x0,str,ts£Ý=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 3, sys=mdlOutputs(t,x,u); case {1,2, 4, 9 } sys = £Û£Ý; otherwise error(£Û'Unhandled flag = ',num2str(flag)£Ý); end function £Ûsys,x0,str,ts£Ý=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 3; sizes.NumDiscStates = 0; sizes.NumOutputs = 2; sizes.NumInputs = 5; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys=simsizes(sizes); x0=£Û0 0 0£Ý; str=£Û£Ý; ts=£Û0 0£Ý; function sys=mdlDerivatives(t,x,u) w=1.5*square(0.25*t); y=u(5); v1=£Ûu(1) u(2) u(3)£Ý'; %From chap5_1LQG.m Ac=£Û-0.0081 1.0000 0;-203.8428 -74.1936 244.9490; 000£Ý; Bcy=£Û0.0081;0.5;-1£Ý; Bcw=£Û00; 00; 01£Ý; sys(1:3)=Ac*x+Bcy*y+Bcw(:,2)*w+v1; function sys=mdlOutputs(t,x,u) w=1.5*square(0.25*t); v2=u(4); y=u(5); %From chap5_1LQG.m Cc=£Û-202.3428 -64.1936 244.9490£Ý; Dcy=0; Dcw=£Û0 0£Ý; xc=£Ûx(1) x(2) x(3)£Ý'; ut=Cc*xc+Dcy*y+Dcw(:,2)*w+v2; sys(1)=w; sys(2)=ut; (4) ²¹³¥³ÌÐò£º chap5_2cmp.m function £Ûsys,x0,str,ts£Ý=s_function(t,x,u,flag) switch flag, case 0, £Ûsys,x0,str,ts£Ý=mdlInitializeSizes; case 3, sys=mdlOutputs(t,x,u); case {2, 4, 9 } sys = £Û£Ý; otherwise error(£Û'Unhandled flag = ',num2str(flag)£Ý); end function £Ûsys,x0,str,ts£Ý=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 4; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 0; sys=simsizes(sizes); x0=£Û£Ý; str=£Û£Ý; ts=£Û£Ý; function sys=mdlOutputs(t,x,u) persistent Daw if t==0 load anti_file; %Daw end %Daw =£Û 0.0038 -0.0395 -0.0118 0.9990£Ý; q=u(1); v=Daw*q; sys(1:4)=v; (5) ±»¿Ø¶ÔÏó³ÌÐò£º chap5_2plant.m function £Ûsys,x0,str,ts£Ý=s_function(t,x,u,flag) switch flag, case 0, £Ûsys,x0,str,ts£Ý=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 3, sys=mdlOutputs(t,x,u); case {2, 4, 9 } sys = £Û£Ý; otherwise error(£Û'Unhandled flag = ',num2str(flag)£Ý); end function £Ûsys,x0,str,ts£Ý=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 2; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1; sys=simsizes(sizes); x0=£Û0 0£Ý; str=£Û£Ý; ts=£Û0 0£Ý; function sys=mdlDerivatives(t,x,u) ut=u(1); wn=0;%0.001*randn(1,100); Ap=£Û0 1;-1 -10£Ý; Bpu=£Û0;1£Ý; Cpy=£Û1 0£Ý; Dpyu=0; Bpw0=Bpu; sys(1:2)=Ap*x+Bpu*ut+Bpw0*wn; function sys=mdlOutputs(t,x,u) Cpy=£Û1 0£Ý; Dpyw0=1; vn=0;%0.0001*randn(1,100); sys=Cpy*x+Dpyw0*vn; %th (6) ×÷ͼ³ÌÐò£º chap5_2plot.m close all; figure(1); plot(t,w,'-.r',t,y1,'k','linewidth',2); xlabel('time(s)');ylabel('x1 response'); figure(2); plot(t,ut(:,1),'r','linewidth',2); xlabel('time(s)');ylabel('Control input'); ²Î¿¼ÎÄÏ× £Û1£ÝZaccarian L, Teel A R. Modern antiª²windup synthesis: control augmentation for actuator saturation£ÛM£Ý. Princeton: Princeton University Press, 2011. £Û2£ÝGrimm G, Hatfield J, Postlethwaite I, et al. Antiwindup for stable linear systems with input saturation: an LMIª²based synthesis£ÛJ£Ý. IEEE Transactions on Automatic Control , 2003,48(9): 1509ª²1525. £Û3£ÝAilon A. Simple tracking controllers for autonomous VTOL aircraft with bounded inputs£ÛJ£Ý. IEEE Transactions on Automatic Control, 2010,55(3):737ª²743. £Û4£ÝWen C Y, Zhou J, Liu Z T, et al. Robust adaptive control of uncertain nonlinear systems in the presence of input saturation and external disturbance£ÛJ£Ý. IEEE Transactions on Automatic Control, 2011, 56(7): 1672ª²1678. £Û5£ÝHu T S, Teel A, Zaccarian L. Stability and performance for saturated systems via quadratic and nonª²quadratic lyapunov functions£ÛJ£Ý. IEEE Transactions on Automatic Control, 2006,51(3): 1770ª²1786.