www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoppoint/ndblock.m
function p = ndblock(p,block_i,block_data) % block_len = ndblock(p,ind) calculates length of block % % p = ndblock(p,ind,data) % Builds grid using block. % treats factors referenced by ind as a single block, containing 'data'. % Data values in other factors are reproduced for each row in 'data'. % Copyright 2000-2008 The MathWorks, Inc. and Ford Global Technologies, Inc. if nargin ==2 % Checking for replication is too slow for large grids. % Now just carry the length of the block in the object p = p.blocklen; return; end if isempty(block_data) block_data = zeros(1,length(block_i)); end if size(block_data,2)~=length(block_i) error(message('mbc:cgoppoint:InvalidSize3')); end if ~all(ismember(block_i,1:length(p.ptrlist))) error(message('mbc:cgoppoint:InvalidIndex15')); end factor_i = setdiff(1:length(p.ptrlist),block_i); f_data = p.data; if isempty(f_data) f_data = get(p,'constant'); end M = size(f_data,1); L = size(block_data,1); new_b_data = repmat(block_data,M,1); %tile the oppoint data if L > 1 newdata = zeros(size(new_b_data,1),size(f_data,2)); % reproduce these Values to fit the oppoint data between each row for i = 1:size(f_data,2) newdata(:,i) = reshape( repmat(f_data(:,i)' ,L,1) , L.*M , 1); end else newdata = f_data; end newdata(:,block_i) = new_b_data(:,1:length(block_i)); p.data = newdata;