comparison scripts/control/hinf/hinfsyn_chk.m @ 7125:f084ba47812b

[project @ 2007-11-08 02:29:23 by jwe]
author jwe
date Thu, 08 Nov 2007 02:29:24 +0000
parents a1dbe9d80eee
children a184bc985c37
comparison
equal deleted inserted replaced
7124:d07cb867891b 7125:f084ba47812b
78 ## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu> 78 ## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
79 ## Created: August 1995 79 ## Created: August 1995
80 80
81 function [retval, Pc, Pf] = hinfsyn_chk (A, B1, B2, C1, C2, D12, D21, g, ptol) 81 function [retval, Pc, Pf] = hinfsyn_chk (A, B1, B2, C1, C2, D12, D21, g, ptol)
82 82
83 if (nargin != 9)
84 print_usage ();
85 endif
86
83 Pc = Pf = []; 87 Pc = Pf = [];
84 88
85 ## Construct the two Hamiltonians 89 ## Construct the two Hamiltonians
86 g2 = 1/(g*g); 90 g2 = 1/(g*g);
87 Hc = [ A , g2*B1*B1' - B2*B2'; -C1'*C1 , -A']; 91 Hc = [ A , g2*B1*B1' - B2*B2'; -C1'*C1 , -A'];
88 Hf = [ A' , g2*C1'*C1 - C2'*C2; -B1*B1' , -A]; 92 Hf = [ A' , g2*C1'*C1 - C2'*C2; -B1*B1' , -A];
89 93
90 ## check if Hc, Hf are in dom(Ric) 94 ## check if Hc, Hf are in dom(Ric)
91 Hcminval = min(abs(real(eig(Hc)))); 95 Hcminval = min (abs (real (eig (Hc))));
92 Hfminval = min(abs(real(eig(Hf)))); 96 Hfminval = min (abs (real (eig (Hf))));
93 if(Hcminval < ptol); 97 if (Hcminval < ptol);
94 disp("hinfsyn_chk: Hc is not in dom(Ric)"); 98 warning ("hinfsyn_chk: Hc is not in dom(Ric)");
95 retval = 0; 99 retval = 0;
96 return 100 return
97 endif 101 endif
98 if(Hfminval < ptol) 102 if(Hfminval < ptol)
99 disp("hinfsyn_chk: Hf is not in dom(Ric)"); 103 warning ("hinfsyn_chk: Hf is not in dom(Ric)");
100 retval = 0; 104 retval = 0;
101 return 105 return
102 endif 106 endif
103 107
104 ## Solve ARE's 108 ## Solve ARE's
105 Pc = are(A, B2*B2'-g2*B1*B1',C1'*C1); 109 Pc = are (A, B2*B2'-g2*B1*B1', C1'*C1);
106 Pf = are(A',C2'*C2-g2*C1'*C1,B1*B1'); 110 Pf = are (A', C2'*C2-g2*C1'*C1, B1*B1');
107 111
108 Pceig = eig(Pc); 112 Pceig = eig (Pc);
109 Pfeig = eig(Pf); 113 Pfeig = eig (Pf);
110 Pcfeig = eig(Pc*Pf); 114 Pcfeig = eig (Pc*Pf);
111 115
112 if(min(Pceig) < -ptol) 116 if (min (Pceig) < -ptol)
113 disp("hinfsyn_chk: Pc is not >= 0"); 117 warning ("hinfsyn_chk: Pc is not >= 0");
114 retval = 0; 118 retval = 0;
115 return 119 return
116 endif 120 endif
117 if(min(Pfeig) < -ptol) 121 if (min (Pfeig) < -ptol)
118 disp("hinfsyn_chk: Pf is not >= 0"); 122 warning ("hinfsyn_chk: Pf is not >= 0");
119 retval = 0; 123 retval = 0;
120 return 124 return
121 endif 125 endif
122 if(max(abs(Pcfeig)) >= g*g) 126 if (max (abs (Pcfeig)) >= g*g)
123 disp("hinfsyn_chk: rho(Pf*Pc) is not < g^2"); 127 warning ("hinfsyn_chk: rho(Pf*Pc) is not < g^2");
124 retval = 0; 128 retval = 0;
125 return 129 return
126 endif 130 endif
127 131
128 ## all conditions met. 132 ## all conditions met.