三次样条插值和拉格朗日插值算法对比——RUNGE现象

三次样条插值和拉格朗日插值算法对比——RUNGE现象

数值分析课后上机作业:
原始数据:
x0=[0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 7.0 8.0 9.2 10.5 11.3 11.6 12.0 12.6 13.0 13.3];
y0=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25];
分别绘出三次样条插值多项式图像以及二十次拉格朗日插值多项式图像。

// 以下为MATLAB代码,可直接运行
clc;
clear;
%% 初始化数据
x0=[0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 7.0 8.0 9.2 10.5 11.3 11.6 12.0 12.6 13.0 13.3];
y0=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25];
%% 三次样条插值算法
x=[0.9:0.01:13.3];
y1=interp1(x0,y0,x,'spline');
pp=csape(x0,y0,'variational');
plot(x0,y0,'ok')
hold on;
plot(x,y1,'-b');
hold on;
%% Lagrange插值算法
n=length(x0);
m=length(x);
for i=1:m
    z=x(i);
    L=0.0;
    for j=1:n;
        T=1.0;
        for k=1:n;
            if k~=j;
                T=T*(z-x0(k))/(x0(j)-x0(k));%求基函数
            end
        end
        L=T*y0(j)+L;
    end
    y(i)=L;
end
plot(x,y,'r');
C=polyfit(x,y,n-1);
ppp=poly2sym(C);
title('两种插值方法函数曲线对比');
legend('                   节点','       三次样条插值函数曲线','20次Lagrange插值多项式曲线');
%% 输出三次样条插值的20段函数表达式以及Lagrange插值的20次函数表达式
for j=1:20
fprintf('第%d段:%d <=x<=%d',j,pp.breaks(j),pp.breaks(j+1));
Sx=poly2sym(pp.coefs(j,1:4)) %输出三次样条插值的20段函数表达式
end
fprintf('20次Lagrange插值多项式为:\n');
fprintf('L20x=%s',vpa(ppp))% Lagrange插值的20次函数表达式

结果图如下:
在这里插入图片描述

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值