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

📄 pleas.m

📁 maltab优化工具箱的一些小例子 主要介绍最优化的相关知识 欢迎大家共同探讨
💻 M
字号:
function [INLP,ILP] = pleas(funlist,NLPstart,xdata,ydata,options)% pleas: partitioned nonlinear least squares estimation% usage: [INLP,ILP] = pleas(funlist,NLPstart,xdata,ydata)% usage: [INLP,ILP] = pleas(funlist,NLPstart,xdata,ydata,options)%% arguments: (input)%  funlist - cell array of functions comprising the nonlinear parts%            of each term in the model. Each independent function in%            this list must transform xdata using a vector of intrinsicly%            nonlinear parameters into an array of the same size and%            shape as ydata. The arguments to each function will be in%            the order (coef,xdata).%%            These functions may be%             - scalar (double) constants (E.g., 1)%             - anonymous functions%             - inline functions%             - character function names%%  NLPstart - vector of starting values for the intrinsicly nonlinear%            parameters only.%%  xdata   - array of independent variables%            %  ydata   - array of dependent variable data%%  options - options structure appropriate for lsqnonlin%%% arguments (output)%  INLP - optimized list of intrinsicly nonlinear parameters%%  ILP  - optimized list of intrinsicly linear parameters %%% Example usage:%  Fit a simple exponential model plus a constant term to data%%   x = rand(100,1);%   y = 4 - 3*exp(2*x) + randn(size(x));%%   funlist = {1, @(xdata,coef) exp(xdata*coef)};%   NLPstart = 1;%   options = optimset('disp','iter');%   [INLP,ILP] = pleas(funlist,NLPstart,x,y,options)%% Output:%                                          Norm of      First-order %  Iteration  Func-count     f(x)          step          optimality   CG-iterations%     0          2         116.796                          40.5%     1          4         74.6378        1.00406            2.6            1%     2          6         74.4382      0.0758513         0.0443            1%     3          8         74.4381     0.00131311       0.000597            1% Optimization terminated: relative function value%  changing by less than OPTIONS.TolFun.%% INLP =%    2.0812%% ILP =%    3.6687%   -2.7327% Check the functionsif ~iscell(funlist)  error 'funlist must be a cell array of functions, even if only one fun'endnfun=length(funlist);for i = 1:nfun  fi = funlist{i};    % There are two cases where we need to turn the supplied  % function into an executable function  if isa(fi,'double')    % a constant    funlist{i} = @(xdata,coef) repmat(fi,size(ydata));  elseif ischar(fi)    % a character function name    funlist{i} = str2func(fi);  endend% were any options supplied?if (nargin<5) || isempty(options)  options = optimset('lsqnonlin');end% make sure that ydata is a column vectorydata = ydata(:);ny = length(ydata);% ================================================% =========== begin nested function ==============% ================================================function [res,ILP] = pleas_obj(INLP)  % nested objective function for lsqnonlin, so all  % the data and funs from pleas are visible to pleas_obj    % loop over funlist  A = zeros(ny,nfun);  for i=1:nfun    fi = funlist{i};    term = fi(INLP,xdata);    A(:,i) = term(:);  end    % do the linear regression using \  ILP = A\ydata;    % residuals for lsqnonlin  res = A*ILP - ydata;  end % nested function termination% ================================================% ============= end nested function ==============% ================================================% call lsqnonlin, using a nested function handleLB=[];UB=[];INLP = lsqnonlin(@pleas_obj,NLPstart,LB,UB,options);% call one final time to get the final linear parameters[junk,ILP] = pleas_obj(INLP);end % main function terminator

⌨️ 快捷键说明

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