好的伙计们。我有以下问题:
我有以下情节的数据。
因此该图的数据文件包含三列。 第二和第三个是x,y点。第一个是这些点所属的系统。 在这种情况下,红色的是20年的系统。蓝色的30年。
我想要找到的是25年的曲线。因此,如果我绘制它应该在红色和蓝色曲线之间。
我不知道如何插入数据以获得我想要的东西。实际上我想要21,22,... 29年,我想如果我们能在这两者之间找到它,那么该方法应该适用于20到30之间的任何时间。
PS:我猜每条曲线的插值(在这种情况下是红色或蓝色曲线)非常简单。只使用interp1(x,y,xx)就行了。但是其他"维度" (M)
数据。
20.0000 3.4076 0
20.0000 3.4226 99.5405
20.0000 3.4701 196.3360
20.0000 3.5592 287.0781
20.0000 3.6248 328.8516
20.0000 3.6643 348.3373
20.0000 3.7091 367.2823
20.0000 3.7591 385.4784
20.0000 3.8077 402.7170
20.0000 3.8957 437.5221
20.0000 4.0314 506.9907
30.0000 3.6335 0
30.0000 3.6373 49.8884
30.0000 3.6488 99.5405
30.0000 3.6685 148.5936
30.0000 3.7363 243.2204
30.0000 3.7876 287.7398
30.0000 3.8537 329.6097
30.0000 3.8935 349.9452
30.0000 3.9384 368.9776
30.0000 3.9892 387.2576
30.0000 4.0410 404.5759
30.0000 4.1350 439.5416
30.0000 4.2153 474.2420
30.0000 4.2813 509.3309
答案 0 :(得分:6)
实际上,通过查看Matlab文档,我发现了一种更简单的方法。您可以使用函数griddata。 (matlab帮助中的doc显示了可视化示例)。对公共网格进行重采样并将插值嵌入到函数中。
%// First separate (and name your column to identify them better)
t = d(:,1) ;
x = d(:,2) ;
y = d(:,3) ;
%// use the function 'griddata'
[TI,YI] = meshgrid( 20:30 , 0:20:500 ) ; %// change these values to change the grid limits
XI = griddata(t,y,x,TI,YI) ;
%// show result in 3D ... but could be projected in X-Y plane if necessary
plot3(TI,YI,XI , 'Marker','o' )
xlabel('Time') ; ylabel('Y') ; zlabel('X')
代码的最后一行显示了这个情节:
所有插值数据都在XI矩阵中。检索它们的方法取决于您最终如何组织它们。
<小时/> 编辑: 要将所有插值数据放在单个表
InterpData
中,组织方式与原始表相同,请使用以下命令:
nLine = numel(XI) ;
InterpData = [ reshape(TI,nLine,[]) reshape(XI,nLine,[]) reshape(YI,nLine,[]) ] ;
<小时/> 关于
NaN
s。每当你要求在最初已知的值之外进行插值时,它们会打扰你
例如,如果您在原始数据中的时间在[20到30]间隔内,matlab将很乐意在该间隔内插入任何内容,但如果您要求返回time = 19的值,则返回NaN
。同样适用于Y
,要插入的网格必须在初始范围内。 (在此实现中,我们使用由Time
(第1列)和Y
(第3列)组成的基础网格来插入{ {1}}栏)。
答案 1 :(得分:3)
尝试使用此代码实现@Hoki的评论:
m20=[3.4076 0; 3.4226 99.5405; 3.4701 196.3360; 3.5592 287.0781; 3.6248 328.8516; 3.6643 348.3373; 3.7091 367.2823; 3.7591 385.4784; 3.8077 402.7170; 3.8957 437.5221; 4.0314 506.9907];
m30=[3.6335 0; 3.6373 49.8884; 3.6488 99.5405; 3.6685148.5936; 3.7363 243.2204; 3.7876 287.7398; 3.8537 329.6097; 3.8935 349.9452; 3.9384 368.9776; 3.9892 387.2576; 4.0410 404.5759; 4.1350 439.5416; 4.2153 474.2420; 4.2813 509.3309];
yy = [0:50:500];
xx20 = interp1(m20(:,2),m20(:,1),yy);
xx30 = interp1(m30(:,2),m30(:,1),yy);
for m = 1:9
mm(:,m) = xx20 + (xx30-xx20)*(m/(30-20));
end
plot(m20(:,1),m20(:,2),xx20,yy,xx30,yy,m30(:,1),m30(:,2),mm,yy)
您插入给定的M
向量以查找一组x
值的y
坐标 - 这些是interp1
行。然后,在插值m
- 坐标之间线性插值为x
的函数。