牛顿插值法在Matlab上的实现
文章目录
- 一、均差及其性质
- 1.均差的定义
- 2.均差的性质
- 3.均差表
- 二、牛顿插值多项式
- 1.牛顿插值多项式
- 三、牛顿插值多项式在Matlab上的实现
- 1.Matlab代码
- 2.代码使用演示
- 备注
一、均差及其性质
1.均差的定义
在开始介绍牛顿插值多项式之前,需要先引入均差的定义
定义 :称f[x0,xk]=f(xk)−f(x0)xk−x0f[x_0,x_k]=\frac{f(x_k)-f(x_0)}{x_k-x_0}f[x0,xk]=xk−x0f(xk)−f(x0)为函数f(x)f(x)f(x)关于点x0x_0x0,xkx_kxk的一阶均差.
f[x0,x1,xk]=f[x0,xk]−f[x0,x1]xk−x1f[x_0,x_1,x_k]=\frac{f[x_0,x_k]-f[x_0,x_1]}{x_k-x_1}f[x0,x1,xk]=xk−x1f[x0,xk]−f[x0,x1]称为f(x)f(x)f(x)的二阶均差. 一般地,称f[x0,x1,⋯,xk]=f[x0,⋯,xk−2,xk]−f[x0,x1,⋯,xk−1]xk−xk−1f[x_0,x_1,\cdots ,x_k]=\frac{f[x_0,\cdots ,x_{k-2},x_k]-f[x_0,x_1,\cdots,x_{k-1}]}{x_k-x_{k-1}}f[x0,x1,⋯,xk]=xk−xk−1f[x0,⋯,xk−2,xk]−f[x0,x1,⋯,xk−1]为f(x)f(x)f(x)的k\mathbf{k}k阶均差(均差也称为差商)。
2.均差的性质
(1)kkk阶均差可表示为函数值f(x0)f(x_0)f(x0),f(x1)f(x_1)f(x1),⋯\cdots⋯,f(xk)f(x_k)f(xk)的线性组合,即f[x0,x1,⋯,xk]=∑j=0kf(xj)(xj−x0)⋯(xj−xj−1)(xj−xj+1)⋯(xj−xk)f[x_0,x_1,\cdots ,x_k]=\sum_{j=0}^{k}\frac{f(x_j)}{(x_j-x_0)\cdots(x_j-x_{j-1})(x_j-x_{j+1})\cdots(x_j-x_k)} f[x0,x1,⋯,xk]=j=0∑k(xj−x0)⋯(xj−xj−1)(xj−xj+1)⋯(xj−xk)f(xj)可用归纳法证明此性质。这个性质也表明均差与节点的排列次序无关,称为均差的对称性,即f[x0,x1,⋯,xk]=f[x1,x0,x2,⋯,xk]=⋯=f[x1,⋯,xk,x0]f[x_0,x_1,\cdots,x_k]=f[x_1,x_0,x_2,\cdots,x_k]=\cdots=f[x_1,\cdots,x_k,x_0]f[x0,x1,⋯,xk]=f[x1,x0,x2,⋯,xk]=⋯=f[x1,⋯,xk,x0]
(2)由性质(1)及kkk阶均差表达式可得f[x0,x1,⋯,xk]=f[x1,x2,⋯,xk]−f[x0,x1,⋯,xk−1]xk−x0f[x_0,x_1,\cdots,x_k]=\frac{f[x_1,x_2,\cdots,x_k]-f[x_0,x_1,\cdots,x_{k-1}]}{x_k-x_0}f[x0,x1,⋯,xk]=xk−x0f[x1,x2,⋯,xk]−f[x0,x1,⋯,xk−1]
(3)若f(x)f(x)f(x)在[a,b][a,b][a,b]上存在nnn阶导数,且节点x0x_0x0,x1x_1x1,⋯\cdots⋯,xn∈[a,b]x_n\in[a,b]xn∈[a,b],则nnn阶均差与导数的关系为f[x0,x1,⋯,xk]=f(n)(ξ)n!,ξ∈[a,b]f[x_0,x_1,\cdots,x_k]=\frac{f^{(n)}(\xi )}{n!} ,\xi\in[a,b]f[x0,x1,⋯,xk]=n!f(n)(ξ),ξ∈[a,b]这个公式可直接用罗尔定理证明。
3.均差表
均差计算可列为均差表如下:
xkx_kxk | f(xk)f(x_k)f(xk) | 一阶均差 | 二阶均差 | 三阶均差 | 四阶均差 | ⋯\cdots⋯ |
---|---|---|---|---|---|---|
x0x_0x0 | f(x0)‾\underline{f(x_0)}f(x0) | |||||
x1x_1x1 | f(x1)f(x_1)f(x1) | f[x0,x1]‾\underline{f[x_0,x_1]}f[x0,x1] | ||||
x2x_2x2 | f(x2)f(x_2)f(x2) | f[x1,x2]f[x_1,x_2]f[x1,x2] | f[x0,x1,x2]‾\underline{f[x_0,x_1,x_2]}f[x0,x1,x2] | |||
x3x_3x3 | f(x3)f(x_3)f(x3) | f[x2,x3]f[x_2,x_3]f[x2,x3] | f[x1,x2,x3]f[x_1,x_2,x_3]f[x1,x2,x3] | f[x0,x1,x2,x3]‾\underline{f[x_0,x_1,x_2,x_3]}f[x0,x1,x2,x3] | ||
x4x_4x4 | f(x4)f(x_4)f(x4) | f[x3,x4]f[x_3,x_4]f[x3,x4] | f[x2,x3,x4]f[x_2,x_3,x_4]f[x2,x3,x4] | f[x1,x2,x3,x4]f[x_1,x_2,x_3,x_4]f[x1,x2,x3,x4] | f[x0,x1,x2,x3,x4]‾\underline{f[x_0,x_1,x_2,x_3,x_4]}f[x0,x1,x2,x3,x4] | |
⋮\vdots⋮ | ⋮\vdots⋮ | ⋮\vdots⋮ | ⋮\vdots⋮ | ⋮\vdots⋮ | ⋮\vdots⋮ | ⋮\vdots⋮ |
二、牛顿插值多项式
1.牛顿插值多项式
设待插函数为f(x)f(x)f(x),利用拉格朗日插值多项式和均差的概念可以得到f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,x1,⋯,xn](x−x0)⋯(x−xn−1)+f[x,x0,⋯,xn]ωn+1(x)=Pn(x)+Rn(x)f(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\cdots +f[x_0,x_1,\cdots,x_n](x-x_0)\cdots(x-x_{n-1})+f[x,x_0,\cdots,x_n]\omega _{n+1}(x)=P_n(x)+R_n(x)f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,x1,⋯,xn](x−x0)⋯(x−xn−1)+f[x,x0,⋯,xn]ωn+1(x)=Pn(x)+Rn(x)
其中牛顿均差插值多项式:
Pn(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,x1,⋯,xn](x−x0)⋯(x−xn−1)P_n(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\cdots +f[x_0,x_1,\cdots,x_n](x-x_0)\cdots(x-x_{n-1})Pn(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,x1,⋯,xn](x−x0)⋯(x−xn−1)
牛顿插值余项:
Rn(x)=f[x,x0,⋯,xn]ωn+1(x)R_n(x)=f[x,x_0,\cdots,x_n]\omega _{n+1}(x)Rn(x)=f[x,x0,⋯,xn]ωn+1(x)
三、牛顿插值多项式在Matlab上的实现
1.Matlab代码
function [f0,f1] = Newtown_f(x0,y0)
%Newtown_f x0,y0分别是牛顿插值法所用点的x坐标、y坐标向量
%f0 输出多项式的句柄函数形式
%f1 输出多项式的符号表达式
syms x y
N=length(x0); %统计样本点个数
mean_difference=zeros(N);
mean_difference(:,1)=y0';
mean_difference_temp=diff(y0); %生成用于储存均差的矩阵,并存储一阶均差
%计算i-1阶均差
for i=2:Ndelta=i-1;for j=delta+1:Nmean_difference(j,i)=mean_difference_temp(j-delta)/(x0(j)-x0(j-delta));endmean_difference_temp=diff(mean_difference(i:end,i));
end
%计算多项式
for i=0:(N-1)if i==0alpha=mean_difference(i+1,i+1);polynomial=1;f1=alpha*polynomial;elsealpha=mean_difference(i+1,i+1);polynomial=polynomial*(x-x0(i));f1=f1+alpha*polynomial;end
end
f1=simplify(f1); %简化多项式
f0=matlabFunction(f1);
2.代码使用演示
在多项式函数 f(x)=x2f(x)=x^2f(x)=x2 上取三个样本点进行插值
%% 样本点生成
N=3;
x0=linspace(-1,1,N);
y0=x0.^2;%% 使用插值法进行计算
[f1,f2]=Newtown_f(x0,y0);%% 画图
xo_o=linspace(-1,1,500); %生成画图用点的x值
yo_o=f1(xo_o); %代入多项式计算画图用点的y值
plot(xo_o,yo_o);
f2 %在命令行窗口展示多项式符号表达式
上图分别为插值多项式在[−1,1][-1,1][−1,1]区间上的图像和得到插值多项式f2=x2f2=x^2f2=x2,可以看到插值多项式图像与原多项式图像保持一致。
备注
一般情况下,插值多项式所插的点越多,多项式的次数就越高,插值结果越接近原函数,但对于龙格函数,例如:f(x)=11+25x2f(x)=\frac{1}{1+25x^2}f(x)=1+25x21,会存在龙格现象,即插值次数越高,插值结果越偏离原函数的特殊情况。
牛顿插值法在Matlab上的实现相关推荐
- 牛顿法的matlab实现例题,【MATLAB|MATLAB牛顿插值法例题与程序Word版】
『易坊知识库摘要_MATLAB|MATLAB牛顿插值法例题与程序Word版』x12345678y22.523.324.421.7025.228.524.825.4二.数学原理假设有n+1个不同的节点及 ...
- 牛顿(Newton)插值法的Matlab实现
牛顿(Newton)插值法的Matlab实现 算法 程序 运行 对已知点计算 手算例题 本篇为Newton插值法,构造插值多项式 拉格朗日(Lagrange)插值法链接如下: 链接: Lagrange ...
- 【数学建模笔记】【第三讲】拉格朗日插值法,牛顿插值法,分段三次埃尔米特插值法及其MATLAB实践
温馨提示:本文共有3748字,阅读并理解全文大概需要15-20分钟 插值算法 一.插值法的定义 1.插值函数一共有三种: 2.多项式插值法原理 3.分段插值法原理: 4.具体如何求插值函数呢? (1) ...
- 牛顿插值法 matlab m文件,牛顿插值法matlab程序
<牛顿插值法matlab程序>由会员分享,可在线阅读,更多相关<牛顿插值法matlab程序(3页珍藏版)>请在人人文库网上搜索. 1.计算方法数值实验报告班级090712学号0 ...
- 2021-01-07 matlab数值分析 插值法 拉格朗日插值法 牛顿插值法
matlab数值分析 插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...
- matlab 牛顿向后差分,利用差分的牛顿插值法(Newton)
差分牛顿插值法要求是等距的. 先来看三个概念 差分与均差的关系如下: 牛顿(Newton)插值的基本公式为: 由于差分插值是等距的,所以可以设x=x0+nh 对于上式
- java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
2020年10月4日研究了一下牛顿插值法,其用途是使用x.y两组数值,根据新的x值返回对应的y值,与TREND.FORECAST函数不同,这种方法可应对非线性数据.其作用类似于图表中的曲线拟合或LIN ...
- 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...
- 利用均差的牛顿插值法(Newton)
函数f的零阶均差定义为 ,一阶定义均差为: 一般地,函数f 的k阶均差定义为: 或者上面这个式子求的k+1阶均差 利用均差的牛顿插值法多项式为: 简单计算的时候可以观看下面的差商(均差)表: 怎么利用 ...
- 牛顿插值法及其C++实现
牛顿插值法 一.背景引入 相信朋友们,开了拉格朗日插值法后会被数学家的思维所折服,但是我想说有了拉格朗日插值法还不够,因为我们每次增加一个点都得重算所有插值基底函数,这样会增加计算量,下面我们引入牛顿 ...
最新文章
- Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
- 深入了解以太坊虚拟机第5部分——一个新合约被创建后会发生什么
- 阿里云ACE共创空间——大数据方案体验1 日志服务
- zabbix php 安装,zabbix_Linux安装php5.6.31
- 封装mysql数据库_快速掌握 Mysql数据库对文件操作的封装
- linux vi 编辑命令
- script脚本中写不写$(document).ready(function() {});的差别
- Hexo报错Usage: hexo command处理及图片显示问题
- 大数据引领医药行业 为时过早
- [CGAL] CGAL的编译与使用
- 2020 Q4营收环比增长27.5%,前程无忧找回增长节奏
- 迷你西游最新服务器是哪个,《迷你西游》新开服务器公告
- 苹果六现价多少钱_六克拉的Derier多少钱 六克拉钻戒多少钱
- python控制苹果手机触摸屏失灵怎么办_iPhone手机触屏不灵敏怎么办 触屏失灵乱跳等问题解决方法大全必看...
- 亚马逊测评有哪些误解?
- NAACL最佳方法论文 | 课本上的A*搜索算法可以提升文本生成效果!
- 力扣(83.643)补8.29
- 物体检测中的小物体问题
- 一键卸载oracle11,Oracle11完全卸载
- 安全(Security)设计原则(1)
热门文章
- NVivo for Mac中的编码难理解?这6个视频帮助你!
- linux连win7打印机,如何在CentOS 6.5下安装Win7下的共享打印机服务
- Ruby on Rails快速创新性能的终极指南
- 为什么你玩lol遇到的队友都是坑(适用于所有moba游戏)
- linux嵌入式无线中继,openwrt无线中继设置步骤
- 破局人工智能:构建AI,与腾讯云一起探索语音应用场景
- android 各国语言对应的缩写
- linux天气软件,Ubuntu 18.04 6款查询天气的小工具推荐(适用于其它Linux)
- 华为HCIE云计算培训笔记第5天
- 华为USG6000 防火墙默认设置