拉格朗日插值讲解与MATLAB例程
文章目录
- 拉格朗日插值
- 拉格朗日插值的基本概念
- 已 知 数 据 点
- 拉格朗日基多项式
- 插值多项式
- MATLAB源代码
- 代码讲解
- 运行结果
- 拉格朗日插值的特点(优缺点)
拉格朗日插值
拉格朗日插值是一种用于在已知数据点之间进行插值的数学方法。它通过构造拉格朗日基多
项式来估计在这些已知点之间的值。该方法特别适合于需要通过一组离散数据点计算连续函
数值的情况。
拉格朗日插值的基本概念
已 知 数 据 点
·假设有 n + 1 n+1 n+1个已知数据点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , … , ( x n , y n ) (x_0,y_0),(x_1,y_1),\ldots,(x_n,y_n) (x0,y0),(x1,y1),…,(xn,yn)。
拉格朗日基多项式
·对于每一个数据点 ( x k , y k ) (x_k,y_k) (xk,yk),可以构造一个拉格朗日基多项式 L k ( x ) L_k(x) Lk(x),其定义为:
L k ( x ) = ∏ 0 ≤ j ≤ n j ≠ k x − x j x k − x j L_k(x)=\prod_{\substack{0\leq j\leq n\\j\neq k}}\frac{x-x_j}{x_k-x_j} Lk(x)=0≤j≤nj=k∏xk−xjx−xj
·这个多项式在 x = x k x=x_k x=xk时为 1,而在其他已知点 x j x_j xj ( j ≠ k ) j\neq k) j=k)时为0。
插值多项式
·拉格朗日插值多项式 P ( x ) P(x) P(x)被定义为所有基多项式的加权和:
P ( x ) = ∑ k = 0 n y k L k ( x ) P(x)=\sum_{k=0}^ny_kL_k(x) P(x)=k=0∑nykLk(x)
· 这个多项式在每个已知数据点处的值等于对应的 y k y_k yk 。
MATLAB源代码
% 拉格朗日插值示例
% 定义已知数据点
x = [1, 2, 3, 4]; % x坐标
y = [1, 4, 9, 16]; % y坐标(例如 y = x^2)
% 定义插值点
x_interp = linspace(1, 4, 100); % 在 [1, 4] 之间生成100个插值点
% 计算插值结果
y_interp = lagrangeInterpolation(x, y, x_interp);
% 绘图
figure;
plot(x, y, 'ro', 'MarkerSize', 10, 'DisplayName', '已知数据点'); % 原始数据点
hold on;
plot(x_interp, y_interp, 'b-', 'LineWidth', 2, 'DisplayName', '拉格朗日插值'); % 插值结果
xlabel('X');
ylabel('Y');
title('拉格朗日插值法');
legend;
grid on;
hold off;% 定义插值函数
function L = lagrangeInterpolation(x, y, x_interp)
n = length(x);
L = zeros(size(x_interp));
for k = 1:n
% 计算拉格朗日基多项式
L_k = ones(size(x_interp));
for j = [1:k-1, k+1:n]
L_k = L_k .* (x_interp - x(j)) / (x(k) - x(j));
end
L = L + y(k) * L_k; % 累加每个基多项式的贡献
end
end
代码讲解
- 已知数据点定义:
x x x 和 y y y 数组包含已知数据点的坐标。 - 插值函数:
lagrangeInterpolation 函数实现拉格朗日插值。输入为已知数据点 x 和 y,以及插值点 x_interp。
使用双重循环计算每个拉格朗日基多项式并累加其贡献。 - 插值点生成:
使用 linspace 函数在给定区间内生成插值点。 - 计算插值结果:
调用 lagrangeInterpolation 函数计算插值值 y_interp。 - 绘图:
使用 plot 函数绘制已知数据点和插值结果,便于可视化。
运行结果
拉格朗日插值的特点(优缺点)
- 优点:
概念简单,易于理解和实现。
适合数据点数量较少的情况。 - 缺点:
计算复杂度较高,尤其是当数据点数量增加时。
可能会出现龙格现象,即在区间端点附近的插值误差增大。