⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmtable.m

📁 书籍:精通MATLAB-综合辅导与指南(附例程),是一个还不错的介绍matlab的书籍
💻 M
字号:
function y=mmtable(a,b,c)%MMTABLE 1-D Monotonic Table Search by Linear Interpolation.% YI=MMTABLE(TAB,COL,VALS) linearly interpolates the table TAB% searching for values VALS in the column COL.%% TAB(:,COL) must be monotonic, but need NOT be equally spaced.% YI has as many rows as VALS and as many columns as TAB.% NaNs are returned where VALS are outside the range of TAB(:,COL).%% YI=MMTABLE(TAB,VALS) interpolates using COL=1 and does not return % TAB(:,1) in Y. This matches the usage of TABLE1(TAB,X0).%% YI=MMTABLE(X,Y,XI) interpolates the vector X to find YI associated% with XI. This matches the usage of INTERP1(X,Y,XI)%% This routine is 10X faster than TABLE1 which is called by INTERP1.% For linearly spaced data, ILINEAR is 10X faster yet.% D.C. Hanselman, University of Maine, Orono ME,  04469% 8/21/95% Copyright (c) 1996 by Prentice-Hall, Inc. if nargin==2          % MMTABLE(TAB,VALS) syntax	tab=a;vals=b(:);col=1;cflag=1;elseif length(b)>1    % MMTABLE(X,Y,XI) syntax	[rb,cb]=size(b);	a=a(:);	la=length(a);	if rb==la,tab=[a b];	elseif cb==la,tab=[a b.'];	end	col=1;vals=c(:);cflag=1;else                  % MMTABLE(TAB,COL,VALS) syntax	tab=a;col=b(1);vals=c(:);cflag=0;end[rt,ct]=size(tab);if col>ct|col<1,  error('Chosen column outside table width.'), endif rt<2, error('Table too small or not oriented in columns.'), endict=1:ct;      % index for table columnsnv=length(vals);dx=diff(tab);dx=[dx;dx(rt-1,:)];  % differences within each column.id=sign(dx(1,col));  % sign of differences in colif any(sign(dx(:,col))~=id)	error(sprintf('Column %.0f of table is not monotonic.',col))endinan=vals<min(tab(1,col),tab(rt,col)) | vals>max(tab(1,col),tab(rt,col));xo=vals(~inan);  % pick values within range of tab(:,col)nxo=length(xo);if nxo==0  % all values are outside range of tab(:,col)!	y=NaN*ones(nv,ct);	y(:,col)=vals;else  % interpolate using algorithm posted by Hans Olsson of Lund University		[svals,sidx]=sort(id*[tab(2:rt-1,col);xo]);	ttab=sidx<=rt-2;      % True at tab(:,col) values in svals	cidx=1+cumsum(ttab);  % index of xo in svals	sidx(ttab)=[];        % throw out indices of tab(:,col) values	yidx=zeros(nxo,1);    % storage for xo index in tab(:,col)	yidx(sidx-(rt-2))=cidx(~ttab);  % xo index in tab(:,col)	ndx=(xo-tab(yidx,col))./dx(yidx,col); % normalized dx increment	y=tab(yidx,ict)+ndx(:,ones(1,ct)).*dx(yidx,ict);	if ~isempty(inan)  % must poke in NaNs where they belong		yt=zeros(nv,ct);		yt(~inan,:)=y;		yt(inan,:)=NaN*ones(nv-nxo,ct);		yt(:,col)=vals;		y=yt;	endendif cflag,y(:,col)=[];end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -