假设我有一个函数z=f(x,y)
。我在广场[0:3,0:3]
(x=[0,1,2,3]
y=[0,1,2,3]
)中以16分计算出来。现在我想做双三次插值。但结果是,我需要这种插值的系数。
interp2
让我计算预定义搭配点中的插值结果,但它本身并不返回系数。
spline
仅适用于1D功能。
知道如何获得双三次插值系数? 我需要系数,因为之后我打算将它们用于数值解算器(我需要我的函数的解析表达式)。
答案 0 :(得分:1)
我刚写下了返回系数的函数。假设16个值来自(x = -dx,0,dx,2dx)和(y = -dx,0,dx,2dx)。我还编写了函数'Deriv',它使我的数值函数的衍生物相对于x,y,xy:
function [out]=Deriv(in,str,dx)
switch str
case 'x'
out=(circshift(in,[0 -1])-circshift(in,[0 1]))./(2*dx);
case 'y'
out=(circshift(in,[-1 0])-circshift(in,[1 0]))./(2*dx);
case 'xy'
out=(circshift(in,[-1 -1])+circshift(in,[1 1])-circshift(in,[-1 1])-circshift(in,[1 -1]))./(4*dx*dx);
end
function out=bl(in1,in2)
out=[in1^3, in1^2, in1, 1,in2*[in1^3, in1^2, in1, 1], in2^2*[in1^3, in1^2, in1, 1]...
in2^3*[in1^3, in1^2, in1, 1]];
end
function out=blx(in1,in2)
out=[3*in1^2, 2*in1, 1, 0,in2*[3*in1^2, 2*in1, 1, 0], in2^2*[3*in1^2, 2*in1, 1, 0]...
in2^3*[3*in1^2, 2*in1, 1, 0]];
end
function out=bly(in1,in2)
out=[0,0,0,0,[in1^3, in1^2, in1, 1], 2*in2*[in1^3, in1^2, in1, 1]...
3*in2^2*[in1^3, in1^2, in1, 1]];
end
function out=MyBicubic(in,dx)
A=zeros(16,16); C=zeros(16,1);
A(1,:)=bl(0,0); C(1)=in(2,2);
A(2,:)=bl(dx,0); C(2)=in(2,3);
A(3,:)=bl(0,dx); C(3)=in(3,2);
A(4,:)=bl(dx,dx); C(4)=in(3,3);
A(5,:)=blx(0,0); temp=Deriv(in,'x',dx); C(5)=temp(2,2);
A(6,:)=blx(dx,0); C(6)=temp(2,3);
A(7,:)=blx(0,dx); C(7)=temp(3,2);
A(8,:)=blx(dx,dx); C(8)=temp(3,3);
A(9,:)=bly(0,0); temp=Deriv(in,'y',dx); C(9)=temp(2,2);
A(10,:)=bly(dx,0); C(10)=temp(2,3);
A(11,:)=bly(0,dx); C(11)=temp(3,2);
A(12,:)=bly(dx,dx); C(12)=temp(3,3);
A(13,:)=blxy(0,0); temp=Deriv(in,'xy',dx); C(13)=temp(2,2);
A(14,:)=blxy(dx,0); C(14)=temp(2,3);
A(15,:)=blxy(0,dx); C(15)=temp(3,2);
A(16,:)=blxy(dx,dx); C(16)=temp(3,3);
out=A\C;
end