引例1:如何绘制山区地貌图
3600
3200
2800
2400
2000
1600
1200
1480 1500 1550 1510 1430 1300 1200 980
1500 1550 1600 1550 1600 1600 1600 1550
1500 1200 1100 1550 1600 1550 1380 1070
1500 1200 1100 1350 1450 1200 1150 1010
1390 1500 1500 1400 900 1100 1060 950
1320 1450 1420 1400 1300 700 900 850
1130 1250 1280 1230 1040 900 500 700
Y/x 1200 1600 2000 2400 2800 3200 3600 4000
2000
1500
Z
1000
500
0
0
5000
4000
3000
1000
2000
3000
1000
2000
Y
4000
5000
X
6000
0
y
y
x
在某海域测得一些点 (x,y)处的水深z由下表给
出,船的吃水深度为 5英尺,在矩形区域( 75,200)
*(-50,150)里的哪些地方船要避免进入。
129 140 103.5 88 185.5 195 105
7.5 141.5 23 147 22.5 137.5 85.5
4 8 6 8 6 8 8
157.5 107.5 77 81 162 162 117.5
-6.5 -81 3 56.5 -66.5 84 -33.5
9 9 8 8 9 4 9
x
y
z
x
y
z
二
维
插
值
的
提
法
第一种(网格节点)
已知 mn个节点
(xi, xj, zij) ( i=1, 2, …,m; j=1, 2, …, n )
其中xi, yj互不相同,不妨设
a=x1
二维插值的提法
二维插值的提法
y
y3
y2
y1
(x*, y*)
x1
x2
x3
x4
x5
x
第二种(散乱节点)
i
i
i
其中
已知n个节点
(
,
,
x
y
z
(
,
)
i yx
求任一插值点
.*z
处的插值
i
()
i
2,1
,...,
n
)
互不相同,
)(
(
x
y
,
*
*
(
,
i yx
i
))
z
,(
yxf
),
通过全部已知节点 ,即
构造一个二元函数
)
(
xf
i
,
(
或
(
xf
i
y
i
,
j
y
i
z
ij
,1,0
)
z
i
,
;
jm
(
i
,1,0
,1,0
)
,
n
)
n
*
).
再用
),( yxf
计算插值,即
*
z
*
(
,
yxf
网格节点插值法:
最邻近插值;
分片线性插值;
双线性插值;
双三次插值。
散点数据插值法:
修正Shephard法
y
(x1, y2)
(x2, y2)
(x1, y1)
(x2, y1)
x
注意:最邻近插值一般不连续。具有连续性的最简
单的插值是分片线性插值。
y
(xi, yj+1)
(xi+1, yj+1)
(xi, yj)
(xi+1, yj)
x
3
四个插值点(矩形的四个顶点)处的函
数值: f (xi, yj)=f1, f (xi+1, yj)=f2,
f (xi+1, yj+1)=f3, f (xi, yj+1)=f4
第一片(下三角形区域):
y
y
x
1j
1i
y
x
j
i
x(
)x
i
y
j
插值函数为:
f
)y,x(f
1
f(
2
f
1
x)(
)x
i
f(
3
f
2
y)(
)y
j
y
(x1, y2)
(x1, y1)
(x2, y2)
(x2, y1)
x
双线性插值是一片一片的空间二次曲面构成。
插值函数的形式如下:
ax(
)y,x(f
cy)(b
)d
第二片(上三角形区域):
1j
y
y
x
1i
y
x
j
i
y)xx(
i
i
插值函数为:
f
)y,x(f
1
f(
4
f
1
y)(
)y
j
f(
3
f
4
x)(
)x
i
注意:(x, y)当然应该是在插值节点所形成的矩形区
域内。显然,分片线性插值函数是连续的;
网格节点的插值计算;
散点数据的插值计算;
用MATLAB作插值计算小结
82 81 80 82 84
79 63 61 65 81
84 84 82 85 86
例:测得平板表面 3*5网格点处的温度
分别为:
x
y
试作出平板表面的温度分布曲面
z=f(x,y)的图形。
4
二维插值:已有程序
z=interp2(x0,y0,z0,x,y,’method’)
被插值点
插值方法
插值
节点
被插值点
的函数值
Method可取:
‘nearest’ 最邻近插值;‘linear’ 双线性插
值;
‘cubic’ 双三次插值;缺省时 , 双线性插值。
注意:x0,y0为向量,但z0是矩阵,其
列数等于x0的长度,行数等于y0的长度。
xlabel('Width of Plate'),
ylabel('Depth of Plate')
zlabel('Degrees Celsius'),
axis('ij'),grid, pause;
zlin=interp2(width,depth,temps,wi,di,…
'cubic');
figure(3);
mesh(wi,di,zlin)
xlabel('Width of Plate'),
ylabel('Depth of Plate')
zlabel('Degrees Celsius'),
axis('ij'),grid
M文件
width=1:5;
wenduqm.m
depth=1:3;
temps=[82 81 80 82 84;79 63 61…
65 81;84 84 82 85 86];
mesh(width,depth,temps);pause
di=1:.1:3;di=di';
加密数据点
wi=1:.1:5;
zlin=interp2(width,depth,temps,…
wi,di,'linear');
figure(2);
mesh(wi,di,zlin);
z=griddata(x0,y0,z0,x,y,’method’)
被插值点
的函数值
插值节点
被插值点
注意:x0,y0,z0均为向量,长度相等。
Method可取
‘nearest’,’linear’,’cubic’,’v4’;
‘linear’是缺省值。
5
分别用最近邻点插值、线性插值
和三次插值加密数据点,并分别作
出这三组数据点的网格图。
要在某山区方圆大约 27平方公里范围内修
建一条公路,从山脚出发经过一个居民区,
再到达一个矿区。横向纵向分别每隔 400米
测量一次,得到一些地点的高程: (平面区域
0<=x<=5600,0<=y<=4800) ,首先需作
出该山区的地貌图和等高线图。
注意观察双线性插值方法和双三
次插值方法的插值效果的差异。
4500
4000
3500
3000
2500
2000
1500
1000
500
4500
4000
3500
3000
2500
2000
1500
1000
500
0
0
2000
4000
0
0
2000
4000
6
4200
4000
3800
3600
3400
3200
3000
2800
2600
Y
4200
4000
3800
3600
3400
3200
3000
2800
2600
Y
1500
2000
X
2500
1500
2000
X
2500
在某海域测得一些点 (x,y)处的水深z由下表给出,
船的吃水深度为 5英尺,在矩形区域( 75,200)*
(-50,150)里的哪些地方船要避免进入。
129 140 103.5 88 185.5 195 105
7.5 141.5 23 147 22.5 137.5 85.5
4 8 6 8 6 8 8
157.5 107.5 77 81 162 162 117.5
-6.5 -81 3 56.5 -66.5 84 -33.5
9 9 8 8 9 4 9
x
y
z
x
y
z
假设:海底平滑
1.作出测量点的分布图;
2.求出矩形区域( 75,200)*(-50,150)的
细分网格节点之横、纵坐标向量;
3.利用MATLAB中的散点插值函数求网格节点
的水深;
4.作出海底曲面图形和等高线图;
5.作出水深小于 5的海域范围。
clear;
x=[129 140 103.5 88 185.5 195 105.5
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];
plot(x,y,'+');
pause
7
nx=100;
px=linspace(75,200,nx);
ny=200;
py=linspace(-50,150,ny);
求出测量范
围内的细网
格的节点的
x,y坐标数组
pf=griddata(x,y,z,px,py,’cubic ’);
figure(2),meshz(px,py,pf),
rotate3d,pause
figure(3),surf(px,py,pf),
rotate3d,pause
Contour(px,py,pf,
用插值方法
求出网格节
点处的z坐
标矩阵, 并
作出三维图
150
100
50
0
-50
-100
60
80
100
120
140
160
180
200
figure(4),contour(px,py,pf,[-5 -5]);
grid,pause
[i1,j1]=find(pf<-5);
for k=1:length(i1)
pf(i1(k),j1(k))=-5;
end
figure(5)
meshc(px,py,pf),rotate3d
图2到4: 利用网格
节点的x,y坐标向量
px,py及其对应的z
坐标矩阵pf,作出网
格线图和填充曲面图,
水深5英尺处海底曲
面的等高线
150
100
50
0
-50
80
100
120
140
160
180
200
8