Mercurial > octave-nkf
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. |