拉格朗日多项式插值法 思路详解+详细代码

您所在的位置:网站首页 三个函数值公式 拉格朗日多项式插值法 思路详解+详细代码

拉格朗日多项式插值法 思路详解+详细代码

2024-07-11 16:49:15| 来源: 网络整理| 查看: 265

在数学建模过程中大家经常会使用插值法对数据进行处理,而其中拉格朗日多项式插值法是较为常用到的。 以下是我在学习拉格朗日插值法时通过阅读许多大佬博主的文章时发现,要么只有代码,要么只有理论讲解或者例题,所以我就根据自己的理解总结了这篇笔记。代码附在后面 需求的大家自取即可

文章目录 拉格朗日多项式插值方法应用具体引入公式推导最终公式公式代码 引申线性插值多项式代码 抛物线插值多项式代码

插值:求过已知有限个数数据点的近似函数

拟合:已知有限个数据点,求近似函数,不要求过急直数据点,只要求在某种意义下它在这些点上的总偏差最小

拉格朗日多项式插值

插值方法有许多,常用的、基本的有:拉格朗日多项式插值、牛顿插值、分段线插值、Hermite插值和三次样条插值。这里只将一下拉格朗日多项式插值法:

方法应用

通缩点说,已知n+1个点x1,x2,…,xn的函数值,可以使用lagrange插值求出一个n次多项式插值函数f(x),f(x)是接近未知原函数p(x)的函数,根据插值函数f(x)求出p(x)的未知点

具体引入

已知一个未知函数f(x)的三个点(x1,y1)、(x2,y2)、(x3,y3)

存在使用一个多项式函数经过这三个点,呈现为一根曲线

因此进行合理假设,此曲线为一个二次多项式

拉格朗日认为可通过三根两次曲线来得到这根二次曲线。

关键

因此假设了三根曲线

第一根曲线f1(x),在x1点处,取值为1,其余两点(x2,y2)、(x3,y3)取值为0

第二根曲线f2(x),在x2点处,取值为1,其余两点(x1,y1)、(x3,y3)取值为0

第三根曲线f3(x),在x3点处,取值为1,其余两点(x1,y1)、(x2,y2)取值为0

所以可得到

y1f1(x)曲线可以保证,在x1处,取值为y1,其余两点取值为0

y2f2(x)曲线可以保证,在x2处,取值为y2,其余两点取值为0

y3f3(x)曲线可以保证,在x3处,取值为y3,其余两点取值为0

可以说这三根曲线就可以组成需要得到的那根二次曲线

那么,f(x)=y1f1(x)+y2f2(x)+y3f3(x)

公式推导

首先假设的三根曲线fi为二次函数

其次需满足 在这里插入图片描述

因此可以得到构造的函数(例如第一根)

​ 零点法 在这里插入图片描述

所以 f 1 ( x ) = ( x − x 2 ) ( x − x 3 ) ( x 1 − x 2 ) ( x 1 − x 3 ) {f_1}\left( x \right) = \frac{{\left( {x - {x_2}} \right)\left( {x - {x_3}} \right)}}{{\left( {{x_1} - {x_2}} \right)\left( {{x_1} - {x_3}} \right)}} f1​(x)=(x1​−x2​)(x1​−x3​)(x−x2​)(x−x3​)​ 推广到一般,可得到 f ( x ) = ∑ i = 1 3 y i ⋅ f i ( x ) f\left( x \right) = \sum\limits_{i = 1}^3 {{y_i} \cdot {f_i}\left( x \right)} f(x)=i=1∑3​yi​⋅fi​(x)

最终公式

f i ( x ) = ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x i − 1 ) ( x − x i + 1 ) ⋯ ( x − x n ) ( x i − x 0 ) ( x i − x 1 ) ⋯ ( x i − x i − 1 ) ( x i − x i + 1 ) ⋯ ( x i − x n ) {f_i}\left( x \right) = \frac{{\left( {x - {x_0}} \right)\left( {x - {x_1}} \right) \cdots \left( {x - {x_{i - 1}}} \right)\left( {x - {x_{i + 1}}} \right) \cdots \left( {x - {x_n}} \right)}}{{\left( {{x_i} - {x_0}} \right)\left( {{x_i} - {x_1}} \right) \cdots \left( {{x_i} - {x_{i - 1}}} \right)\left( {{x_i} - {x_{i + 1}}} \right) \cdots \left( {{x_i} - {x_n}} \right)}} fi​(x)=(xi​−x0​)(xi​−x1​)⋯(xi​−xi−1​)(xi​−xi+1​)⋯(xi​−xn​)(x−x0​)(x−x1​)⋯(x−xi−1​)(x−xi+1​)⋯(x−xn​)​

称为拉格朗日插值基函数 f n ( x ) = ∑ i = 0 n f i ( x ) ⋅ y i {f_n}\left( x \right) = \sum\limits_{i = 0}^n {{f_i}\left( x \right)} \cdot {y_i} fn​(x)=i=0∑n​fi​(x)⋅yi​ 为拉格朗日插值多项式公式

公式代码 function y=lagrange(x0,y0,x) n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end 引申 线性插值多项式

f 1 ( x ) = ( x − x 1 ) ( x 0 − x 1 ) ⋅ y 0 + ( x − x 0 ) ( x 1 − x 0 ) ⋅ y 1 {f_1}\left( x \right) = \frac{{\left( {x - {x_1}} \right)}}{{\left( {{x_0} - {x_1}} \right)}} \cdot {y_0} + \frac{{\left( {x - {x_0}} \right)}}{{\left( {{x_1} - {x_0}} \right)}} \cdot {y_1} f1​(x)=(x0​−x1​)(x−x1​)​⋅y0​+(x1​−x0​)(x−x0​)​⋅y1​

代码 function y=sin_L(x0,y0,x1,y1,x) % sin_L输出sin(x)使用线性插值计算得到的函数值 % 例如: y=sin_T(4,2,9,3,5) % y = % 2.200 % R = % 6 % 以下为判断输入值是否合法的代码 if nargin~=5 error('请输入线性插值的插值节点和插值点') end if ~( isnumeric(x0)&&isnumeric(y0)&&isnumeric(x1)&&isnumeric(y1)&&isnumeric(x) ) error('输入参数必须是数') end % 核心计算的代码 y=y0+(y1-y0)*(x-x0)/(x1-x0); % 以下为求解截断误差的代码 syms M2; % 因为sin(x)的二阶导数是本身,所以只需要挑出最大的y值,即可的到M2 if y0>y1 M2=y0; else M2=y1; end R=M2*abs((x-x0)*(x-x1))/2 end 抛物线插值多项式

f 2 ( x ) = ( x − x 1 ) ⋅ ( x − x 2 ) ( x 0 − x 1 ) ⋅ ( x 0 − x 2 ) ⋅ y 0 + ( x − x 0 ) ( x − x 2 ) ( x 1 − x 0 ) ⋅ ( x 1 − x 2 ) ⋅ y 1 + ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ⋅ ( x 2 − x 1 ) ⋅ y 2 {f_2}\left( x \right) = \frac{{\left( {x - {x_1}} \right) \cdot \left( {x - {x_2}} \right)}}{{\left( {{x_0} - {x_1}} \right) \cdot \left( {{x_0} - {x_2}} \right)}} \cdot {y_0} + \frac{{\left( {x - {x_0}} \right)\left( {x - {x_2}} \right)}}{{\left( {{x_1} - {x_0}} \right) \cdot \left( {{x_1} - {x_2}} \right)}} \cdot {y_1} + \frac{{\left( {x - {x_0}} \right)\left( {x - {x_1}} \right)}}{{\left( {{x_2} - {x_0}} \right) \cdot \left( {{x_2} - {x_1}} \right)}} \cdot {y_2} f2​(x)=(x0​−x1​)⋅(x0​−x2​)(x−x1​)⋅(x−x2​)​⋅y0​+(x1​−x0​)⋅(x1​−x2​)(x−x0​)(x−x2​)​⋅y1​+(x2​−x0​)⋅(x2​−x1​)(x−x0​)(x−x1​)​⋅y2​

代码 function y=sin_T(x0,y0,x1,y1,x2,y2,x) % sin_T输出sin(x)使用抛物插值计算得到的函数值 % 例如: y=sin_T(1,1,4,2,9,3,5) % y = % 2.2667 % R = % 1.4408 % 以下为判断输入值是否合法的代码 if nargin~=7 error('请输入线性插值的插值节点和插值点') end if ~( isnumeric(x0)&&isnumeric(y0)&&isnumeric(x1)&&isnumeric(y1)&&isnumeric(x2)&&isnumeric(y2)&&isnumeric(x) ) error('输入参数必须是数') end % 核心计算的代码 y=y0*(x-x1)*(x-x2)/((x0-x1)*(x0-x2))+y1*(x-x0)*(x-x2)/((x1-x0)*(x1-x2))+y2*(x-x0)*(x-x1)/((x2-x0)*(x2-x1)); % 以下为求解截断误差的代码 y_0=cos(x0); % 因为sin(x)的三阶导数是cos(x),那么只要求出x0,x1,x2的cos值,然后去最大即可得到M3 y_1=cos(x1); y_2=cos(x2); syms M3; if y_0>y_1 M3=y_0; else M3=y_1; end if y_2>M3 M3=y_2; end R=M3*abs((x-x0)*(x-x1)*(x-x2))/6 end


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭