在matlab中平滑轮廓图

时间:2016-04-07 08:02:05

标签: matlab matlab-figure

我想从X Y Z矩阵绘制平滑轮廓图。

sf = fit([X Y] Z, 'poly23');
plot(sf);

我没有得到平滑的曲线.. 我需要的?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用griddatacsaps等功能。他们将一起引导您按照您的意愿顺利完成结果。第一个函数为数据矩阵集添加了额外的点。第二个使结果更平滑。代码示例如下。在该示例中,首先在X方向上进行平滑,然后在Y方向上进行平滑。尝试使用resolutionsmoothing_parameter(尽管这些参数的当前集合应该没问题。)

x = min_x:step_x:max_x;
y = min_y:step_y:max_y;
resolution = 10;

xg = min_x:(step_x/resolution):max_x;
yg = min_y:(step_y/resolution):max_y;
[X,Y] = meshgrid(x,y);
[XG,YG] = meshgrid(xg,yg);    


smoothing_parameter = 0.02;
fitted = griddata(X,Y,Z,XG,YG,'cubic');
fitted_smoothed_x = csaps(xg,fitted,smoothing_parameter,xg);
fitted_smoothed_xy = csaps(yg,fitted_smoothed_x',smoothing_parameter,yg);

surf(XG,YG,fitted_smoothed_xy');

编辑:如果您想获得等高线图,您可以执行以下操作,例如,如下所示。由于我没有真实的数据,我将使用内置函数peaks来生成一些数据。

[X,Y,Z] = peaks(30);
figure
surfc(X,Y,Z)
view([0 90])
zlim([-10 -8])

在这里,您只需看看上面的轮廓图位于曲面下方。