【问题标题】:plotting surface of a matrix in matlab在matlab中绘制矩阵的表面
【发布时间】:2013-11-19 11:41:17
【问题描述】:

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

【问题讨论】:

  • 如果您将数据转换为笛卡尔坐标,这可能是一个好的开始(请参阅 pol2cart)

标签: matlab


【解决方案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));

【讨论】:

  • 还是不行。我犯了同样的错误: ???在 78 处使用 ==> 冲浪时出错 数据维度必须一致。 ==> x 在 8 surf(X, Y, z) 处出错;
【解决方案2】:

我相信这就是你所需要的:

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

【讨论】:

  • 我得到这个错误:???在 164 处使用 ==> griddata>linear 时出错 计算 Delaunay 三角测量时出错。样本数据点可能是共线的。 ==> griddata 中的错误 133 zi = linear(x,y,z,xi,yi); ==> x at 4 vq = griddata(t(:,1),t(:,2),t(:,3),xq,yq);
  • 我确实在代码中有一行旧代码,但我没有收到您的错误。你是用这些数据还是用你的真实数据得到它?否则我会认为一对 xy 出现的次数可能多于一对。如果是这样,您需要先进行一些清理。
  • 我的实际数据出现错误。那么是否有任何功能或技巧可以进行清理,或者我必须手动执行此操作?感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多