matlab展示龙格现象
为了展示龙格现象,它使用拉格朗日插值多项式,展示了随着插值点数目的增加,插值多项式在区间端点附近震荡的现象。
重新编写的 MATLAB 代码:
% 定义目标函数
f = @(x) 1 ./ (1 + x.^2);
% 设置插值区间
x_interval = [-5, 5]; % 插值区间
x_fine = linspace(x_interval(1), x_interval(2), 1000); % 用于绘制精细图像的点
% 生成插值的真实值
y_fine = f(x_fine);
% 设置不同的插值节点数目
node_counts = [5, 8, 12];
% 绘制真实函数图像
figure;
hold on;
plot(x_fine, y_fine, 'k', 'LineWidth', 2); % 真实函数
colors = {'r', 'g', 'b'}; % 插值结果的颜色
% 对不同的节点数目进行插值并绘制
for k = 1:length(node_counts)
% 生成均匀分布的插值节点
x_nodes = linspace(x_interval(1), x_interval(2), node_counts(k));
y_nodes = f(x_nodes);
% 拉格朗日插值
y_interp = lagrange_interpolation(x_nodes, y_nodes, x_fine);
% 绘制插值结果
plot(x_fine, y_interp, 'Color', colors{k}, 'LineWidth', 1.5);
end
% 添加标签和图例
legend('真实函数', '5节点插值', '8节点插值', '12节点插值');
title('龙格现象示例');
xlabel('x');
ylabel('f(x)');
grid on;
hold off;
%
function y_interp = lagrange_interpolation(x_nodes, y_nodes, x_interp)
n = length(x_nodes);
xi=x_interp;
y_interp=zeros(size(xi));
for i = 1:n
L = ones(size(xi));%注意L的位置
for j = 1:n
if i ~= j
L= L.* (xi - x_nodes(j)) / (x_nodes(i) - x_nodes(j));
end
end
y_interp =y_interp + y_nodes(i)*L;
end
end
% 拉格朗日插值函数
% function y_interp = lagrange_interpolation(x_nodes, y_nodes, x_interp)
% n = length(x_nodes);
% y_interp = zeros(size(x_interp));
%
% for i = 1:n
% L = ones(size(x_interp)); % 初始化L为1
% for j = 1:n
% if j ~= i
% L = L .* (x_interp - x_nodes(j)) / (x_nodes(i) - x_nodes(j));
% end
% end
% y_interp = y_interp + y_nodes(i) * L;
% end
% end
取五个点,八个点,十二个点如图:
分段插值多项式
我们通过对拉格朗日插值和牛顿插值多项式分析发现,当插值次数增高时会发生龙格现象,因此我们用分段插值多项式,尽管分段插值多项式再精度上有所提高,并且回避了龙格现象,但是它也带来了新的问题,就是在整个区间上不可导。
原文地址:https://blog.csdn.net/qq_65800683/article/details/145062462
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!