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

📄 griddata1.m

📁 一些制作正交曲线网格的matlab源程序
💻 M
字号:
function zi = griddata1 (x, y, z, xi, yi, sr, ppq, expon)					% griddata1 -- 2-d data gridder.%  griddata1(N, sr, ppq, expon) demonstrates itself.%   Defaults: 100, inf, 1, and 1, respectively.%  griddata1(x, y, z, xi, yi, sr, ppq, expon) is an inverse-%   distance 2-d data gridder, which is guided by the search-%   radius sr (default = inf), the points-per-quadrant ppq%   (default = 1), and the exponent expon (default = 1).%   The search-radius is the maximum distance permitted%   between an interpolated position and the qualifying%   data-points.  The points-per-quadrant is the maximum%   number of (x, y) points to be used in each of the four%   quadrants surrounding the corresponding (xi, yi) position.%   The exponent for inverse-distance weighting defaults to 1,%   denoting the simple reciprocal.  Invalid interpolates are%   marked by NaN.%  griddata1(x, y, z, xi, yi, [sr, ppq, expon]) is an%   alternative syntax, in closer keeping with the "method"%   syntax of the Matlab "griddata" function.%  This began as John Evans' "gridgen_griddata" version%   of a Rich Signell routine.  Cleaned-up by Denham to be%   stand-alone, more versatile, and self-demonstrating. % Modifications (Denham):%% Copyright (C) 2000 Dr. Charles R. Denham, ZYDECO.%  All Rights Reserved.%   Disclosure without explicit written consent from the%    copyright owner does not constitute publication. % Version of 20-Jul-2000 13:44:52.% Updated    24-Jul-2000 11:12:17.DEFAULT_SR = inf;    % Infinite search-radius.DEFAULT_PPQ = 1;     % Nearest point in each quadrant.DEFAULT_EXPON = 1;   % Very shallow unit-response.if nargin < 1, x = 'demo'; help(mfilename), endif isequal(x, 'demo'), x = 100; endif isstr(x), x = eval(x); endif length(x) == 1	sr = DEFAULT_SR;	ppq = DEFAULT_PPQ;	expon = DEFAULT_EXPON;	if nargin > 1, sr = y; end, if ischar(sr), sr = eval(sr); end	if nargin > 2, ppq = z; end, if ischar(ppq), ppq = eval(ppq); end	if nargin > 3, expon = xi; end	if ischar(expon), expon = eval(expon); end	n = x;	x = rand(n, 1);	y = rand(size(x));	z = x+y;	NGRID = 10;	g = (0:NGRID)/NGRID;	[xi, yi] = meshgrid(g, g);	tic	result = feval(mfilename, x, y, z, xi, yi, sr, ppq, expon);	disp([' ## Elapsed time: ' int2str(round(toc)) ' s'])	hold off	try, set(gcf, 'Renderer', 'zbuffer'), catch, end	surf(xi, yi, result)	hold on	plot3(x, y, z, '*k')	hold off	mfile = strrep(mfilename, '_', '\_');	title([mfile ' ' int2str(n) ' ' num2str(sr) ' ' int2str(ppq) ...			' ' num2str(expon)])	xlabel x, ylabel y, zlabel z	try, rotate3d on, catch, end	returnendif nargin  == 6 & length(sr) > 1	for i = 1:length(sr), v{i} = sr(i); end	zi = feval(mfilename, x, y, z, xi, yi, v{:});	returnendif nargin < 5, help(mfilename), return, endif nargin < 6, sr = DEFAULT_SR; endif nargin < 7, ppq = DEFAULT_PPQ; endif nargin < 8, ppq = DEFAULT_EXPON; endx = x(:); y = y(:); z = z(:);search_radius = sr;points_per_quadrant = max(ppq, 1);n = length(xi(:));% Loop through one grid-point at a time.for k = 1:n		% Locate the data lying within the search-radius,	%  applied independently to x and y, rather than	%  to actual radial distance.	near_inds = find ( (abs(x-xi(k)) <= search_radius) & ...		(abs(y-yi(k)) <= search_radius) );	nearx = x(near_inds)-xi(k); 	neary = y(near_inds)-yi(k);	nearz = z(near_inds);		quad1_inds = find ( (nearx>=0) & (neary>=0) );	quad1x = nearx(quad1_inds); 	quad1y = neary(quad1_inds);	quad1z = nearz(quad1_inds);		quad2_inds = find ( (nearx<0) & (neary>=0) );	quad2x = nearx(quad2_inds); 	quad2y = neary(quad2_inds);	quad2z = nearz(quad2_inds);		quad3_inds = find ( (nearx<0) & (neary<0) );	quad3x = nearx(quad3_inds); 	quad3y = neary(quad3_inds);	quad3z = nearz(quad3_inds);		quad4_inds = find ( (nearx>=0) & (neary<0) );	quad4x = nearx(quad4_inds); 	quad4y = neary(quad4_inds);	quad4z = nearz(quad4_inds);		% Select up to the maximum number per quadrant.	if ( ~isempty(quad1_inds) )		ranges_quad1 =  sqrt(quad1x.^2 + quad1y.^2);		[sorted_range_quad1, range_inds] = sort(ranges_quad1);		closest_quad1_inds = ...			range_inds([1:1:min(length(range_inds),points_per_quadrant)]);	else		ranges_quad1 = [];		closest_quad1_inds = [];	end	 	if ( ~isempty(quad2_inds) )		ranges_quad2 =  sqrt(quad2x.^2 + quad2y.^2);		[sorted_range_quad2, range_inds] = sort(ranges_quad2);		closest_quad2_inds = ...			range_inds([1:1:min(length(range_inds),points_per_quadrant)]);	else		ranges_quad2 = [];		closest_quad2_inds = [];	end	 	if ( ~isempty(quad3_inds) )		ranges_quad3 =  sqrt(quad3x.^2 + quad3y.^2);		[sorted_range_quad3, range_inds] = sort(ranges_quad3);		closest_quad3_inds = ...			range_inds([1:1:min(length(range_inds),points_per_quadrant)]);	else		ranges_quad3 = [];		closest_quad3_inds = [];	end	 	if ( ~isempty(quad4_inds) )		ranges_quad4 =  sqrt(quad4x.^2 + quad4y.^2);		[sorted_range_quad4, range_inds] = sort(ranges_quad4);		closest_quad4_inds = ...			range_inds([1:1:min(length(range_inds),points_per_quadrant)]);	else		ranges_quad4 = [];		closest_quad4_inds = [];	end	% Bundle all the qualifying data together.	closest_ranges = [ranges_quad1(closest_quad1_inds); ...					ranges_quad2(closest_quad2_inds); ...					ranges_quad3(closest_quad3_inds); ...					ranges_quad4(closest_quad4_inds); ];				  	closest_z = [quad1z(closest_quad1_inds); ...					quad2z(closest_quad2_inds); ...					quad3z(closest_quad3_inds); ...					quad4z(closest_quad4_inds); ];	% Use inverse-distance weighting with the nearest points	%  in each quadrant. If none, the result is NaN.		if ( isempty(closest_ranges) )		zi(k) = NaN;	else		inv_ranges = closest_ranges .^ (-expon);		zi(k) = sum ( ( inv_ranges ./ sum(inv_ranges) ) .* closest_z );	end		 endzi = reshape(zi, size(xi));

⌨️ 快捷键说明

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