2016-11-10 208 views
0

我在理解如何在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

回答

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位於下方的位置ht,f3在右上角,f4在四邊形的左上角。

插值函數的範圍從零到一。