用 MATLAB 语言编写拉格朗日插值多项式的程序,并试分别用线性插值与抛物插值计算近似值。
时间: 2024-12-17 10:22:00 浏览: 9
在MATLAB中,你可以使用内置函数`linspace`和`polyfit`来编写拉格朗日插值的程序。这里是一个基本的例子,演示如何使用这两个函数来进行线性和二次(抛物)拉格朗日插值:
```matlab
% 线性插值 (Lagrange's Interpolation - Degree 1)
function linear_interp(x_data, y_data, x_query)
n = length(x_data); % 数据点的数量
l = @(i,x) prod((x - x_data(1:i-1))./(x_data(i) - x_data(1:i-1))) .* (x - x_data(i+1:end))./(x_data(i+1:end) - x_data(i));
y_linear = sum(y_data.*l(1:n,x_query))/sum(l(1:n,x_query)); % 拉格朗日多项式
end
% 抛物插值 (Quadratic Lagrange Interpolation - Degree 2)
function quadratic_interp(x_data, y_data, x_query)
n = length(x_data);
A = zeros(n, n);
for i = 1:n
for j = 1:n
if i ~= j
A(i,j) = (x_data(j) - x_data(i)) / (x_data(j) - x_data(i-1));
end
end
end
B = [ones(1,n), x_data', x_data.^2'];
c = polyval(inv(A') * B', y_data);
% 使用c中的系数计算拉格朗日多项式
l = @(i,x) reduce_poly(c, x_data(i), x);
y_quadratic = l(1, x_query);
end
% 函数来简化拉格朗日多项式表达式
function result = reduce_poly(coeff, xi, x)
result = coeff(1);
for i = 2:length(coeff)
result = result * (x - xi) ./ (x_data(i) - xi) + coeff(i);
end
end
% 测试数据和查询点
x_data = linspace(0, 1, 5); % 五等分区间 [0, 1]
y_data = sin(x_data); % 示例数据:正弦函数在这些点上
x_query = 0.4; % 查询点
% 运行插值并打印结果
y_linear_approx = linear_interp(x_data, y_data, x_query);
y_quadratic_approx = quadratic_interp(x_data, y_data, x_query);
disp(['Linear interpolation at ', num2str(x_query), ' is approximately: ', num2str(y_linear_approx)]);
disp(['Quadratic interpolation at ', num2str(x_query), ' is approximately: ', num2str(y_quadratic_approx)]);
阅读全文