0001 function varargout = interp(varargin)
0002
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
0028 ALGONAME = mfilename;
0029 VERSION = '$Id: interp.html,v 1.1 2007/06/08 14:15:02 hewitson Exp $';
0030
0031
0032
0033 if nargin == 1
0034 in = char(varargin{1});
0035 if strcmp(in, 'Params')
0036 varargout{1} = getDefaultPL();
0037 return
0038 end
0039 end
0040
0041
0042 invars = {};
0043 as = [];
0044 ps = [];
0045 for j=1:nargin
0046 invars = [invars cellstr(inputname(j))];
0047 if isa(varargin{j}, 'ao')
0048 as = [as varargin{j}];
0049 end
0050 if isa(varargin{j}, 'plist')
0051 ps = [ps varargin{j}];
0052 end
0053 end
0054
0055
0056 if isempty(ps)
0057 pl = getDefaultPL();
0058 else
0059 pl = combine(ps, getDefaultPL);
0060 end
0061
0062
0063
0064 vertices = find(pl, 'vertices');
0065 method = find(pl, 'method');
0066
0067
0068
0069 bs = [];
0070 na = length(as);
0071 for j=1:na
0072
0073 a = as(j);
0074
0075
0076
0077 [x,y] = getAOdata(a);
0078
0079
0080
0081 y = interp1(x,y,vertices, method, 'extrap');
0082
0083
0084
0085 si = size(vertices);
0086 if si(2) > si(1) && si(1) == 1
0087 vertices = vertices.';
0088 end
0089 d = a.data;
0090 if isa(d, 'tsdata')
0091 d = set(d, 't', vertices);
0092 d = set(d, 'x', y.');
0093 elseif isa(d, 'fsdata')
0094 d = set(d, 'f', vertices);
0095 d = set(d, 'xx', y.');
0096 elseif isa(d, 'cdata')
0097 d = set(d, 'vals', y.');
0098 elseif isa(d, 'xydata')
0099 d = set(d, 'x', vertices);
0100 d = set(d, 'y', y.');
0101 else
0102 error('### Unknown data type.')
0103 end
0104 d = set(d, 'name', sprintf('%s(%s)', method, d.name));
0105
0106 h = history(ALGONAME, VERSION, pl, a.hist);
0107 h = set(h, 'invars', invars(j));
0108
0109
0110 b = ao(d, h);
0111
0112
0113 if isempty(invars{j})
0114 n = a.name;
0115 else
0116 n = invars{j};
0117 end
0118 b = set(b, 'name', sprintf('%s(%s)', method, n));
0119
0120
0121 bs = [bs b];
0122
0123 end
0124
0125
0126
0127 varargout{1} = bs;
0128
0129
0130
0131 function plo = getDefaultPL()
0132
0133 disp('* creating default plist...');
0134 plo = plist();
0135 plo = append(plo, param('vertices', []));
0136 plo = append(plo, param('method', 'spline'));
0137 disp('* done.');
0138
0139
0140
0141
0142
0143