0001 function [outX outY] = obtainTimeEvolution(resultStruct, functionHandle, ...
0002 varargin)
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 outX = resultStruct.time;
0028 outY = evaluateHandle(functionHandle, resultStruct, 1, varargin{:});
0029
0030
0031 nTime = length(resultStruct);
0032 outX(nTime) = 0;
0033 outY(1, nTime) = 0;
0034
0035 for iTime = 2:nTime
0036 outX(iTime) = resultStruct(iTime).time;
0037 outY(:, iTime) = evaluateHandle(functionHandle, resultStruct, iTime, ...
0038 varargin{:});
0039 end
0040
0041 end
0042
0043 function outY = evaluateHandle(functionHandle, resultStruct, iTime, varargin)
0044 info.i = iTime;
0045 info.H = resultStruct(iTime).hcMatrix;
0046 info.N = resultStruct(iTime).numberVector;
0047 info.up = resultStruct(iTime).upVector;
0048 info.P = resultStruct(iTime).pivotPropertyMatrix;
0049
0050 info.x = resultStruct(iTime).bulkStateVector;
0051 info.y = resultStruct(iTime).bulkPropertyVector;
0052 info.time = resultStruct(iTime).time;
0053
0054 info.nPivot = size(info.H, 2);
0055 info.nDim = size(info.H, 1);
0056 if length(resultStruct(iTime).dissolvedPivotVector) >= 1
0057 info.nZero = resultStruct(iTime).dissolvedPivotVector(1);
0058 else
0059 info.nZero = 0;
0060 end
0061 info.nSample = info.nPivot + info.nZero;
0062
0063
0064
0065 info.extra = struct([]);
0066 for iArgin = 1:length(varargin)
0067 info.extra(iArgin).data = feval(varargin{iArgin}, info);
0068 end
0069 outY = functionHandle(info);
0070 end