Overview
Comment: | Updated for new PPP |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | origin/master | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a6be83f05796746b98ea6d145ef98b2a |
User & Date: | gawthrop@users.sourceforge.net on 2005-09-07 18:30:36 |
Other Links: | branch diff | manifest | tags |
Context
2005-09-07
| ||
18:31:40 | Updated check-in: df2c33dea2 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
18:30:36 | Updated for new PPP check-in: a6be83f057 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
18:29:33 | Use ss not sys2ss check-in: 79bceb1078 user: gawthrop@users.sourceforge.net tags: origin/master, trunk | |
Changes
Modified mttroot/mtt/lib/control/PPP/ppp_are.m from [61fa06621b] to [fabd8baa32].
︙ | ︙ | |||
24 25 26 27 28 29 30 | if n_q==n_y # Output weight Q_x = C'*Q*C; # Weighting on x elseif n_q==n_x # State weight Q_x = Q; else error(sprintf("Q (%ix%i) must be %ix%i or %ix%i",n_q,n_q,n_y,n_y,n_x,n_x)); endif | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | if n_q==n_y # Output weight Q_x = C'*Q*C; # Weighting on x elseif n_q==n_x # State weight Q_x = Q; else error(sprintf("Q (%ix%i) must be %ix%i or %ix%i",n_q,n_q,n_y,n_y,n_x,n_x)); endif [k, P, poles] = lqr (A, B, Q_x, R); # Algebraic Riccati solution ## Basis functions if strcmp(A_type,"companion") A_u = compan(poly(poles)); elseif strcmp(A_type,"feedback") A_u = A-B*k; else |
︙ | ︙ |
Modified mttroot/mtt/lib/control/PPP/ppp_ustar2h.m from [07b58f747a] to [ec1d4f0005].
|
| | > > > > | > > | 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 | function ppp_ustar2h (Ustar,DT,name) ## usage: ppp_Ustar2h (Ustar[,name]) ## ## if nargin<2 DT = 1; endif if nargin<3 name = "Ustar"; endif [N,N_U] = size(Ustar); ## Open the file filename = sprintf("%s.h", name); fid = fopen(filename,"w"); ## Header header = sprintf("/*\n File %s generated by ppp_ustar2h on %s */\n", \ filename, ctime(time)); def = sprintf("#define N_U %i\n#define N_T %i\n#define DT %g\n", \ N_U, N, DT); def = sprintf("%sdouble U[N_U];\n",def); fprintf(fid, "%s%sdouble %s[N_T][N_U] = {\n",header,def,name); for i=1:N fprintf(fid, "{"); for j=1:N_U if j<N_U comma = ","; |
︙ | ︙ |
Modified mttroot/mtt/lib/control/PPP/ppp_ystar.m from [17c1b7c256] to [0c38479f43].
|
| | | > > | < | 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 39 40 41 42 43 44 45 46 47 48 49 | function [ys,us,xs,xu,AA] = ppp_ystar (A,B,C,D,x_0,A_u,U,tau,Us0) ## usage: [ys,us,xs,xu,AA] = ppp_ystar (A,B,C,D,x_0,A_u,U,tau[,Us0]) ## ## Computes open-loop moving horizon variables at time tau ## Inputs: ## A,B,C,D System matrices ## x_0 Initial state ## A_u composite system matrix for U* generation ## one square matrix (A_ui) row for each system input ## each A_ui generates U*' for ith system input. ## OR ## A_u square system matrix for U* generation ## same square matrix for each system input ## U Column vector of optimisation coefficients ## tau Row vector of times at which outputs are computed ## Us0 Initial value of U* (default ones(NU,1)) ## Outputs: ## ys y*, one column for each time tau ## us u*, one column for each time tau ## xs x*, one column for each time tau ## xu x_u, one column for each time tau ## AA The composite system matrix ## Copyright (C) 1999,2005 by Peter J. Gawthrop ## $Id$ if (size(A)>0) [n_x,n_u,n_y] = abcddim(A,B,C,D); # System dimensions else n_x = 0; n_y = 0; n_u = 0; endif no_system = n_x==0; [n,m] = size(A_u); # Size of composite A_u matrix square = (n==m); # Is A_u square? n_U = m; # functions per input [n,m] = size(U); if (m != 1) error("U must be a column vector"); endif if n_u>0 if n_u!=length(U)/n_U |
︙ | ︙ | |||
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 | endif [n,m]=size(tau); if (n != 1 ) error("tau must be a row vector of times"); endif if square # Then same A_u for each input ## Reorganise vector U into matrix Utilde Utilde = []; for i=1:n_u j = (i-1)*n_U; range = j+1:j+n_U; Utilde = [Utilde; U(range,1)']; endfor ## Composite A matrix if no_system AA = A_u; else Z = zeros(n_U,n_x); AA = [A B*Utilde Z A_u]; endif | > > > > > > > > > > | | 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 | endif [n,m]=size(tau); if (n != 1 ) error("tau must be a row vector of times"); endif if nargin<9 Us0 = ones(1,n_U); endif [n_Us0,m_Us0] = size(Us0); if (n_Us0>1)||(n_Us0>m_Us0) error(sprintf("Us0 must be a row vector, not %ix%i ",n_Us0,m_Us0)); endif if square # Then same A_u for each input ## Reorganise vector U into matrix Utilde Utilde = []; for i=1:n_u j = (i-1)*n_U; range = j+1:j+n_U; Utilde = [Utilde; U(range,1)']; endfor ## Composite A matrix if no_system AA = A_u; else Z = zeros(n_U,n_x); AA = [A B*Utilde Z A_u]; endif xx_0 = [x_0;Us0']; # Composite initial condition else # Different A_u on each input ## Reorganise vector U into matrix Utilde Utilde = []; for i=1:n_u j = (i-1)*n_U; k = (n_u-i)*n_U; range = j+1:j+n_U; |
︙ | ︙ |