如何使用interp2插值
X,Y代表的是A卫星得到的一组数据的经纬度坐标,这组数据用Z表示, 想把这组数据插值到B卫星的坐标(X1,Y1)上,因为这两个卫星有不同的精度,打算用interp2(主要是看重spline插值的精度),但总是说不是X and Y meshgrid,错误提示:X and Y must be matrices produced by MESHGRID. Use GRIDDATA instead
of INTERP2 for scattered data.
请问有没有转换的方法呢?就是转换一下坐标什么的就可以用interp2了,我感觉我的X,Y
是很有规律的呀。
先谢谢
用plot画的图是这两个卫星的扫描轨道中点的位置。
clc
clear
load X.mat;load Y.mat;load Z.mat
load X1.mat;load Y1.mat
Z1=griddata(X,Y,Z,X1,Y1);
%Z1=interp2(X,Y,Z,X1,Y1,'spline');(就是想用spline插值,如何转换?)
for i=1:201
plot(X(:,i),Y(:,i),'.');
hold on
end
for i=1:length(X1)
plot(X1(:,i),Y1(:,i),'r.');
hold on
end
[ 本帖最后由 re-us 于 2008-10-9 04:38 编辑 ]
回复 楼主 re-us 的帖子
lz, mat文件会有版本兼容性问题,有的人会打不开建议txt
还有,你的错误提示要完整,不要你自己翻译的
[ 本帖最后由 sigma665 于 2008-10-9 08:42 编辑 ] 新的数据格式是:dat
完整的错误提示是:
??? Error using ==> interp2 at 155
X and Y must be matrices produced by MESHGRID. Use GRIDDATA instead
of INTERP2 for scattered data.
Error in ==> test at 140
Z1=interp2(X,Y,Z,X1,Y1);
下面是程序:
clc
clear
%***********************************************************
nx=201;
ny=49;
in=fopen('C:\test\X.dat','r');
z=fread(in,'float32');
fclose(in);
X=reshape(z,ny,nx);
in=fopen('C:\test\Y.dat','r');
z=fread(in,'float32');
fclose(in);
Y=reshape(z,ny,nx);
in=fopen('C:\test\Z.dat','r');
z=fread(in,'float32');
fclose(in);
Z=reshape(z,ny,nx);
%***************************************
nx=51;
ny=44;
in=fopen('C:\test\X1.dat','r');
z=fread(in,'float32');
fclose(in);
X1=reshape(z,ny,nx);
in=fopen('C:\test\Y1.dat','r');
z=fread(in,'float32');
fclose(in);
Y1=reshape(z,ny,nx);
%***********************************************************
Z1=interp2(X,Y,Z,X1,Y1);
for i=1:201
plot(X(:,i),Y(:,i),'.');
hold on
end
for i=1:length(X1)
plot(X1(:,i),Y1(:,i),'r.');
hold on
end
感谢版主提醒
等待高人指点 Z1=interp2(X,Y,Z,X1,Y1.'方法');
X,Y,Z是原始数据点
X1,Y1是插值点构成的新网格参数
方法为: linear cubic spline
Z1是矩阵为所选插值网格点处的函数近似值
具体请看帮助 griddata是用来插值站点数据的(离散点),interp2是用来插值格点数据的—对数据的要求有本质的不同 谢谢
非常谢谢
就是只能用gridata了? 刚刚才上线,发现楼主应已解决了
interp2函数,我仅瞄过而知道有这东东,但从未真正使用过
我想借此地逐步说明个人学习此问题的过程,供大家参考
或许以後大家就可自个儿解决问题,基本上学习如何解决问题应是最重要的
1.help interp2,读完并消化其例子,确定用对了函数与函数使用正确
2.看看Help文档中see also,看看有无其他更适宜的函数可用
3.逐步执行程序,并不时检查各变数的大小及值,确定每步的正确性
(我想可以随时检查变数的直译式方式,是使用matlab的方便好处之一)
4.搅清楚错误讯息的含义
5.甚至可以找到interp2.m,看看其内容,可学习专家写M函数的方式
胡言乱语一般,希望有表达清楚,并对楼主有用 该针对你的问题,说明我刚刚学习完的结论
ZI = interp2(X,Y,Z,XI,YI)函数中的X及Y必须是格子状的输入,即X/Y虽然可以是矩阵,但一定得是如同meshgrid产生的样子(执行 = meshgrid(1:3,10:14)就了解)
你可以下plot(X(:),Y(:),'o-'),观察你的输入与meshgrid之间的差异,所以你的输入是不适用interp2的!
若你确定你的输入X/Y是那个样,可如下解决:
1.座标转换转成适用interp2的样式,interp2後再转回来。我没试但个人认为可行
2.将interp2改用griddata,基本上两函数虽然default都是linear,但两者使用的数值方法完全不同,也就是如此造成interp2有输入的限制
其实你仔细看错误讯息,已经说明了!
个人看法 : interp2的X/Y输入应该设限为vector,不应该矩阵输入亦可! 允许使用者矩阵输入,再检查是否符合meshgrid的格式(interp2.m),感觉多此一举, 并容易造成使用误解
页:
[1]