牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式

这篇具有很好参考价值的文章主要介绍了牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、第一题:

牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式

线性插值:

  • 两点式线性插值

function liner() x=input("请输入插值点:");

y=x*((sin(0.6)-sin(0.5))/(0.6-0.5));

Re=y-sin(x);

fprintf("插值点近似值y=%2f,截断误差Re=%2f\n",y,Re)


运行结果: >> liner 请输入插值点:0.57891 插值点近似值y=0.493329,截断误差Re=-0.053783
  • 调用Matlab库函数

function liner() 
x0=0.5:0.1:0.6; 
y0=sin(x0); 
x=input("请输入插值点:");
y=interp1(x0,y0,x,"linear"); %没有指定的情况下默认选择内插 
Re=y-sin(x); 
fprintf("插值点近似值y=%2f,截断误差Re=%2f\n",y,Re) 


运行结果 >> liner 请输入插值点:0.57891 插值点近似值y=0.546670,截断误差Re=-0.000442

二次插值:列举了两种方法(拉格朗日二次插值、牛顿二次插值)

  • 拉格朗日二次插值:

function lagrangen_Quadratic() 
x0=0.4:0.1:0.6; 
y0=sin(x0); 
n=length(x0); %记录插值节点个数 x=input("请输入插值点:"); 
y=0.0; 
for k=1:n p=1.0; 
    for j=1:n 
        if(j~=k) 
            p=p*(x-x0(j))/(x0(k)-x0(j)); %连乘 
        end 
    end 
    y=y+p*y0(k); %求和 
end 
fprintf('插值点近似值y=%f\n',y) 
end 


运行结果 >> lagrangen_Quadratic 请输入插值点:0.57891 插值点近似值y=0.547069,截断误差Re=-0.000043
  • 牛顿二次插值

function  newton_Quadratic() 
x0=0.4:0.1:0.6;
y0=sin(x0);
n=length(x0); 
x=input("请输入插值点:");
A=zeros(n,n);A(:,1)=y0';    % A是差商表
y=0.0;
    for j=2:n 
        for i=j:n 
            A(i,j)=(A(i,j-1)- A(i-1,j-1))/(x0(i)-x0(i-j+1)); 
        end 
    end 
    for k=1:n 
        p=1.0; 
        for l=1:k-1 
            p=p*(x-x0(l)); 
        end 
        y=y+A(k,k)*p; 
    end 
    fprintf("插值点近似值y=%f\n",y)
end 

运行结果
>> newton_Quadratic
请输入插值点:0.57891
插值点近似值y=0.547069,截断误差Re=-0.000043

三次插值

function Cubic()
%三次插值
%% 三次拉格朗日插值
x0=0.3:0.1:0.6;
y0=sin(x0);
n=length(x0); %记录插值节点个数
x=input("请输入插值点:");
y1=0.0; 
    for k=1:n 
        p=1.0; 
        for j=1:n 
            if(j~=k) 
                p=p*(x-x0(j))/(x0(k)-x0(j)); %连乘
             end 
        end 
        y1=y1+p*y0(k); %求和
    end 
    %误差计算
    Re=y1-sin(x);
    fprintf("三次拉格朗日插值法,插值点近似值y1=%2f,截断误差Re=%2f\n",y1,Re)
%% 三次牛顿插值
y2=0.0;
A=zeros(n,n);A(:,1)=y0';    % A是差商表
    for j=2:n 
        for i=j:n 
            A(i,j)=(A(i,j-1)- A(i-1,j-1))/(x0(i)-x0(i-j+1)); 
        end 
    end 
    for k=1:n 
        p=1.0; 
        for l=1:k-1 
            p=p*(x-x0(l)); 
        end 
        y2=y2+A(k,k)*p; 
    end 
    %误差计算
    Re=y2-sin(x);
    fprintf("三次牛顿插值法,插值点近似值y2=%2f,截断误差Re=%2f\n",y2,Re)
%% 分段三次插值
y3=interp1(x0,y0,x,"pchip");
%误差计算
Re=y3-sin(x);
fprintf("三次分段插值,插值点近似值y3=%2f,截断误差Re=%2f\n",y3,Re)
%% 三次样条插值
y4=interp1(x0,y0,x,"spline");
%误差计算
Re=y4-sin(x);
fprintf("三次样条插值,插值点近似值y4=%2f,截断误差Re=%2f\n",y4,Re)

运行结果
>> Cubic
请输入插值点:0.57891
三次拉格朗日插值法,插值点近似值y1=0.547113,截断误差Re=0.000002
三次牛顿插值法,插值点近似值y2=0.547113,截断误差Re=0.000002
三次分段插值,插值点近似值y3=0.547067,截断误差Re=-0.000045
三次样条插值,插值点近似值y4=0.547113,截断误差Re=0.000002

结果分析:通过对比不同插值方法,可以看到在一定范围内(高次会出现龙格现象),插值次数越高,截断误差越小(插值结果越接近于真实函数值);同时,对于相同次数的插值,由于不同的插值方法它们算法不尽相同,故得到的结果也有所差异。

二、第二题

牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式

拉格朗日插值法得到插值多项式

function lagrange_Interplotion()
%% lagrange插值多项式
x0=1:0.5:5;
y0=[2.71828,4.48169,7.38906,12.0855,20.0855,33.1155,54.5982,54.5982,90.0171];
n=length(x0); %记录插值节点个数
    for k=1:n 
        c_lx=1.0; %基函数多项式系数
        for j=1:n 
            if(j~=k) 
                c_x0_j=poly(x0(j));    %得到以节点x0(j)为根的多项式的系数
                c_lx=conv(c_lx,c_x0_j)/(x0(k)-x0(j));   %卷积,得到下一个节点的基函数多项式系数
             end 
        end 
        c(k,:)=c_lx;    %将得到的系数写成列向量,方便后面图形绘制
        l(k,:)=poly2sym(c_lx); %生成多项式
    end 
    C=y0*c;     %拉格朗日插值函数系数向量
    fprintf("基函数:\n")
    for k=1:n
        fprintf("q%d(x)=%s\n",k,l(k))
    end
    L=vpa(y0*l);
    fprintf('拉格朗日插值多项式为:\nP(x)=%s\n',L)
    
plot(x0,y0,"d",LineWidth=2)
hold on;
plot(x0,y0,"LineWidth",3,"LineStyle","-.")
hold on;
x=input("请输入估计点值x=");
y=polyval(C,x);
fprintf("由插值多项式计算得到估计点函数值y=%2f\n",y)
x1=1:0.1:5;
plot(x1,polyval(C,x1),"-g","LineWidth",2)
title("拉格朗日法插值多项式")
legend("原始数据点","线性插值曲线","拉格朗日插值曲线")
end
    L=vpa


运行结果:
>> Interplotion
基函数:
q1(x)=(43903*x^2)/280 - (3601*x)/28 - (19201*x^3)/180 + (15967*x^4)/360 - (104*x^5)/9 + (83*x^6)/45 - (52*x^7)/315 + (2*x^8)/315 + 45
q2(x)=(16084*x)/21 - (8897680915588293*x^2)/8796093022208 + (3654*x^3)/5 - (4774*x^4)/15 + 86*x^5 - (212*x^6)/15 + (136*x^7)/105 - (16*x^8)/315 - 240
q3(x)=(29379*x^2)/10 - (4231*x)/2 - (39953*x^3)/18 + (90409*x^4)/90 - (2524*x^5)/9 + (2132*x^6)/45 - (40*x^7)/9 + (8*x^8)/45 + 630
q4(x)=(17428*x)/5 - (24994*x^2)/5 + (4290489840315779*x^3)/1099511627776 - (81994*x^4)/45 + (23558*x^5)/45 - (4084*x^6)/45 + (392*x^7)/45 - (16*x^8)/45 - 1008
q5(x)=(5965736298384953*x^2)/1099511627776 - (22205*x)/6 - 4339*x^3 + (24931*x^4)/12 - 612*x^5 + (326*x^6)/3 - (32*x^7)/3 + (4*x^8)/9 + 1050
q6(x)=2572*x - (19158*x^2)/5 + (857826755194971*x^3)/274877906944 - (68614*x^4)/45 + (4130*x^5)/9 - (3748*x^6)/45 + (376*x^7)/45 - (16*x^8)/45 - 720
q7(x)=(17137*x^2)/10 - (2273*x)/2 - (6226998586338327*x^3)/4398046511104 + (63289*x^4)/90 - (1940*x^5)/9 + (1796*x^6)/45 - (184*x^7)/45 + (8*x^8)/45 + 315
q8(x)=(2036*x)/7 - (3894463204556383*x^2)/8796093022208 + 370*x^3 - (2794*x^4)/15 + 58*x^5 - (164*x^6)/15 + (8*x^7)/7 - (16*x^8)/315 - 80
q9(x)=(14139*x^2)/280 - (4609*x)/140 - (7667*x^3)/180 + (7807*x^4)/360 - (308*x^5)/45 + (59*x^6)/45 - (44*x^7)/315 + (2*x^8)/315 + 9
拉格朗日插值多项式为:
P(x)=13219.923975626989297054402568969*x^2 - 8717.4714292857121464782161573177*x - 10997.479117888890432702431275579*x^3 + 5508.5890782777766034013937870542*x^4 - 1705.6709622222218751682652913991*x^5 + 319.55153377777771566815722002907*x^6 - 33.174790603174597008322933337666*x^7 + 1.4632923174603171998627196502177*x^8 + 2406.9866999999993839111311899615
请输入估计点值x=4.25
由插值多项式计算得到估计点函数值y=59.771361

牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式

牛顿法插值多项式

function nweton_Interplotion()
%% 牛顿插值多项式
x0=1:0.5:5;
y0=[2.71828,4.48169,7.38906,12.0855,20.0855,33.1155,54.5982,54.5982,90.0171];
n=length(x0); %记录插值节点个数
A=zeros(n,n);A(:,1)=y0';    % A是差商表
    
    %先求差商表
    for j=2:n 
        for i=j:n 
            A(i,j)=(A(i,j-1)- A(i-1,j-1))/(x0(i)-x0(i-(j-1))); 
            if i==j
                C(1,1)=y0(1);   %补上初始值y0
                C(:,j)=A(i,j);      %n阶均差
            end
        end 
    end 
    
    %求基函数
    for k=1:n
        c_lx=1.0;
        for j=1:k-1
            c_lx=conv(c_lx,poly(x0(j)));
        end
        l(k,:)=poly2sym(c_lx);
    end
    fprintf("基函数为:\n")
    for k=1:n
        fprintf("q(x)=%s\n",l(k))
    end
L=vpa(C*l);
fprintf('牛顿插值多项式为:\nP(x)=%s\n',L)
plot(x0,y0,"d",LineWidth=2)
hold on;
plot(x0,y0,"LineWidth",3,"LineStyle","-.")
hold on;
x=input("请输入估计点值x=");
Coff=sym2poly(C*l); %得到插值多项式系数
y=polyval(Coff,x);
fprintf("由插值多项式计算得到估计点函数值y=%2f\n",y)
%绘制插值曲线
x1=1:0.01:5;
plot(x1,polyval(Coff,x1),"-g","LineWidth",2)
title("牛顿法插值多项式")
legend("原始数据","线性插值曲线","牛顿插值曲线")
end
 

运行结果:
>> nweton_Interplotion
基函数为:
q(x)=1
q(x)=x - 1
q(x)=x^2 - (5*x)/2 + 3/2
q(x)=(13*x)/2 - (9*x^2)/2 + x^3 - 3
q(x)=(71*x^2)/4 - (77*x)/4 - 7*x^3 + x^4 + 15/2
q(x)=(261*x)/4 - (145*x^2)/2 + (155*x^3)/4 - 10*x^4 + x^5 - 45/2
q(x)=319*x^2 - (2007*x)/8 - (1665*x^3)/8 + (295*x^4)/4 - (27*x^5)/2 + x^6 + 315/4
q(x)=(4329*x)/4 - (12215*x^2)/8 + (2303*x^3)/2 - (4025*x^4)/8 + (511*x^5)/4 - (35*x^6)/2 + x^7 - 315
q(x)=(127251*x^2)/16 - (41481*x)/8 - (53669*x^3)/8 + (54649*x^4)/16 - 1078*x^5 + (413*x^6)/2 - 22*x^7 + x^8 + 2835/2
牛顿插值多项式为:
P(x)=13219.923975626990916816144346531*x^2 - 8717.4714292857188404819035465465*x - 10997.479117888894418232977878702*x^3 + 5508.5890782777804758410492939428*x^4 - 1705.6709622222230317151181466784*x^5 + 319.55153377777792386704724947322*x^6 - 33.174790603174617698023496359383*x^7 + 1.4632923174603180704878013784764*x^8 + 2406.9867000000012735332943769606
请输入估计点值x=4.25
由插值多项式计算得到估计点函数值y=59.771361

牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式文章来源地址https://www.toymoban.com/news/detail-509945.html

到了这里,关于牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解读 拉格朗日插值法python,保你学明白

    什么是插值法 插值法是一种数学方法,用于在已知数据点(离散数据)之间插入数据,以生成连续的函数曲线。 插值法可以用于确定一个未知数据点的值,并简化复杂的数学计算过程。 插值法的应用广泛,如统计学、工程学、科学研究等领域。 拉格朗日插值法的原理 格朗

    2024年02月08日
    浏览(43)
  • 数值分析:拉格朗日插值法笔记以及C++代码实现

    插值需求的诞生: 如何通过已知数据得到函数的近似解析表达式,从而获得更多的有用数据。 在实际应用中常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法“模拟产生”一些

    2024年02月12日
    浏览(40)
  • 基于Matlab的插值问题(Lagrange插值法、三次插值多项式)

    要求 1、 利用Lagrange插值公式 L n ( x ) = ∑ k = 0 n ( ∏ i = 0 , i ≠ k n x − x i x k − x i ) y k {L_n}(x) = sumlimits_{k = 0}^n {left( {prodlimits_{i = 0,i ne k}^n {frac{{x - {x_i}}}{{{x_k} - {x_i}}}} } right)} {y_k} L n ​ ( x ) = k = 0 ∑ n ​ ( i = 0 , i  = k ∏ n ​ x k ​ − x i ​ x − x i ​ ​ ) y k ​ 编写出

    2024年02月07日
    浏览(44)
  • 深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

    最邻近插值:将每个目标像素找到距离它最近的原图像素点,然后将该像素的值直接赋值给目标像素 优点 :实现简单,计算速度快 缺点 :插值结果缺乏连续性,可能会产生锯齿状的边缘,对于图像质量影响较大,因此当处理精度要求较高的图像时,通常会采用更加精细的插

    2024年02月03日
    浏览(52)
  • 算法--插值法

    插值法是一种数学方法,主要用于通过已知的离散数据来估算未知值。常见的插值法有线性插值、最近邻插值、双线性插值和双三次插值。以下是其基本原理和应用: 线性插值:假设在两个已知数据点之间,数据的变化是线性的,因此可以通过已知的两点的坐标来计算经过这

    2024年01月18日
    浏览(41)
  • 数学建模之插值法

    数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“ 模拟产生 ”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。 那什么是插值法? 插值法又可以分

    2024年02月03日
    浏览(46)
  • 上采样(最近邻插值、双线性插值法、反池化、转置卷积)

    一般图像分割的时候,需要对图像进行像素级别的分类,因此在卷积提取到抽象特征后需要通过上采样将feature map还原到原图大小,在FCN和U-net等网络中都提到了上采样的操作,这里会一些上采样的方法进行总结。 最简单的图像缩放算法就是最近邻插值,也称作零阶插值,就

    2024年02月05日
    浏览(64)
  • 数学建模学习笔记(一):插值法

    本文主要内容是分享博主在学习MATLAB插值与拟合过程中的一些笔记与见解,并记录使用代码实现的过程 一维插值问题可描述为:已知函数在 x 0 , x 1 , … , x n x_0,x_1,…,x_n x 0 ​ , x 1 ​ , … , x n ​ 处的值 y 0 , y 1 , … , y n y_0,y_1,…,y_n y 0 ​ , y 1 ​ , … , y n ​ ,求简单函数 p (

    2024年02月06日
    浏览(53)
  • Matlab图像处理-灰度插值法

    最近邻法 最近邻法是一种最简单的插值算法,输出像素的值为输入图像中与其最邻近的采样点的像素值。是将 ( u 0 , v 0 ) (u_0,v_0) 点最近的整数坐标 u , v (u,v) 点的灰度值取为 ( u 0 , v 0 ) (u_0,v_0) 点的灰度值。 在 ( u 0 , v 0 ) (u_0,v_0) 点各相邻像素间灰度变化较小时,这种方法是一

    2024年02月10日
    浏览(50)
  • 自动驾驶路径规划——轨迹规划(详解插值法)

    目录 前言 1. 轨迹规划 1.1 轨迹规划包括以下几个问题: 2. 三次多项式插值 ​​​​​​3.  过路径点的三次多项式插值 4. 用抛物线过渡的线性插值 过路径点的用抛物线过渡的线性插值 5. 高阶多项式插值 声明        这个学期学校开设了相应的课程,同时也在学习古月居

    2024年01月22日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包