function [name,T,y,u,ys,us,J,T1,du,dus] = ppp_ex12 (ReturnName) ## usage: [name,T,y,u,ys,us,T1,du,dus] = ppp_ex12 (ReturnName) ## ## PPP example - shows input derivative constraints ## $Id$ ## Example name name = "Input derivative constraints +-1 on u* at tau=0,0.5,1,1.5,2"; if nargin>0 return endif ## System A = [-3 -3 -1 1 0 0 0 1 0]; B = [1 0 0]; C = [0 -0.5 1]; D = 0; [n_x,n_u,n_y] = abcddim(A,B,C,D) ## Controller t = [4:0.02:5]; # Time horizon A_w = 0; # Setpoint A_u = ppp_aug(laguerre_matrix(3,2.0), A_w); # Input functions Q = ones(n_y,1);; ## Constaints - du*/dtau Tau = [0:0.5:2]; one = ones(size(Tau)); limit = 1; Min = -limit*one; Max = limit*one; Order = one; [Gamma,gamma] = ppp_input_constraint (A_u,Tau,Min,Max,Order); W=1; x_0 = zeros(3,1); ## Constrained - open-loop [k_x,k_w,K_x,K_w,Us0,J_uu,J_ux,J_uw] = ppp_lin (A,B,C,D,A_u,A_w,t,Q); [u,U] = ppp_qp (x_0,W,J_uu,J_ux,J_uw,Us0,Gamma,gamma); T = [0:t(2)-t(1):t(length(t))]; [ys,us] = ppp_ystar(A,B,C,D,x_0,A_u,U,T); ## Non-linear - closed-loop [T,y,u,J] = ppp_qp_sim (A,B,C,D,A_u,A_w,t,Q, \ Tau,Min,Max,Order, \ [],[],[],[], W,x_0); title("y,y*,u and u*"); xlabel("t"); grid; plot(T,y,T,u,T,ys,T,us); ## Compute derivatives. dt = t(2)-t(1); du = diff(u)/dt; dus = diff(us)/dt; T1 = T(1:length(T)-1); ##plot(T1,du,T1,dus); endfunction