Overview
| Comment: | Added "test" parameter to call to qp_mu. (Adrian's QP interior point alg.) |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | origin/master | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
e495f1f8c5f697c3a0b53895c77bdc28 |
| User & Date: | gawthrop@users.sourceforge.net on 2002-11-04 23:41:41.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
2002-11-06
| ||
| 21:09:45 | New operational amplifier component check-in: 043231dc86 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
|
2002-11-04
| ||
| 23:41:41 | Added "test" parameter to call to qp_mu. (Adrian's QP interior point alg.) check-in: e495f1f8c5 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
| 23:40:04 | Prunes inf and -inf from constraint list. check-in: 71ec8badbf user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/lib/control/PPP/ppp_qp.m
from [7d027370b3]
to [fa82338072].
|
| | | 1 2 3 4 5 6 7 8 | function [u,U,iterations] = ppp_qp (x,W,J_uu,J_ux,J_uw,Us0,Gamma,gamma,mu,test) ## usage: [u,U] = ppp_qp (x,W,J_uu,J_ux,J_uw,Gamma,gamma) ## INPUTS: ## x: system state ## W: Setpoint vector ## J_uu,J_ux,J_uw: Cost derivatives (see ppp_lin) ## Us0: value of U* at tau=0 (see ppp_lin) |
| ︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
## Copyright (C) 1999 by Peter J. Gawthrop
## $Id$
if nargin<9
mu = 0
endif
## Check the sizes
n_x = length(x);
[n_U,m_U] = size(J_uu);
if n_U != m_U
error("J_uu must be square");
endif
[n,m] = size(J_ux);
if (n != n_U)||(m != n_x)
error("J_ux should be %ix%i not %ix%i",n_U,n_x,n,m);
endif
if length(gamma)>0 # Constraints exist: do the QP algorithm
## QP solution for weights U
| > > > > | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
## Copyright (C) 1999 by Peter J. Gawthrop
## $Id$
if nargin<9
mu = 0
endif
if nargin<10
test=0;
endif
## Check the sizes
n_x = length(x);
[n_U,m_U] = size(J_uu);
if n_U != m_U
error("J_uu must be square");
endif
[n,m] = size(J_ux);
if (n != n_U)||(m != n_x)
error("J_ux should be %ix%i not %ix%i",n_U,n_x,n,m);
endif
if length(gamma)>0 # Constraints exist: do the QP algorithm
## QP solution for weights U
[U,iterations] = qp_mu(J_uu,(J_ux*x - J_uw*W),Gamma,gamma,mu,[],[],0,test);
##U = qp(J_uu,(J_ux*x - J_uw*W),Gamma,gamma); # QP solution for weights U
##U = pd_lcp04(J_uu,(J_ux*x - J_uw*W),Gamma,gamma); # QP solution for weights U
u = Us0*U; # Control signal
else # Do the unconstrained solution
## Compute the open-loop gains
iterations = 0;
|
| ︙ | ︙ |
Modified mttroot/mtt/lib/control/PPP/ppp_qp_sim.m
from [986b2d0d8d]
to [9da3cf8d4e].
1 2 3 | function [T,y,u,X,Iterations] = ppp_qp_sim (A,B,C,D,A_u,A_w,t,Q,\ Tau_u,Min_u,Max_u,Order_u, \ Tau_y,Min_y,Max_y,Order_y, \ | | | | > > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function [T,y,u,X,Iterations] = ppp_qp_sim (A,B,C,D,A_u,A_w,t,Q,\
Tau_u,Min_u,Max_u,Order_u, \
Tau_y,Min_y,Max_y,Order_y, \
W,x_0,Delta_ol,mu,test,movie)
## usage: [T,y,u,J] = ppp_qp_sim (A,B,C,D,A_u,A_w,t,Q, Tau_u,Min_u,Max_u,Order_u, Tau_y,Min_y,Max_y,Order_y, W,x_0,movie)
## Needs documentation - see ppp_ex11 for example of use.
## OUTPUTS
## T: Time vector
## y,u,J output, input and cost
## Copyright (C) 1999 by Peter J. Gawthrop
## $Id$
if nargin<19 # No intermittent control
Delta_ol = 0;
endif
if nargin<20 # Mu
mu = 0;
endif
if nargin<21
test=0
endif
if nargin<22 # No movie
movie = 0;
endif
test = test
## Check some sizes
[n_x,n_u,n_y] = abcddim(A,B,C,D);
[n_x0,m_x0] = size(x_0);
if (n_x0 != n_x)||(m_x0 != 1)
error(sprintf("Initial state x_0 must be %ix1 not %ix%i",n_x,n_x0,m_x0));
endif
|
| ︙ | ︙ | |||
109 110 111 112 113 114 115 |
Gamma = [Gamma_u; Gamma_y];
gamma = [gamma_u; gamma_y];
## Current Setpoint value
w = W(:,floor(t/dt)+1);
## Compute U(t) via QP optimisation
| | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
Gamma = [Gamma_u; Gamma_y];
gamma = [gamma_u; gamma_y];
## Current Setpoint value
w = W(:,floor(t/dt)+1);
## Compute U(t) via QP optimisation
[uu, U, iterations] = ppp_qp (x,w,J_uu,J_ux,J_uw,Us0,Gamma,gamma,mu,test); # Compute U
## Compute the cost (not necessary but maybe interesting)
# [J_t] = ppp_cost (U,x,W,J_uu,J_ux,J_uw,J_xx,J_xw,J_ww); # cost
# J = [J J_t];
## OL Simulation (exact)
[ys,us,xs] = ppp_ystar (A,B,C,D,x,A_u,U,T_ol);
|
| ︙ | ︙ |