⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contr.m

📁 非线性控制 Matlab编译
💻 M
字号:
function u=contr(y,goaly, goalu, mode,ampl,niter,m,mc,nd, neighbors)% U=CONTR(Y, GOALY, GOALU, MODE, AMPL, NITER, N, NC, D, NEIGHBORS)% Multiple-Input-Multiple-Output adaptive, nonlinear controller.% returns U - controlling perturbations (column vector NUx1)% upon receving system output Y (column vector NYx1).% The controller objective is set in the vector GOALY (NYx1) of desired % system outputs.  Setting it to Inf is equivalent to setting (diff(Y)=0),% convenient for steady state stabilization when the exact position of the% steady state is unknown.% GOALU sets the goal values of the controller outputs.  Setting it to Inf% causes the controller to move the system to GOALY values, while diff(U)=0.% NOTE: Setting both GOALY and GOALU to Inf doesn't make sense;% set them both to real values if they are available. %%   MODE:0-identification stage:  the controller just applies random%      perturbations%      and collects system responses. AMPL (NUx1) sets the amplitude of%      identification perturbations vector. %      The controller will switch to mode 1 after collecting NITER readings,%	 1-control of the objective state. %	 2-adaptive control:  controlling perturbations are superimposed%           with random excitations (amlitude AMPL). %           Last NITER responses are stored and used.%   AMPL - NUx1 vector, sets the amplitude of identification perturbation%        or maximum allowed perturbations in MODE 1.%   IMPORTANT! Perturbations have to be scaled such that the characteristic%   amplitudes of perturbations and observations are the same. %   This is due to the simple Euclidian distance measure used for the nearest%   neighbors selection. %%   NITER - sets the length of the identification sequence; make it at least% 20*DIM^2 (DIM - dimensionality of the system). It has to be considerably% larger than NEIGHBORS.% Controller parameters:%   N - length of time-delayed/forwarded signals for system state%       reconstruction, usually N =(>) DIM/NY. %   NC - length of the controlling sequence, usually NC =(<) DIM/NU%   D - delay time before applied perturbations reach the system%       output. D = 0 will always work but the controller will not be optimal.%   NEIGHBORS - number of nearest neighbors in the phase space used%   for the linear interpolation of the control surface. It has to be at%   least 10*DIM% N, NC, and D determine the structure of the controller and have to be set% either on the basis of knowledge of the controlled system, or by trial% and error. It is best to start with N ~ expected dimensionality/NY, NC=N, D=0% Setting N to be more than 10 may require too many data points% before the algorithm will be usable.% Requires: idseq.m - forms vector of state transitions%	    linint.m - a linear hypersurface interpolator (vector form)%	    delaysig2.m - an extended version of delaysig.m%	    ctrseq.m - forms vector of transition to the objective% Written by V. Petrov, 1998% e-mail: vpetrov@cybernet.mit.edu%% Copyright (c) 1998 The University of Texas at Austinglobal XX UU P T K ua;ccase=0;if(sum(isinf(goaly))) ccase=1; goaly=0*ones(size(y,1),1);endif(sum(isinf(goalu))) ccase=2; goalu=0*ones(size(ampl,1),1);endli=mc+2*m+2*nd+1;  %Number of most recent records to keepif (length(K)==0)  K=0; ua=0*ones(size(ampl)); XX=0*ones(size(y))*ones(1,li); UU=0*ones(size(ampl))*ones(1,li);endK = K+1;%%%%%%%%%%%%%%%%% Build the reference set %%%%%%%%%%%%%%%%%%%  XX(:,1:li-1)=XX(:,2:li); UU(:,1:li-1)=UU(:,2:li); XX(:,li)=y; UU(:,li) = ua;% Rearrange the data to construct the hypersurfaceif ( K > li ) if (length(P) == 0)  %If first time, create P and T  [P,T]=idseq(XX,UU,m,mc,nd,ccase);  P=P(:,size(P,2));    T=T(:,size(T,2)); else  [P2,T2]=idseq(XX,UU,m,mc,nd,ccase);  if (size(P,2) < niter )   P=[P P2(:,size(P2,2))];  % Add the last measurement   T=[T T2(:,size(T2,2))];  else % If NITER recordings are made   if (mode == 0) mode=1; end   if (mode == 2) %% If in adaptive regime, remove from the begining, add to the end %%%    P=[P(:,2:niter) P2(:,size(P2,2))];      T=[T(:,2:niter) T2(:,size(T2,2))];   end  end end if (mode > 0 )  %Create present-target state vector for control  PC=ctrseq(XX,UU,goaly, goalu, m,mc,nd, ccase); endend% Identificationif (mode == 0 )   u=ampl.*randn(size(ampl));endif (mode > 0 )     u=linint(P,T,PC,neighbors);endif (mode == 2 )   u=u+ampl.*randn(size(ampl));endif (mode == 1 )   in=find((abs(u)-ampl)>0);  %Find if any of the perturbations exceed the limit  if (length(in) > 0)   u(in)=sign(u(in)).*ampl(in); %Restrict large perturbations  endendua = u;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -