例题:
在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,估计在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入
x 129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5
y 7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5
z 4 8 6 8 6 8 8 9 9 8 8 9 4 9
代码:
clear, clc
x = [129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y = [7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z = [4 8 6 8 6 8 8 9 9 8 8 9 4 9];
% 此处z为水深,为了让图像更直观,这里取负号
z = -z;
% 在矩形区域(75,200)*(-50,150)做二维插值
%(cx, cy) 定义了一个矩形区域,其中x轴范围为75到200,步长为0.5;y轴范围为-50到150,步长为0.5
cx = 75:0.5:200;
cy = -50:0.5:150;
z3 = griddata(x, y, z, cx, cy', 'cubic'); % 海底曲面图
subplot(1, 2, 1)%将当前图形窗口分为1行2列的子图,并将第1个子图设置为当前活动图。
meshz(cx, cy, z3)%绘制了一个三维曲面图,并将 z3 数据按照 cx 和 cy 的坐标网格进行展示
xlabel('x')
ylabel('y')
zlabel('z')
% 做出水深<5的海域范围,z=5的等高线
subplot(1, 2, 2)
[c, h] = contour(cx, cy, z3);
%使用了 cx 和 cy 作为坐标网格的横纵坐标,z3 作为坐标网格上的值进行插值。函数的返回值 c 是等高线的高度矩阵,h 是绘制等高线的句柄。
clabel(c, h, -5);
%用于在等高线上添加标签,其中 -5 表示只在高度为 -5 的等高线上添加标签
%griddata是MATLAB中用于进行二维插值的函数,它可以根据给定的离散数据点,生成对应的网格上的插值结果。
%griddata函数的语法如下:
%ZI = griddata(X, Y, Z, XI, YI, method)
%参数说明:
%X和Y:表示给定数据点的横纵坐标,分别为列向量或二维数组。
%Z:表示给定数据点的值,与X和Y的大小相同。
%XI和YI:表示插值结果的横纵坐标,可以是列向量或二维数组。
%method:表示插值方法,可以是'linear'(线性插值,默认)、'cubic'(三次样条插值)或'nearest'(最近邻插值)。
运行图窗: