matlab插值问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 04:19:30
航行区域的警示线

某海域上频繁地有各种吨位的船只经过,为保证船只的航行安全,有关机构在低潮时对水深进行了测量,得到了如下的测量数据:

表:水道水深的测量数据
x 129.0 140.0 103.5 88.0 185.5 195.0 105.5
y 7.5 141.5 23.0 147.0 22.5 137.5 85.5
z 4 8 6 8 6 8 8

x 157.5 107.5 77.0 81.0 162.0 162.0 117.5
y 60.5 121.0 3.0 56.5 116.5 84.0 43.5
z 9 9 8 8 9 4 9

其中(x, y)为测量点,z为(x,y)处的水深(单位:英尺)。船的吨位可以用其吃水深度来反映,可分为4英尺、4.5英尺、5英尺和5.5英尺4档。
现在航运部门要在矩形海域(75,200)×(-50,150)上为不同吨位的航船设置警示标记,请根据测量的数据描述该海域的地貌,并绘制不同吨位的警示线,供航运部门使用。

提示:水深z是区域坐标(x,y)的函数z=z(x,y),测量数据只是它的部分取值,所以需使用插值方法计算水深函数(使用指令interp2),进行所需的转化,绘制函数图象和等值线图,并将不同的吃水线标记在图上。

数学建模中传统的插值经典例题
一般的直接使用Matlab内置的插值函数,高级的解法需要寻求最优的插值方法

clc;clear
X=[129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5];
Y=[7.5 141.5 23.0 147.0 22.5 137.5 85.5 60.5 121.0 3.0 56.5 116.5 84.0 43.5];
X=[4 8 6 8 6 8 8 9 9 8 8 9 4 9];
[X,Y]=meshgrid(x,y)
[xi,yi] = meshgrid(75:1:200,-50:1:150);
zi = interp2(X,Y,Z,xi,yi,'spline');%这里的方法你可以自己选
figure(1);
surfc(xi,yi,zi)
colorbar
xlabel('x'),ylabel('y')

如果这个的等值线不满足需要,再用contour(zi)自己重画一下。