2016-07-23 99 views
0

我想基本上增加我的数据点,当我想绘制我的x,y坐标和它们相应的函数值z(x,y)的3d表面。 问题是我的坐标不单调增加,所以我不能在Matlab中使用2D插值。Matlab:内插非单调坐标和函数值组合

一个典型的X,Y,几个第一排ž组合可能看起来像:

15 15 184700.882736683 
15 30 215486.921407234 
15 45 205691.389050234 
15 60 215486.897031495 
15 75 209662.528668203 
15 90 215486.908134438 
15 105 211342.684211922 
15 120 215486.920131923 
15 135 212270.488286479 
15 150 215486.917843900 
30 30 275146.369280109 
30 45 262639.083693416 
30 60 275146.334615114 
30 75 267709.604291106 
30 90 275146.361678640 
30 105 269854.818605481 
30 120 275146.331709932 
30 135 271039.490475350 
30 150 275146.317264820 
30 15 235837.965849192 

其实我可以画出它们的散点图,或使用meshgrid情节3D表面了出来,但由于我的数据值很少,我知道它们之间没有值的跳跃,我只是想通过插值增加数据点的数量,并使我的3d表面看起来更细腻而不太粗糙。

我已经看过1234,但他们不特别针对于解决我的问题,因为我的情况是一个三维的。

请不要将我的问题标记为重复并复制;通过只搜索标题。谢谢。

+0

你有'z'作为'x'和'y'的函数。我们通常会称之为2D插值。您链接到的解决方案有什么问题? – Suever

+0

实际上,如果你想尝试插值二维,你会得到错误,你的数据并不单调增加,因为我有z = f(x,y)我不知道如何解决这个单调问题已经出现。见'x'是单调的,但y不是,而z是函数值,它显然可以非单调变化。 – Soyol

+0

您链接的所有线程处理非单调数据。 – Suever

回答

1

因为你的数据是分散的,您将需要为使用griddatascatteredInterpolant插值z对于给定xy

以下是使用griddata的简要示例。

% Sample at 1000 evenly spaced points over the x/y plane. 
[xq, yq] = meshgrid(linspace(min(x), max(x), 1000), ... 
        linspace(min(y), max(y), 1000)); 

zq = griddata(x, y, z, xq, yq); 

surf(xq, yq, zq) 

% Plot the original points as reference 
hold on 
plot3(x, y, z, 'o') 
+0

谢谢,这是最好的方法 – Soyol

+0

注意:我认为在更新的Matlab版本中'TriScatteredInterp'已被重命名为'ScatteredInterpolant'。 –

+1

@TasosPapastylianou是的。我的大脑显然没有工作。无法跟上MATLAB的弃用率。 – Suever