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

📄 dsmerge.m

📁 Kriging插值工具箱
💻 M
字号:
function  [mS, mY] = dsmerge(S, Y, ds, nms, wtds, wtdy)%DSMERGE  Merge data for multiple design sites.%% Call%   [mS, mY] = dsmerge(S, Y)%   [mS, mY] = dsmerge(S, Y, ds)%   [mS, mY] = dsmerge(S, Y, ds, nms)%   [mS, mY] = dsmerge(S, Y, ds, nms, wtds)%   [mS, mY] = dsmerge(S, Y, ds, nms, wtds, wtdy)%% Input% S, Y : Data points (S(i,:), Y(i,:)), i = 1,...,m% ds   : Threshold for equal, normalized sites. Default is 1e-14.% nms  : Norm, in which the distance is measured.%        nms =  1 : 1-norm (sum of absolute coordinate differences)%               2 : 2-norm (Euclidean distance) (default)%        otherwise: infinity norm (max coordinate difference)      % wtds : What to do with the S-values in case of multiple points.%        wtds = 1 : return the mean value (default)%               2 : return the median value%               3 : return the 'cluster center'% wtdy : What to do with the Y-values in case of multiple points.%        wtdy = 1 : return the mean value (default)%               2 : return the median value%               3 : return the 'cluster center' value%               4 : return the minimum value%               5 : return the maximum value    %% Output% mS : Compressed design sites, with multiple points merged%      according to wtds% mY : Responses, compressed according to wtdy% hbn@imm.dtu.dk  % Last update July 3, 2002% Check design points[m n] = size(S);  % number of design sites and their dimensionsY = size(Y);if  min(sY) == 1,  Y = Y(:);   lY = max(sY);  sY = size(Y);else,              lY = sY(1); endif m ~= lY  error('S and Y must have the same number of rows'), end% Thresholdif  nargin < 3  ds = 1e-14;elseif  (ds < 0) | (ds > .5)  error('ds must be in the range [0, 0.5]'), end% Which measureif  nargin < 4  nms = 2;elseif  (nms ~= 1) & (nms ~= 2)  nms = Inf;end% What to doif  nargin < 5  wtds = 1;else  wtds = round(wtds);  if  (wtds < 1) | (wtds > 3)    error('wtds must be in the range [1, 3]'), endendif  nargin < 6  wtdy = 1;else  wtdy = round(wtdy);  if  (wtdy < 1) | (wtdy > 5)    error('wtdy must be in the range [1, 5]'), endend% Process datamore = 1;ladr = zeros(1,ceil(m/2));while more  m = size(S,1);  D = zeros(m,m);    % Normalize sites  mS = mean(S);   sS = std(S);  scS = (S - repmat(mS,m,1)) ./ repmat(sS,m,1);    % Calculate distances D (upper triangle of the symetric matrix)  for k = 1 : m-1    kk = k+1 : m;    dk = abs(repmat(scS(k,:), m-k, 1) - scS(kk,:));    if  nms == 1,      D(kk,k) = sum(dk,2);    elseif  nms == 2,  D(kk,k) = sqrt(sum(dk.^2,2));    else,              D(kk,k) = max(dk,[],2);      end  end  D = D + D'; % make D symetric    % Check distances  mult = zeros(1,m);  for  j = 1 : m    % Find the number of multiple sites in each column of D    mult(j) = length(find(D(:,j) < ds));  end  % Find the first column with the maximum number of multiple sites  [mmult jj] = max(mult);    if  mmult == 1,  more = 0;  else    nm = 0;    while  mmult > 1      nm = nm + 1;  % no. of points to merge      ladr(nm) = jj;            % Merge point no jj and its neighbours, note that jj is the center      % of the cluster, as it has the most neighbors (among the multiple sites)      ngb = find(D(:,jj) < ds);            switch  wtds      case 1,  S(jj,:) = mean(S(ngb,:));      case 2,  S(jj,:) = median(S(ngb,:));      case 3,  S(jj,:) = S(jj,:);      end            switch  wtdy      case 1,  Y(jj,:) = mean(Y(ngb,:));      case 2,  Y(jj,:) = median(Y(ngb,:));      case 3,  Y(jj,:) = Y(jj,:);      case 4,  Y(jj,:) = min(Y(ngb,:));      case 5,  Y(jj,:) = max(Y(ngb,:));      end            % Delete from list      mult(ngb) = 0;      [mmult jj] = max(mult);    end    % Reduced data set    act = [find(mult > 0)  ladr(1:nm)];    S = S(act,:);    Y = Y(act,:);  end % multipleend % loop% Return reduced setmS = S;   mY = Y;

⌨️ 快捷键说明

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