www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@mbcinputfactor/copyToExternal.m

    function [objOut,varargout] = copyToExternal(obj,varargin)
%COPYTOEXTERNAL
%
% [obj,varargout] = copyToExternal(obj,varargin)

%  Copyright 2007 The MathWorks, Inc. 

n = length(varargin);

varargout = varargin;
Args = varargin;
objOut= varargin{1};
for i=1:length(obj)
    for j=1:n
        Args{j} = varargin{j}(i);
    end
    [objOut(i),Args{:}] = copyToExternalRanges(objOut(i),Args{:});
    for j=1:n
        varargout{j}(i) = Args{j};
    end
end



function [obj,varargout] = copyToExternalRanges(obj,varargin)
%COPYTOEXTERNALRANGES
%
% [obj,varargout] = copyToExternalRanges(obj,varargin)

%  Copyright 2007 The MathWorks, Inc. 

n = length(varargin);

varargout = varargin;

IsSame = true;
SameTarget = true;
C1 = varargin{1};
[R,g] = getcode(C1);
Tgt = C1.RealTarget;
for j=2:n
    Cj = varargin{j};
    IsSame = IsSame && isequal(C1,Cj) ;
    SameTarget= IsSame && SameTarget && isequal(Tgt,Cj.RealTarget);
    Rj = Cj.Range;
    % make common range
    R(:,1) = min(R(:,1),Rj(:,1));
    R(:,2) = max(R(:,2),Rj(:,2));
end

if SameTarget
    % all input transforms done at the outer level
    obj= setcode(obj,R,g,C1.Target);
    % all input transforms done at internal
    cout = setcode(obj,Tgt,'');
    varargout(:) = {cout};
elseif IsSame
    % external input uses common range and nonlinear transform is done at outer level
    obj = setcode(obj,R,g,[-Inf Inf]);
    for j=1:n
        cout = varargin{j};
        cout.NonlinearTransform = '';
        varargout{j} = cout;
    end
else
    obj = setcode(obj,R,'',[-Inf Inf]);
end