📄 mminterp.m
字号:
function y=mminterp(tab,col,val)
%MMINTERP 1-D Table Search by Linear Interpolation
%Y=MMINTERP(TAB,COL,VAL)linearly interpolates th table
%TAB searching for the scalar value VAL in the column COL
%ALL crossings are found and TAB (:,COL)need not be monotonic
%Each crossing is returned as a separate row in Y and Y has as
%many columns as TAB.Naturelly,the column COL of Y contains
%the Value VAL.If VAL os not found in the table,Y=[].
%Coppyright(c) 1996 by prentice-Hall,Inc.
[rt,ct]=size(tab);
if length(val)>1,error('VAL must be a scalar.'),end
if col>ct|col<1,error('Chosen column outside table width.'),end
if rt<2,error('table too small or not oriented in columns.'),end
above=tab(:,col)>val; %True where>VAL
below=tab(:,col)<val; %True where>VAL
equal=tab(:,col)==val; %True where=VAL
if all(above==0)|all(below==0), %handle simplest case
y=tab(find(equal),:);return
end
pslope=find(below(1:rt-1)&above(2:rt)); %indices where slope is +
nslope=find(below(2:rt)&above(1:rt-1)); %indices where slope is -
ib=sort([pslope;nslope+1]); %put indices below in order
ia=sort([nslope;pslope+1]); %put indices above in order
ie=find(equal); %indices where equal to val
[tmp,ix]=sort([ib,ie]); %find where equals fit in result
ieq=ix>length(ib) %True where equals values fit
ry=length(tmp); %#of rows in result y
y=zeros(ry,ct); %poke data into a zero matri
alpha=(val-tab(ib,col))./(tab(ia,col)-tab(ib,col));
alpha=alpha(:,ones(1,ct)); %duplicate for all columns
y(~ieq,:)=alpha.*tab(ia,:)+(1-alpha).*tab(ib,:); %equal values
y(ieq,:)=tab(ie,:);
y(:,col)=val*ones(ry,1); %remove roundoff error
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -