Matlab中的双线性插值(没有内置函数)

时间:2016-11-10 17:52:17

标签: matlab math interpolation

我在理解如何在Matlab中编写双线性插值方面遇到了一些麻烦。我们的任务让我们使用这个功能;

B(x,y)= z_(ij)+ a *(x - xj)+ b *(y - yi)+ c *(x - xj)(y - yi)

我们正在构建2个函数,一个计算系数(我已经完成并且它通过了教授的'check'算法)和另一个计算函数的函数。下面是我的代码。 我们给出了x,y,z,xi和yi,而a,b,c已经被计算出来了。

我的问题:该函数运行但只返回一个矩阵,它只返回一个向量。但是,它确实返回第1列第1行和第1行中的正确值。 2这真让我困惑。此外,我们给出的值是方阵(z)和1x2 x和y值,但是,在问题的第二部分,我们给出了一个z = mxn矩阵,它不是一个方阵,所以我的代码是为此工作。以下是我目前的代码。任何帮助将不胜感激,但我不指望你只是给我答案!

%Given x = [0,1], y=[0,1], z=[0,1;2,4], a = 1, b = 2, c = 1, xi = [0,.5],      yi = [0,.5]

function zi = bilinear_eval(x, y, z, a, b, c, xi, yi )
    [m,n] = size(z);
    for j = 1:length(xi)
        for i = length(x)
        zi(i,j) = z(j,j) + a*(xi(i) - x(j)) + b*(yi(i) - y(j)) + c*(xi(i) - x(j))*(yi(i) - y(j))
        end
    end
    end

1 个答案:

答案 0 :(得分:0)

我不知道您使用的插值顺序,但是在此处了解拉格朗日多项式或有限元分析中的形状函数可能会有所帮助。

如果我有一个函数f(x,y),我想在四个值之间进行插值,我就这样写:

f(x, y) = f1*N1(r, s) + f2*N2(r, s) + f3*N3(r, s) + f4*N4(r, s)

,其中

-1 <= r <= 1
-1 <= s <= 1

N1(r, s) = (1-r)*(1-s)/4.0
N2(r, s) = (1+r)*(1-s)/4.0
N3(r, s) = (1+r)*(1+s)/4.0
N4(r, s) = (1-r)*(1+s)/4.0

这种安排假定四个点的排列方式是f1位于左下方,f2位于右下方,f3位于右上方,f4位于左上方的四边形。

插值函数的值范围为0到1。

相关问题