我有一个矩阵t,其中包含三列x,y和z,分别包含模拟中的半径,角度和信号值:
t = [
x y z
10 0 -1
10 2 -11
10 3 -10
20 5 -25
20 7 -100
20 20 -101
20 3 -12
30 12 -104
. . .
. . .
. . .
]
如您所见,值没有任何顺序,第一列(x)也有很多重复值。我想要的是制作一个漂亮的表面,显示信号值(z列)相对于半径和角度值(x和y列)的波动。 我搜索了很多,我尝试了网站上的几乎所有建议,但总是面临数据维度必须同意的错误。 有人可以帮忙吗?提前谢谢。
答案 0 :(得分:1)
您可以使用可用点在常规网格上获取插值点,然后按照here所述创建曲面图:
xs = linspace(min(t(:,1)), max(t(:,1)), 50);
ys = linspace(min(t(:,2)), max(t(:,2)), 50);
[x, y] = meshgrid(xs, ys);
f = scatteredInterpolant(t(:,1), t(:,2), t(:,3));
z = f(x, y);
surf(x, y, z);
另一种方法是对现有点进行三角测量并使用trisurf
:
tri = delaunay(t(:,1), t(:,2));
trisurf(tri, t(:,1), t(:,2), t(:,3));
答案 1 :(得分:0)
我相信这就是你所需要的:
M = [10, 0, -1
10, 2, -11
10, 3, -10
20, 5 , -25
20, 7 , -100
20, 20, -101
20, 3, -12
30, 12, -104];
[xq,yq] = meshgrid(min(M(:,1)):1:max(M(:,1)), min(M(:,2)):1:max(M(:,2)));
vq = griddata(M(:,1),M(:,2),M(:,3),xq,yq);
surf(xq,yq,vq)
为了绘制曲面,您需要确定使用点之间的值。在这种情况下,我使用griddata
进行插值。