繁体   English   中英

Matlab - 使用矩阵、非均匀、分散数据对 3D 冲浪进行插值

[英]Matlab - Interpolation over a 3D surf with matrix, nonuniform, scattered data

我目前正在尝试插入以下曲面图以添加更多点并使其更平滑:

hSurf = 冲浪(X,Y,Z)

X、Y 和 Z 都是大小为 nXm 的矩阵。

在寻找解决方案时,我找到了函数 griddata,但我只找到了一个以 X、Y 和 Z 作为向量的语法。 因此任何尝试都没有成功!

你有想法吗? 多谢!

库格洛夫

使用griddata是正确的方法。 首先,使用meshgrid定义一个规则网格,例如

[x,y] = meshgrid(-0.2160:-0.0001:-0.2319,0.2161:0.0001:0.2319); % replace the values by meaningful borders

然后将非规则网格XY映射到规则网格

z = griddata(X,Y,Z,x,y,'cubic')

其中'cubic'可以替换为首选方法。

您可以将griddata参数设置为naturalcubicv4 这将进行插值并使您的图形与非均匀数据平滑
下面是一个示例 MATLAb 代码

x=[32 20 67 1 98 34 57 65 24 82 47 55 8 51 13 14 18 30 37 39 10 33 21 26 38 81 83 60 95 22 17 5 72 46 99 52 12 25 96 29 70 85 43 69 19 78 97 31 89 53 2 91 48 71 61 15 36 84 94 50 11 80 6 7 49 74 9 88 40 79 27 68 73 64 63 59 86 23 35 58 45 28 100 42 93 87 16 90 41 66 54 92 77 4 62 76 75 56 3 44];
y=[96 75 24 9 83 49 27 77 3 23 17 31 40 13 7 52 51 21 98 47 64 79 78 91 44 16 15 100 84 99 63 68 70 30 54 76 97 73 33 5 88 8 71 66 62 25 60 42 72 45 18 11 28 59 89 65 10 55 69 81 12 26 20 95 87 41 74 50 93 22 43 90 14 34 82 35 56 38 80 32 1 57 6 36 37 61 29 58 2 48 4 46 67 53 92 86 94 19 39 85];
z=[55 31 11 45 83 36 86 49 15 57 42 46 8 94 88 47 54 81 98 41 32 35 56 85 9 89 37 60 23 62 67 100 78 76 73 80 10 20 68 34 77 93 1 63 53 12 22 99 91 40 84 24 33 3 43 19 92 97 6 82 64 25 26 79 95 4 44 58 5 21 70 29 65 87 96 90 51 14 18 2 72 28 71 39 52 7 27 59 50 61 48 30 66 69 17 13 74 16 75 38];

xlin = linspace(min(x), max(x), 100);
ylin = linspace(min(y), max(y), 100);
[X,Y] = meshgrid(xlin, ylin);
% Z = griddata(x,y,z,X,Y,'natural');
% Z = griddata(x,y,z,X,Y,'cubic');
Z = griddata(x,y,z,X,Y,'v4');
mesh(X,Y,Z)
axis tight; hold on
plot3(x,y,z,'.','MarkerSize',15)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM