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

📄 predictor.m

📁 Kriging插值工具箱
💻 M
字号:
function  [y, or1, or2, dmse] = predictor(x, dmodel)%PREDICTOR  Predictor for y(x) using the given DACE model.%% Call:   y = predictor(x, dmodel)%         [y, or] = predictor(x, dmodel)%         [y, dy, mse] = predictor(x, dmodel) %         [y, dy, mse, dmse] = predictor(x, dmodel) %% Input% x      : trial design sites with n dimensions.  %          For mx trial sites x:%          If mx = 1, then both a row and a column vector is accepted,%          otherwise, x must be an mx*n matrix with the sites stored%          rowwise.% dmodel : Struct with DACE model; see DACEFIT%% Output% y    : predicted response at x.% or   : If mx = 1, then or = gradient vector/Jacobian matrix of predictor%        otherwise, or is an vector with mx rows containing the estimated%                   mean squared error of the predictor% Three or four results are allowed only when mx = 1,% dy   : Gradient of predictor; column vector with  n elements% mse  : Estimated mean squared error of the predictor;% dmse : Gradient vector/Jacobian matrix of mse% hbn@imm.dtu.dk% Last update August 26, 2002   or1 = NaN;   or2 = NaN;  dmse = NaN;  % Default return values  if  isnan(dmodel.beta)    y = NaN;       error('DMODEL has not been found')  end  [m n] = size(dmodel.S);  % number of design sites and number of dimensions  sx = size(x);            % number of trial sites and their dimension  if  min(sx) == 1 & n > 1 % Single trial point     nx = max(sx);    if  nx == n       mx = 1;  x = x(:).';    end  else    mx = sx(1);  nx = sx(2);  end  if  nx ~= n    error(sprintf('Dimension of trial sites should be %d',n))  end    % Normalize trial sites    x = (x - repmat(dmodel.Ssc(1,:),mx,1)) ./ repmat(dmodel.Ssc(2,:),mx,1);  q = size(dmodel.Ysc,2);  % number of response functions  y = zeros(mx,q);         % initialize result    if  mx == 1  % one site only    dx = repmat(x,m,1) - dmodel.S;  % distances to design sites    if  nargout > 1                 % gradient/Jacobian wanted      [f df] = feval(dmodel.regr, x);      [r dr] = feval(dmodel.corr, dmodel.theta, dx);      % Scaled Jacobian      dy = (df * dmodel.beta).' + dmodel.gamma * dr;      % Unscaled Jacobian      or1 = dy .* repmat(dmodel.Ysc(2, :)', 1, nx) ./ repmat(dmodel.Ssc(2,:), q, 1);      if q == 1        % Gradient as a column vector        or1 = or1';      end      if  nargout > 2  % MSE wanted                rt = dmodel.C \ r;        u = dmodel.Ft.' * rt - f.';        v = dmodel.G \ u;        or2 = repmat(dmodel.sigma2,mx,1) .* repmat((1 + sum(v.^2) - sum(rt.^2))',1,q);                if  nargout > 3  % gradient/Jacobian of MSE wanted          % Scaled gradient as a row vector          Gv = dmodel.G' \ v;          g = (dmodel.Ft * Gv - rt)' * (dmodel.C \ dr) - (df * Gv)';          % Unscaled Jacobian          dmse = repmat(2 * dmodel.sigma2',1,nx) .* repmat(g ./ dmodel.Ssc(2,:),q,1);          if q == 1            % Gradient as a column vector            dmse = dmse';          end        end              end          else  % predictor only      f = feval(dmodel.regr, x);      r = feval(dmodel.corr, dmodel.theta, dx);    end        % Scaled predictor    sy = f * dmodel.beta + (dmodel.gamma*r).';    % Predictor    y = (dmodel.Ysc(1,:) + dmodel.Ysc(2,:) .* sy)';      else  % several trial sites    % Get distances to design sites      dx = zeros(mx*m,n);  kk = 1:m;    for  k = 1 : mx      dx(kk,:) = repmat(x(k,:),m,1) - dmodel.S;      kk = kk + m;    end    % Get regression function and correlation    f = feval(dmodel.regr, x);    r = feval(dmodel.corr, dmodel.theta, dx);    r = reshape(r, m, mx);        % Scaled predictor     sy = f * dmodel.beta + (dmodel.gamma * r).';    % Predictor    y = repmat(dmodel.Ysc(1,:),mx,1) + repmat(dmodel.Ysc(2,:),mx,1) .* sy;        if  nargout > 1   % MSE wanted      rt = dmodel.C \ r;      u = dmodel.G \ (dmodel.Ft.' * rt - f.');      or1 = repmat(dmodel.sigma2,mx,1) .* repmat((1 + colsum(u.^2) - colsum(rt.^2))',1,q);      if  nargout > 2        disp('WARNING from PREDICTOR.  Only  y  and  or1=mse  are computed')      end    end      end % of several sites  % >>>>>>>>>>>>>>>>   Auxiliary function  ====================function  s = colsum(x)% Columnwise sum of elements in  xif  size(x,1) == 1,  s = x; else,                s = sum(x);  end

⌨️ 快捷键说明

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