Интерполяционное возмущение Лагранжа в матлабе - PullRequest
0 голосов
/ 05 мая 2019

Это мой код для нахождения центрированных коэффициентов для полиномиальной интерполяции Лагранжа:

% INPUT
% f f scalar - valued function
% interval interpolation interval [a, b]
% n interpolation order
%
% OUTPUT
% coeff centered coefficients of Lagrange interpolant
function coeff = lagrangeInterp (f, interval , n)

a = interval(1);
b = interval(2);

x = linspace(a,b,n+1);
y = f(x);

coeff(1,:) = polyfit(x,y,n);
end

Который вызывается в следующем скрипте

%Plot lagrangeInterp and sin(x) together
hold on
x = 0:0.1*pi:2*pi;
for n = 1:1:4
    coeff = lagrangeInterp(@(x)sin(x),[0,2*pi],n);
    plot(x,polyval(coeff,x,'-'));
end
y = sin(x);
plot(x,y);
legend('1st order','2nd order','3rd order','4th order','sin(x)');

Чтобы проверить стабильность, я бы хотел нарушить функцию (например, g (x) = f (x) + epsilon). Как бы я пошел по этому поводу?

1 Ответ

0 голосов
/ 07 мая 2019

Ну, маленький трюк для тебя.

Вы знаете, randn([m,n]) в Matlab генерирует случайную матрицу m * n. Смысл в том, чтобы генерировать случайный вектор и интерполировать функцию x. Как это:

x = linspace(a,b,n+1); % Your range of input
g = @(ep,xx)f(xx)+interp1(x,ep*randn([length(x),1]),xx);
...