clc;clear all;close all;
n = 1:1:10000;
sig = sin(n/100);
k = 0;
for i = 1:4:10000
k = k + 1;
x_arr = n(i:i+3);
y_arr = sig(i:i+3);
arr_new_y(k) = LagrangeInterpolation(x_arr,y_arr,4,mean(x_arr));
arr_new_x(k) = mean(x_arr);
end
figure(1);
plot(n,sig);hold on;
scatter(arr_new_x,arr_new_y);grid on;
function [y_return] = LagrangeInterpolation(x_arr,y_arr,n,x_in)
% 提早返回
if(n <= 1)
y_return = 0;
return;
end
% (x -x2)(x -x3)(x -x4) (x -x1)(x -x3)(x -x4)
% 计算公式 f(x) = f(x1)* -------------------- + f(x2)* --------------------
% (x1-x2)(x1-x3)(x1-x4) (x2-x1)(x2-x3)(x2-x4)
sum = 0; % 多项式累加和
mul = 0; % 乘法法项累乘积
for i = 1:1:n
mul = y_arr(i);
% 计算分子和分母乘积
mul_numerator = 1;
mul_denominator = 1;
for j = 1:1:n
if(j==i)
continue;
else
mul_numerator = mul_numerator * (x_in - x_arr(j));
mul_denominator = mul_denominator * (x_arr(i) - x_arr(j));
end
end
mul = (mul * mul_numerator) / mul_denominator;
sum = sum + mul;
end
y_return = sum;
return;
end