Page 153 - Applied Numerical Methods Using MATLAB
P. 153
142 INTERPOLATION AND CURVE FITTING
the bilinear interpolation. The bilinear interpolation for a point (x, y) on the rect-
angular sub-region having (x m−1 ,y n−1 ) and (x m ,y n ) as its left-upper/right-lower
corner points is described by the following formula.
x m − x x − x m−1
z(x, y n−1 ) = z m−1,n−1 + z m,n−1 (3.7.1a)
x m − x m−1 x m − x m−1
x m − x x − x m−1
z(x, y n ) = z m−1,n + z m,n (3.7.1b)
x m − x m−1 x m − x m−1
y n − y y − y n−1
z(x, y) = z(x, y n−1 ) + z(x, y n )
y n − y n−1 y n − y n−1
1
= {(x m − x)(y n − y)z m−1,n−1
(x m − x m−1 )(y n − y n−1 )
+ (x − x m−1 )(y n − y)z m,n−1 + (x m − x)(y − y n−1 )z m−1,n
+ (x − x m−1 )(y − y n−1 )z m,n } for x m−1 ≤ x ≤ x m ,y n−1 ≤ y ≤ y n
(3.7.2)
function Zi = intrp2(x,y,Z,xi,yi)
%To interpolate Z(x,y) on (xi,yi)
M = length(x); N = length(y);
Mi = length(xi); Ni = length(yi);
for mi = 1:Mi
for ni = 1:Ni
for m = 2:M
for n = 2:N
break1 = 0;
if xi(mi) <= x(m) & yi(ni) <= y(n)
tmp = (x(m)-xi(mi))*(y(n)-yi(ni))*Z(n - 1,m - 1)...
+(xi(mi) - x(m-1))*(y(n) - yi(ni))*Z(n - 1,m)...
+(x(m) - xi(mi))*(yi(ni) - y(n - 1))*Z(n,m - 1)...
+(xi(m) - x(m-1))*(yi(ni) - y(n-1))*Z(n,m);
Zi(ni,mi) = tmp/(x(m) - x(m-1))/(y(n) - y(n-1)); %Eq.(3.7.2)
break1 = 1;
end
if break1 > 0 break, end
end
if break1 > 0 break, end
end
end
end
This formula is cast into the MATLAB routine “intrp2()”, which is so named
in order to distinguish it from the MATLAB built-in routine “interp2()”. Note
that in reference to Fig. 3.8, the given values of data at grid points (x(m),y(n))
and the interpolated values for intermediate points (xi(m),yi(n)) are stored in
Z(n,m) and Zi(n,m), respectively.