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.
   148   149   150   151   152   153   154   155   156   157   158