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

📄 gpvar.m

📁 HERE IS A GOOD PSO TOOL BOX
💻 M
字号:
function obj = gpvar(varargin)% GPVAR is a GP variable class constructor.%%	You can define multiple scalar GPVARs using:%	  gpvar x y z %%	You can define GPVAR arrays using:%	  gpvar x(10)%	which creates array of 10 gpvars with (print) labels x_1,...,x_10.%%	You can also make assignments such as:%	  gpvar x(10) y(100) z%%	Another calling sequence for GP variable (or array) definition is:%	  x = gpvar(1,'x')%	  x = gpvar(100,'x')%	where you need to specify variable label as a string.%if nargin == 0  % no argument: do not create anything   help gpvar   returnend% check if have multiple scalar declarations or arrayif ischar(varargin{1})  for k = 1:length(varargin)    varstr = varargin{k};    % parse for array declarations    match = find( varstr == '(' );    if isempty( match )      varname = varstr;      varsize = 1;    elseif( varstr( end ) ~= ')' )      error(['Invalid variable specification: ' varstr]);    else      varname = varstr( 1 : match(1)-1 );      varsize = varstr( match(1)+1 : end-1 );      varsize = evalin('caller', varsize);            if ~isnumeric( varsize )        error('gpvar array dimension should be a numeric value.');      end    end    if ~isvarname( varname )      error(['Not a valid variable name: ' varname]);    end    assignin('caller', varname, gpvar(varsize,varname));  end  returnend% GP variable constructionswitch nargin  case 1    % copy constructor    if isa(varargin{1},'gpvar')      obj = varargin{1};      return    end    % if a numeric value is passed to gpvar, then give an error     if isnumeric(varargin{1})      error(['Cannot cast a numeric value into a GP variable.' ...             char(10) char(10) ...             'You can do that with monomials, posynomials, and generalized ' ...             'posynomials.' char(10) ...             'If you are building an array of GP functions, then cast your '...             'single GP variables' char(10) ...             'as monomials (e.g., if x is a gpvar, use x^1 or monomial(x)).']);    end  case 2    N = varargin{1};    if( N == 1 ) % create a scalar GP variable      obj.label = varargin{2};      obj = class(obj,'gpvar');    else % create a GP array      if( N >= 1000000 )        error(['You are not allowed to create an array with a million ' ...                'or more GP variables.']);      end      obj = [];      for n = 1:N        if(     n < 10  ),     numstr = ['00000' num2str(n)];        elseif( n < 100 ),     numstr = ['0000'  num2str(n)];        elseif( n < 1000 ),    numstr = ['000'   num2str(n)];        elseif( n < 10000 ),   numstr = ['00'    num2str(n)];        elseif( n < 100000 ),  numstr = ['0'     num2str(n)];        else                   numstr = num2str(n);        end        obj(n).label = [varargin{2} '__array__' numstr];      end        obj = obj'; % make it a vector array      obj = class(obj,'gpvar');    end   otherwise    error('Wrong number of input arguments')end

⌨️ 快捷键说明

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