лагранжева интерполяция - PullRequest
0 голосов
/ 15 ноября 2011

Я проверил ответы об интерполяции Лагранжа, но не смог найти подходящего для моего вопроса. Я пытаюсь использовать интерполяцию Лагранжа для поверхности с Matlab. Допустим, у меня есть вектор x и y и f = f (x, y). Я хочу интерполировать эту функцию. Я думаю, то, что я сделал, математически правильно:

function q = laginterp(x,y,f,ff)

n = length(x);
m = length(y);
v = zeros(size(ff));
for k = 1:n
    for l = 1:m
        w1 = ones(size(ff));
        w2 = ones(size(ff))
        for j = [1:k-1 k+1:n]
            for j = [1:l-1 l+1:n]
                w1 = (x-x(j))./(x(k)-x(j)).*w1;
                w2 = (y-y(i))./(y(l)-y(i)).*w2;
            end
        end
        ff = ff + w1.*w2.*f(k,l);
    end
end

Это моя функция, и тогда я жду ответа для любого заданного x, y, f, например

x= 0:4;
y = [-6 -3 -1 6];
f=[2 9 4 25 50];

v = laginterp(x,y,f,ff);
plot3(x,y,'o',f,q,'-')

Я всегда благодарен за любую помощь!

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Лагранжева интерполяция по сути НИКОГДА не является хорошим выбором для интерполяции.Да, он используется в первой главе многих текстов, в которых обсуждается интерполяция.Это делает это хорошо?Нет. Это просто делает его удобным, хорошим способом ВСТАВИТЬ идеи интерполяции, а иногда и доказать некоторые простые результаты.

Серьезная проблема заключается в том, что пользователь решает использовать этот жалкий отговорки для метода интерполяции, инаходит, что о чудо, это работает на 2 или 3 балла.Вау, посмотри на это!Таким образом, очевидным продолжением является использование его в их реальных наборах данных с 137 точками или 10000 точками данных или более, некоторые из которых обычно являются копиями.Что случилось?Почему мой код не дает хороших результатов?Или, может быть, они просто слепо предположят, что это сработало, а затем опубликуют статью, содержащую бессмысленные результаты.

Да, на Файлообменнике есть инструмент Лагранжа.Да, он даже, вероятно, получил несколько хороших рецензий, написанных студентами первого курса, которые понятия не имели, на что они смотрят, и которые, к сожалению, не имеют понятия о численном анализе.Не используйте его.

Если вам нужен инструмент интерполяции в MATLAB, вы можете начать с griddata или TriScatteredInterp.Это даст вполне разумные результаты.Другими методами являются интерполяции радиальных базисных функций, среди которых также есть инструмент на FEX и широкий спектр сплайнов, мой личный фаворит.Обратите внимание, что ЛЮБАЯ интерполяция, используемая вслепую без понимания или оценки ловушек, может и будет давать бессмысленные результаты.Но это верно почти для любого численного метода.

1 голос
/ 15 ноября 2011

Это не решает ваш вопрос напрямую, но есть функция интерполяции Лагранжа на Matlab File Exchange , которая кажется довольно популярной.

...