Overview
| Comment: | augment option - constant term in basis |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | origin/master | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
f5f8cb8a8104641fb4d88bbcc771593d |
| User & Date: | gawthrop@users.sourceforge.net on 2003-10-06 08:36:44.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
2003-10-06
| ||
| 09:15:32 | Revised for RTlab check-in: c43f9e9fc7 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 08:36:44 | augment option - constant term in basis check-in: f5f8cb8a81 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 08:22:55 | Removed y_u arg from ppp_lin_quad check-in: dd760bdfd4 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/lib/control/PPP/ppp_lin_quad.m
from [c0426fddbf]
to [2ba9cc3698].
1 | function [k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww,A_u] = \ | | > > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function [k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww,A_u] = \
ppp_lin_quad (A,B,C,D,tau,Q,R,augment)
## usage:[k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww,A_u] =
## ppp_lin_quad (A,B,C,D,tau,Q,R)
##
##
## Steady-state Linear Quadratic solution
## using Algebraic Riccati equation (ARE)
[P,A_u,A_w] = ppp_are (A,B,C,D,Q,R);
## Augment with a constant term
if augment
A_u = ppp_aug(0,A_u);
endif
## PPP solution
[k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww] = \
ppp_lin(A,B,C,D,A_u,A_w,tau,Q,R,P);
endfunction
|
Modified mttroot/mtt/lib/control/PPP/ppp_lin_run.m
from [b26b35c63c]
to [39b3104ab9].
| ︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
if !struct_contains(p_c,"delta_ol")
p_c.delta_ol = 1.0; # OL sample interval
endif
if !struct_contains(p_c,"T")
p_c.T = 10.0; # Last time point.
endif
if !struct_contains(p_c,"Method")
p_c.Method = "lq";
endif
if struct_contains(p_c,"Method")
if strcmp(p_c.Method,"lq")
p_c.Q = eye(n_y);
p_c.R = (0.25^2)*eye(n_u);
p_c.n_U = n_x;
elseif strcmp(p_c.Method,"original");
if !struct_contains(p_c,"A_w")
p_c.A_w = 0;
endif
if !struct_contains(p_c,"A_u")
p_c.n_U = n_x;
a_u = 2.0;
| > > > > | > > > | | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
if !struct_contains(p_c,"delta_ol")
p_c.delta_ol = 1.0; # OL sample interval
endif
if !struct_contains(p_c,"T")
p_c.T = 10.0; # Last time point.
endif
if !struct_contains(p_c,"augment")
p_c.augment = 1; # Augment basis funs with contand
endif
if !struct_contains(p_c,"Method")
p_c.Method = "lq";
endif
if struct_contains(p_c,"Method")
if strcmp(p_c.Method,"lq")
p_c.Q = eye(n_y);
p_c.R = (0.25^2)*eye(n_u);
p_c.n_U = n_x;
elseif strcmp(p_c.Method,"original");
if !struct_contains(p_c,"A_w")
p_c.A_w = 0;
endif
if !struct_contains(p_c,"A_u")
p_c.n_U = n_x;
a_u = 2.0;
p_c.A_u = laguerre_matrix(p_c.n_U,a_u);
if p_c.augment # Put in constant term
A_u = ppp_aug(0,A_u);
endif
endif
else
error(sprintf("Method %s not recognised", p_c.Method));
endif
endif
if !struct_contains(p_o,"x_0")
p_o.x_0 = zeros(n_x,1);
endif
if !struct_contains(p_o,"method")
##p_o.method = "continuous";
p_o.method = "intermittent";
endif
## Check w.
[n_w,m_w] = size(w);
if ( (n_w!=n_y) || (m_w!=1) )
error(sprintf("ppp_lin_run: w must a column vector with %i elements",n_y));
|
| ︙ | ︙ | |||
114 115 116 117 118 119 120 |
U = K_w*w; # Initial control U
else
I = ceil(p_c.T/p_c.delta_ol) # Number of large samples
if strcmp(p_c.Method, "original")
tau = [10:0.1:11]*(2/a_u); # Time horizons
[k_x,k_w,K_x,K_w] = ppp_lin(A,B,C,D,p_c.A_u,p_c.A_w,tau); # Design
elseif strcmp(p_c.Method, "lq") # LQ design
| | | | < | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
U = K_w*w; # Initial control U
else
I = ceil(p_c.T/p_c.delta_ol) # Number of large samples
if strcmp(p_c.Method, "original")
tau = [10:0.1:11]*(2/a_u); # Time horizons
[k_x,k_w,K_x,K_w] = ppp_lin(A,B,C,D,p_c.A_u,p_c.A_w,tau); # Design
elseif strcmp(p_c.Method, "lq") # LQ design
tau = [0:0.1:2.0]*1; # Time horizons
[k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww,A_u] \
= ppp_lin_quad (A,B,C,D,tau,p_c.Q,p_c.R,p_c.augment);
p_c.A_u = A_u;
else
error(sprintf("Control method %s not recognised", p_c.Method));
endif
##Sanity check A_u
[p_c.n_U,M_u] = size(p_c.A_u);
if (p_c.n_U!=M_u)
error("A_u must be square");
endif
U = K_w*w; # Initial control U
## Checks
[ol_zeros, ol_poles] = sys2zp(sys)
cl_poles = eig(A - B*k_x)
endif
## Short sample interval
|
| ︙ | ︙ |