www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoppoint/horzcat.m

    function P = horzcat(varargin)
% cgOpPoint / horzcat
% Concatenate two operating point sets with different factors
% The sets must have the same number of points or 1 point

%  Copyright 2000-2008 The MathWorks, Inc. and Ford Global Technologies, Inc.



if nargin==1
    P = varargin{1};
else
    for i = 1:nargin
        if ~isa(varargin{i},'cgoppoint')
            error(message('mbc:cgoppoint:InvalidArgument23'));
        end
    end
    P = varargin{1};
    data = P.data;
    name = P.name;
    ptrlist = get(P,'ptrlist');
    for i = 2:nargin
        this = varargin{i};
        thispl = get(this,'ptrlist');
        duplicate = 0;
        if ~isempty(ptrlist) & ~isempty(thispl)
            for j = 1:length(thispl)
                if isvalid(thispl(j))
                    duplicate = max(duplicate,double(ptrlist)==double(thispl(j)));
                end
            end
        end
        if duplicate
            warning(message('mbc:cgoppoint:InvalidArgument24'));
        else
            if isempty(name)
                name = this.name;
            end
            ptrlist = [ptrlist thispl];
            tdata = this.data;
            if isempty(P.ptrlist)
                data = tdata;
            elseif ~isempty(this.ptrlist)
                if size(tdata,1)~=size(data,1)
                    if size(tdata,1)==1
                        tdata = repmat(tdata,size(data,1),1);
                    elseif size(tdata,1)==0
                        tdata = zeros(size(data,1),1);
                    elseif size(data,1)==1
                        data = repmat(data,size(tdata,1),1);
                    elseif size(data,1)==0
                        data = zeros(size(tdata,1),1);
                    else
                        error(message('mbc:cgoppoint:InvalidArgument25'));
                    end
                end
                data = [data tdata];
            end
            P.ptrlist = [P.ptrlist this.ptrlist];
            P.units = [P.units this.units];
            P.orig_name = [P.orig_name this.orig_name];
            P.factor_type = [P.factor_type this.factor_type];
            P.linkptrlist = [P.linkptrlist this.linkptrlist];
            P.overwrite = [P.overwrite this.overwrite];
            %%%%%% need to check this one! Do all this as an addfactor?
            P.group = [P.group this.group];
            %%%%%% what about rules? update to point to correct new factor?
            
            P.grid_flag = [P.grid_flag this.grid_flag];
            P.range = [P.range this.range];
            P.constant = [P.constant this.constant];
            P.created_flag = [P.created_flag this.created_flag];
            P.tolerance = [P.tolerance this.tolerance];
            % If there is a block in both op points, then set the block length
            % to the length of this if this > 1, else 
            if any(find(P.grid_flag == 7)) & any(find(this.grid_flag == 7))
                P.blocklen = size(P.data, 1);
            elseif any(find(P.grid_flag == 7)) & ~any(find(this.grid_flag == 7))
                P.blocklen = size(P.data, 1);
            elseif ~any(find(P.grid_flag == 7)) & any(find(this.grid_flag == 7))
                P.blocklen = size(this.data, 1);
            else
                P.blocklen = [];
            end
        end
    end
    P.name = name;
    P.data = data;
    
end