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

问题描述:

我在理解如何在Matlab中对双线性插值进行编码时遇到了一些麻烦。我们的任务让我们使用这个功能;Matlab中的双线性插值(无内置函数)

B(X,Y)= Z_(IJ)+ A *(X - XJ)+ B *(Y - yi)的+ C *(X - XJ)(Y - yi)的

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

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

%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 
+0

为什么这里是'python'或'C++'标记? –

+0

如果你想要一个向量输出,那么你不应该用'i'和'j'来索引'zi'。 – excaza

+0

@taylorswift我知道python和C++,所以我假设如果有人能够用这两种格式来回答它,我也可以外推到Matlab。但我为你删除了它们。 – ovp

我不知道你正在使用什么内插顺序,但是从有限元分析中知道拉格朗日多项式或形函数可能会有所帮助。

如果我有一个函数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位于下方的位置ht,f3在右上角,f4在四边形的左上角。

插值函数的范围从零到一。