2016-11-10 13 views
0

У меня возникли проблемы с пониманием того, как закодировать билинейную интерполяцию в Matlab. В нашем задании мы используем эту функцию;Билинейная интерполяция в Matlab (без встроенных функций)

В (х, у) = z_ (Ij) + а * (х - Xj) + Ь * (у - уг) + с * (х - Xj) (у - уг)

Мы» re build 2 функции, которые вычисляют коэффициенты (которые я уже сделал, и он передал алгоритм «проверки» от профессора) и другую функцию, которая вычисляет функцию. ниже - код, который у меня есть. Нам даны x, y, z, xi и yi, а a, b, c уже вычислены.

Моя проблема: Функция запускается, но возвращает матрицу, когда она должна возвращать только вектор. Однако он возвращает правильные значения в столбце 1, строки 1 & 2, что меня действительно сбивает с толку. Кроме того, значения, которые мы даем, представляют собой квадратную матрицу (z) и значения 1x2 x и y, однако во второй части проблемы мы представляем матрицу z = mxn, которая не является квадратной матрицей, поэтому мой код isn Не работаю для этого. Ниже мой текущий код. Любая помощь будет оценена, но я не ожидаю, что вы просто дадите мне ответ!

%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

Если вам нужен векторный вывод, вы не должны индексировать 'zi' как с' i', так и 'j'. – excaza

+0

@taylorswift Я знаю python и C++, поэтому я предполагаю, что кто-то может ответить на него в любом из этих форматов, я также могу экстраполировать Matlab. Но я удалил их для вас. – ovp

ответ

0

Я не знаю, что порядок интерполяции вы используете, но, зная, полиномы Лагранжа или функцию формы из анализа конечных элементов могут быть полезными здесь.

Если бы я была функция Р (х, у), где я хотел интерполяцию между четырьмя значениями Я написал бы это так:

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 в верхнем левом углу в четырехугольник.

Интерполяционные функции варьируются от нуля до единицы.

 Смежные вопросы

  • Нет связанных вопросов^_^