For fun I try the tensorial pchip with different order:
clear
n = 5;
z = peaks(n);
x = (1:n)';
xi = linspace(1,n,128)';
z1 = pchip(x,z,xi);
z1 = pchip(x,z1',xi)';
z2 = pchip(x,z',xi)';
z2 = pchip(x,z2,xi);
subplot(2,2,3);
surf(z); title('original data')
subplot(2,2,1);
surf(z1); title('tensorial 1/2')
subplot(2,2,2);
surf(z2); title('tensorial 2/1')
subplot(2,2,4);
surf(z1-z2); title('difference')
% Bruno
clear
n = 5;
z = peaks(n);
x = (1:n)';
xi = linspace(1,n,128)';
z1 = pchip(x,z,xi);
z1 = pchip(x,z1',xi)';
z2 = pchip(x,z',xi)';
z2 = pchip(x,z2,xi);
subplot(2,2,3);
surf(z); title('original data')
subplot(2,2,1);
surf(z1); title('tensorial 1/2')
subplot(2,2,2);
surf(z2); title('tensorial 2/1')
subplot(2,2,4);
surf(z1-z2); title('difference')
% Bruno