簡體   English   中英

在matlab中繪制矩陣的表面

[英]plotting surface of a matrix in matlab

我有一個包含三列x,y和z的矩陣t,分別包含我的模擬中的半徑,角度和信號值:

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列)的波動。 我進行了很多搜索,並嘗試了該站點中幾乎所有的建議,但始終面臨諸如數據維必須一致的錯誤。 有人可以幫忙嗎? 提前致謝。

您可以使用您的可用點數以在規則網格上得到插值點,然后描述創建一個表面的情節在這里

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));

我相信這是您需要的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM