在matlab中绘制矩阵的表面

时间:2013-11-19 11:41:18

标签: matlab

我有一个矩阵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列)的波动。 我搜索了很多,我尝试了网站上的几乎所有建议,但总是面临数据维度必须同意的错误。 有人可以帮忙吗?提前谢谢。

2 个答案:

答案 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进行插值。