自学内容网 自学内容网

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)!