|

楼主 |
发表于 2025-9-28 14:48:16
来自手机
|
显示全部楼层
% 1. 构造函数与插值节点
f = @(x) sin(x); % 选择正弦函数(周期性,外插误差更明显)
x_nodes = [0, pi/2, pi, 3*pi/2]; % 节点覆盖内插和外插区间
y_nodes = f(x_nodes);
% 2. 拉格朗日插值函数
function y_val = lagrange_interp(x_nodes, y_nodes, x_val)
n = length(x_nodes);
y_val = 0;
for i = 1:n
l = 1;
for j = 1:n
if j ~= i
l = l * (x_val-x_nodes(j)) / (x_nodes(i)-x_nodes(j));
end
end
y_val = y_val + y_nodes(i) * l;
end
end
% 3. 内插计算(区间[0, π]中点 x=π/4)
x_inner = pi/4;
y_inner_interp = lagrange_interp(x_nodes, y_nodes, x_inner);
y_inner_true = f(x_inner);
error_inner = abs(y_inner_interp-y_inner_true);
% 4. 外插计算(区间外 x=5π/4)
x_outer = 5*pi/4;
y_outer_interp = lagrange_interp(x_nodes, y_nodes, x_outer);
y_outer_true = f(x_outer);
error_outer = abs(y_outer_interp-y_outer_true);
% 5. 输出结果
fprintf('=== 内插分析(x=π/4) ===\n');
fprintf('插值值:%.4f\n真实值:%.4f\n误差:%.4f\n\n', ...
y_inner_interp, y_inner_true, error_inner);
fprintf('=== 外插分析(x=5π/4) ===\n');
fprintf('插值值:%.4f\n真实值:%.4f\n误差:%.4f\n\n', ...
y_outer_interp, y_outer_true, error_outer);
fprintf('结论:内插在节点区间内精度高,外插因缺乏节点约束误差显著;拉格朗日插值形式简洁,但高次插值易出现龙格现象。\n'); |
|