写一个用matlab编写的lagrange插值法
时间: 2024-10-14 22:10:53 浏览: 29
在MATLAB中,Lagrange插值是一种常见的数值近似方法,用于通过给定的数据点构建一个多项式函数。以下是一个简单的例子,展示如何使用内置的`linspace`和`polyval`函数编写Lagrange插值:
```matlab
% 定义数据点 (x_values, y_values)
x = [1 2 3 4]; % 数据点的横坐标
y = [4 2 0 -2]; % 数据点的纵坐标
% 创建等间距的插值节点 (x_interp),范围从x(1)到x(end)
x_interp = linspace(min(x), max(x), 100); % 这里假设我们想要100个插值点
% 计算拉格朗日基 polynomials
basis = ones(size(x_interp, 1), length(x)); % 初始化基础向量
for i = 1:length(x)
for j = 1:length(x)
if i ~= j
basis(:, j) = basis(:, j) .* (x_interp - x(j)) ./ (x(i) - x(j));
end
end
end
% 拉格朗日插值公式计算插值函数值
y_interp = polyval(y, basis);
% 绘制原始数据和插值曲线
plot(x, y, 'o', 'MarkerSize', 8, 'DisplayName', 'Data Points');
hold on;
plot(x_interp, y_interp, '-r', 'DisplayName', 'Interpolated Curve');
legend('show');
% 显示插值误差
error = abs(y_interp - interp1(x, y, x_interp, 'spline')); % 使用Spline作为更平滑的插值选项
disp(['最大误差: ', num2str(max(error))]);
```
在这个例子中,首先创建了输入数据点和插值节点,然后使用Lagrange基函数计算每个插值点对应的插值值。最后,绘制原始数据点和插值曲线,并计算并显示插值误差。
阅读全文