function [z]=BICUBICINTERPOL(xdata,ydata,zdata,dxdata,dydata,dxdydata,x,y) %BICUBICINTERPOL function perform a bicubic interpolation along the plane % xy for the underlying function z at data point with coordinates x and y. % The dxdata represents the partial derivatives of the underlying function % at points on xdata and ydata, dydata represents the partial derivatives % of the underlying function at points on xdata and ydata, and dxdydata are % the cross double derivatives at the same points. % Data values on xdata, ydata and zdata must surround xy point. % BICUBICINTERPOL perform extrapolations as well. % % % (x4,y4) (x3,y3) % (0,1) * -------------- * (1,1) % | | % | | % | * | % | (x,y) | % | | % (0,0) * -------------- * (1,0) % (x1,y1) (x2,y2) % % % xdata=[x1,x2,x3,x4] % ydata=[y1,y2,y3,y4] % zdata=[z1,z2,z3,z4] % x1=x4 % x2=x3 % y1=y2 % y3=y4 % dxdata=[dx1,dx2,dx3,dx4] % dydata=[dy1,dy2,dy3,dy4] % dzdata=[dz1,dz2,dz3,dz4] % dxdydata=[dxdy1,dxdy2,dxdy3,dxdy4] % % % EX=(x-xdata(1))/(xdata(2)-xdata(1)); EY=(y-ydata(2))/(ydata(3)-ydata(2)); F1=((-1+EX)^2)*(1+2*EX)*((-1+EY)^2)*(1+2*EY); F2=(-EX^2)*(-3+2*EX)*((-1+EY)^2)*(1+2*EY); F3=(EX^2)*(-3+2*EX)*(EY^2)*(-3+2*EY); F4=-((-1+EX)^2)*(1+2*EX)*(EY^2)*(-3+2*EY); F5=((-1+EX)^2)*(EX)*((-1+EY)^2)*(1+2*EY); F6=(-1+EX)*(EX^2)*((-1+EY)^2)*(1+2*EY); F7=-(-1+EX)*(EX^2)*(EY^2)*(-3+2*EY); F8=-((-1+EX)^2)*(EX)*(EY^2)*(-3+2*EY); F9=((-1+EX)^2)*(1+2*EX)*((-1+EY)^2)*EY; F10=-(EX^2)*(-3+2*EX)*((-1+EY)^2)*EY; F11=-(EX^2)*(-3+2*EX)*(-1+EY)*(EY^2); F12=((-1+EX)^2)*(1+2*EX)*(-1+EY)*(EY^2); F13=((-1+EX)^2)*(EX)*((-1+EY)^2)*EY; F14=(-1+EX)*(EX^2)*((-1+EY)^2)*EY; F15=(-1+EX)*(EX^2)*(-1+EY)*(EY^2); F16=((-1+EX)^2)*(EX)*(-1+EY)*(EY^2); z=F1*zdata(1)+F2*zdata(2)+F3*zdata(3)+F4*zdata(4)+... F5*dxdata(1)+F6*dxdata(2)+F7*dxdata(3)+F8*dxdata(4)+... F9*dydata(1)+F10*dydata(2)+F11*dydata(3)+F12*dydata(4)-... F13*dxdydata(1)-F14*dxdydata(2)-F15*dxdydata(3)-F16*dxdydata(4); end