【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】


文章目录

  • 一、近似表达方式
    • 1. 插值(Interpolation)
    • 2. 拟合(Fitting)
    • 3. 投影(Projection)
  • 二、Lagrange插值
    • 1. 拉格朗日插值方法
    • 2. Lagrange插值公式
      • a. 线性插值(n=1)
      • b. 抛物插值(n=2)
  • 三、Newton插值
    • 1. 天书
    • 2. 人话
    • 3. 例题
    • 4. python实现
    • 5. C语言实现

一、近似表达方式

  插值、拟合和投影都是常用的近似表达方式,用于对数据或函数进行估计、预测或表示。

1. 插值(Interpolation)

  指通过已知数据点之间的插值方法,来估计或推算出在这些数据点之间的数值。插值可以用于构建平滑的曲线或曲面,以便在数据点之间进行预测或补充缺失的数据。

2. 拟合(Fitting)

  指通过选择合适的函数形式和参数,将一个数学模型与已知数据点拟合得最好的过程。拟合的目标是找到一个函数,使其在数据点附近的值与实际观测值尽可能接近。拟合可以用于数据分析、曲线拟合、回归分析等领域。

3. 投影(Projection)

  指将一个向量或一组向量映射到另一个向量空间或子空间上的过程。在线性代数中,投影可以用来找到一个向量在另一个向量或向量空间上的投影或投影分量。投影可以用于降维、数据压缩、特征提取等领域,以及计算机图形学中的投影变换。

二、Lagrange插值

   Lagrange插值是一种用于通过已知数据点构造一个多项式函数的方法基于拉格朗日插值多项式的原理(该多项式通过每个数据点并满足相应的条件),拉格朗日插值可用于估计数据点之间的值,而不仅仅是在给定数据点上进行插值。

1. 拉格朗日插值方法

  1. 拉格朗日基函数: 对于给定的插值节点 x 0 , x 1 , … , x n x_0, x_1, \ldots, x_n x0,x1,,xn,拉格朗日插值使用如下的拉格朗日基函数:

    L i ( x ) = ∏ j = 0 , j ≠ i n x − x j x i − x j L_i(x) = \prod_{j=0, j\neq i}^{n} \frac{x - x_j}{x_i - x_j} Li(x)=j=0,j=inxixjxxj

  2. 插值条件: 拉格朗日插值要求插值多项式满足插值条件:对所有 i i i P ( x i ) = y i P(x_i) = y_i P(xi)=yi

  3. 插值多项式: 构造插值多项式为: P ( x ) = ∑ i = 0 n y i L i ( x ) P(x) = \sum_{i=0}^{n} y_i L_i(x) P(x)=i=0nyiLi(x)

  通过这种方法,可以在给定的数据点上获得一个平滑的插值函数,使得在这些数据点之间的任何位置上都可以估计函数的值。Lagrange插值在数据点较少或数据点之间存在较大间隔时可能会出现一些问题,例如插值多项式可能会产生振荡现象,这被称为Runge现象

2. Lagrange插值公式

L i ( x ) = ∏ j = 0 , j ≠ i n x − x j x i − x j L_i(x) = \prod_{j=0, j\neq i}^{n} \frac{x - x_j}{x_i - x_j} Li(x)=j=0,j=inxixjxxj P ( x ) = ∑ i = 0 n y i L i ( x ) P(x) = \sum_{i=0}^{n} y_i L_i(x) P(x)=i=0nyiLi(x)

a. 线性插值(n=1)

P ( x ) = y 0 ( x − x 1 ) ( x 0 − x 1 ) + y 1 ( x − x 0 ) ( x 1 − x 0 ) P(x) = y_0 \frac{(x - x_1)}{(x_0 - x_1)} + y_1 \frac{(x - x_0)}{(x_1 - x_0)} P(x)=y0(x0x1)(xx1)+y1(x1x0)(xx0)

b. 抛物插值(n=2)

P ( x ) = y 0 ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) + y 1 ( x − x 0 ) ( x − x 2 ) ( x 1 − x 0 ) ( x 1 − x 2 ) + y 2 ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) P(x) = y_0 \frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)} + y_1 \frac{(x - x_0)(x - x_2)}{(x_1 - x_0)(x_1 - x_2)} + y_2 \frac{(x - x_0)(x - x_1)}{(x_2 - x_0)(x_2 - x_1)} P(x)=y0(x0x1)(x0x2)(xx1)(xx2)+y1(x1x0)(x1x2)(xx0)(xx2)+y2(x2x0)(x2x1)(xx0)(xx1)

三、Newton插值

1. 天书

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 人话

  Newton插值基于差商的概念:通过给定的一组数据点,Newton插值可以生成一个通过这些点的多项式,从而在给定的数据范围内进行插值和外推。
  Newton插值的基本思想是使用差商来递归地构建一个多项式。差商是通过递归地计算数据点之间的差分来定义的。具体而言,对于给定的数据点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x n , y n ) (x_0, y_0), (x_1, y_1), ..., (x_n, y_n) (x0,y0),(x1,y1),...,(xn,yn),差商可以表示为:

f [ x 0 ] = y 0 f[x_{0}] = y_{0} f[x0]=y0 f [ x 1 , x 0 ] = ( f [ x 1 ] − f [ x 0 ] ) ( x 1 − x 0 ) f[x_{1}, x_{0}] =\frac{ (f[x_{1}] - f[x_{0}]) }{ (x_{1} - x_{0})} f[x1,x0]=(x1x0)(f[x1]f[x0]) f [ x 2 , x 1 , x 0 ] = ( f [ x 2 , x 1 ] − f [ x 1 , x 0 ] ) ( x 2 − x 0 ) f[x_{2}, x_{1}, x_{0}] =\frac{ (f[x_{2}, x_{1}] - f[x_{1}, x_{0}]) }{ (x_{2} - x_{0})} f[x2,x1,x0]=(x2x0)(f[x2,x1]f[x1,x0]) … … … … ………… ………… f [ x n , x n − 1 , . . . , x 0 ] = ( f [ x n , x n − 1 , . . . , x 1 ] − f [ x n − 1 , . . . , x 0 ] ) ( x n − x 0 ) f[x_{n}, x_{n-1}, ..., x_{0}] = \frac{(f[x_{n}, x_{n-1}, ..., x_{1}] - f[x_{n-1}, ..., x_{0}])}{(x_{n} - x_{0})} f[xn,xn1,...,x0]=(xnx0)(f[xn,xn1,...,x1]f[xn1,...,x0])
然后,通过将这些差分商逐步添加到多项式中,可以得到一个多项式,表示为:
P ( x ) = f [ x 0 ] + f [ x 1 , x 0 ] ( x − x 0 ) + f [ x 2 , x 1 , x 0 ] ( x − x 0 ) ( x − x 1 ) + . . . P(x) = f[x_{0}] + f[x_{1}, x_{0}](x - x_{0}) + f[x_{2}, x_{1}, x_{0}](x - x_{0})(x - x_{1}) + ... P(x)=f[x0]+f[x1,x0](xx0)+f[x2,x1,x0](xx0)(xx1)+...

  Newton插值的优点之一是它可以通过添加更多的数据点来逐步改进插值结果。然而,同Lagrange插值一样,它也存在龙格现象(Runge’s phenomenon),导致在边界处产生振荡。

3. 例题

在这里插入图片描述

4. python实现

def newton_interpolation(x, y, xi):# 计算差分商n = len(x)f = [[0] * n for _ in range(n)]for i in range(n):f[i][0] = y[i]for j in range(1, n):for i in range(n - j):f[i][j] = (f[i + 1][j - 1] - f[i][j - 1]) / (x[i + j] - x[i])# 构建插值多项式result = f[0][0]for j in range(1, n):term = f[0][j]for i in range(j):term *= (xi - x[i])result += termreturn result# 示例数据
x = [0.32, 0.34, 0.36]
y = [0.314567, 0.333487, 0.352274]
xi = 0.3367# 进行插值
interpolated_value = newton_interpolation(x, y, xi)
print("插值结果:", interpolated_value)

输出:

插值结果: 0.3303743620375

5. C语言实现

#include <stdio.h>double newton_interpolation(double x[], double y[], int n, double xi) {// 计算差分商double f[n][n];for (int i = 0; i < n; i++) {f[i][0] = y[i];}for (int j = 1; j < n; j++) {for (int i = 0; i < n - j; i++) {f[i][j] = (f[i+1][j-1] - f[i][j-1]) / (x[i+j] - x[i]);}}// 构建插值多项式double result = f[0][0];for (int j = 1; j < n; j++) {double term = f[0][j];for (int i = 0; i < j; i++) {term *= (xi - x[i]);}result += term;}return result;
}int main() {// 示例数据double x[] = {0.32, 0.34, 0.36};double y[] = {0.314567, 0.333487, 0.352274};int n = sizeof(x) / sizeof(x[0]);double xi = 0.3367;// 进行插值double interpolated_value = newton_interpolation(x, y, n, xi);printf("插值结果: %f\n", interpolated_value);return 0;
}

输出:

插值结果: 0.330374

  • Lagrange插值使用基于Lagrange多项式的方法来构建插值多项式.
    • Lagrange多项式是通过将每个数据点与一个基函数相乘,并使得在其他数据点上该基函数为零来构造的。最终的插值多项式是将所有这些基函数相加得到的。
    • Lagrange插值的优点是易于理解和实现,但在数据点较多时可能会导致计算复杂度较高的问题。
  • Newton插值使用差商的概念来构建插值多项式。
    • 差商是一个递归定义的概念,用于计算插值多项式中的系数。差商的计算可以通过表格形式进行,其中每一列都表示不同阶数的差商,通过计算差商,可以逐步构建插值多项式。
    • Newton插值的优点是在计算差商时可以重复使用已计算的差商值,从而减少计算量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

glibc下的tpmalloc

文章目录 1、内存布局2、操作系统内存分配的相关函数2.1 Heap 操作相关函数2.2 Mmap 映射区域操作相关函数 3、ptmalloc的实现原理3.1 Main_arena 与 non_main_arena3.2 chunk 结构3.3 空闲 chunk 容器的组织形式3.3.1 small bin3.3.2 Large bins3.3.3 Unsorted bin3.3.4 Fast …

如何使用Cloudreve搭建本地云盘系统并实现随时远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…

利用 FormData 实现文件上传、监控网路速度和上传进度(前端原生,后端 koa)

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

【latex笔记】双栏格式下插入单栏、双栏格式图片

双栏格式下插入单栏、双栏格式图片 1.缘起multicols2.双栏格式 插入单栏图片3.双栏格式 插入双栏图片 1.缘起multicols 插入双栏格式图片问题被困扰了有很长一段时间&#xff0c;查看网络资源也一直没找到解决方法&#xff0c;今天查看Latex官方文档&#xff0c;才发现因为mul…

探索图像生成中的生成对抗网络 (GAN) 世界

一、介绍 生成对抗网络&#xff08;GAN&#xff09;的出现标志着人工智能领域的一个重要里程碑&#xff0c;特别是在图像生成领域。GAN 由 Ian Goodfellow 和他的同事于 2014 年提出&#xff0c;代表了机器学习中的一种新颖方法&#xff0c;展示了生成高度逼真和多样化图像的能…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

1 通过Athena查询s3中的数据 此实验使用s3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 1 通过Athena查询s3中的数据1.1 架构图1.2 创建Glue数据库1.3 创建爬网程序1.4 创建表1.4.1 爬网程序创建表1.4.2 手动创建表 1…

剑指 Offer(第2版)面试题 16:数值的整数次方

剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方 剑指 Offer&#xff08;第2版&#xff09;面试题 16&#xff1a;数值的整数次方解法1&#xff1a;快速幂 - 递归写法解法2&#xff1a;快速幂 - 非递归写法 剑指 Offer&#xff08;第2版&#xff…

【STM32】STM32学习笔记-GPIO输出(05)

00. 目录 文章目录 00. 目录01. GPIO简介02. GPIO基本结构03. GPIO位结构04. GPIO模式4.1 输入浮空4.2 输入上拉4.3 输入下拉4.4 模拟输入4.5 开漏输出4.6 开漏复用功能4.7 推挽式输出4.8 推挽式复用功能 05. LED和蜂鸣器简介06. 面包板07. 附录 01. GPIO简介 GPIO&#xff08…

ES 快照到 S3 并从 Windows 共享目录恢复(qbit)

前言 业务需要将 Elasticsearch 快照到 AWS S3&#xff0c;再将快照拷贝到 Windows 系统&#xff0c;并恢复到 Elasticsearch。如下图所示&#xff1a; 环境 Elasticsearch 7.10.1 Windows Server 2019 Ubuntu 20.04 &#xff08;ES 宿主&#xff09; ES 集群1 安装 S3 插…

GPIO的使用--点亮外接小灯泡--开关控制

目录 一、确定引脚接线模式 接线时注意以下几点&#xff1a; 二、外接小灯泡引脚连接(以F12引脚为例) 1.正极接GPIOF3.3v电压引脚、负极接F12 2.正极接GPIOF3.3v电压引脚、负极接F12 三、问题检查 一、确定引脚接线模式 小灯泡有两级&#xff1a;正极、负极&#xff0c;…

DevOps搭建(二)-VMware安装虚拟机详细步骤

1、下载Centos镜像 官方下载地址: Download 这里我们使用Centos7镜像 下载地址: Index of /centos/7.9.2009/isos/x86_64/ 2、设置固定IP 2.1、VMware的配置 首先打开编辑里面的 虚拟网络编辑器,如图: 进入更改设置之后,进行后面的操作,

pytorch 数据预加载

1. Abstract 本文介绍一个工具 PreDataLoader&#xff0c;它包装 torch.utils.data.DataLoader&#xff0c;接收该类的一个实例 loader&#xff0c;启动一个线程 t&#xff0c;创建一个队列 q&#xff0c;t 将 loader 中的数据预加载到队列 q 中, 以在模型计算时也能启动启动数…

3.5毫米音频连接器接线方式

3.5毫米音频连接器接线方式 耳机插头麦克风插头 绘制电路图注意事项 3.5毫米音频连接器分为单声道开关型和无开关型如下图&#xff1a; sleeve&#xff08;套筒&#xff09; tip&#xff08;尖端&#xff09; ring&#xff08;环&#xff09; 耳机插头 麦克风插头 绘制电路图…

【软考S01计算机系统知识】E01 中央处理单元

E01 中央处理单元 计算机系统硬件基本组成中央处理单元组成功能 多核 CPU 计算机系统硬件基本组成 计算机系统由硬件和软件组成&#xff0c;基本硬件系统由 运算器、控制器、存储器、输入设备 和 输出设备 5大部件组成&#xff1b; 中央处理单元&#xff1a; 运算器、控制器等…

el-table分页时多选数据的保存和回显

大致思路&#xff1a; 把所有选择的数据全部存到一个大数组中&#xff0c;切页的时候匹配原数据利用ref节点的.toggleRowSelection方法进行回显 具体步骤&#xff1a; 1、勾选和全选时需要判断是选中还是取消&#xff0c;然后更新大数组数据。 2、分页获取新数据之后匹配当…

2023Q4 私有化版本发布,和鲸 ModelWhale 持续赋能大科研、高校教改的 AI for Science

作为数据科学多人协同平台&#xff0c;和鲸 ModelWhale 从一而终地为各级用户提供完备而周全的解决方案&#xff0c;覆盖数据研究、算法探索、模型调优、Python 案例教学等多个场景。特别地&#xff0c;如果对研究分析平台有更高的安全合规要求、希望兼容原有业务系统&#xff…

不懂编程,如何获取全面海量的重要数据?

在大数据和人工智能时代&#xff0c;数据的重要性变得更加突出。以下是数据在这个时代的重要性所体现的几个方面&#xff1a; 决策依据 模型训练 个性化服务 创新驱动 智能决策支持 本文&#xff0c;将介绍两个获取数据的方法 1、利用爬虫框架写采集程序 在前面&#xff…

JIRA 重建索引

JIRA为了增快搜索速度&#xff0c;为所有的问题的字段生成一个索引文件。这个索引文件存在磁盘的一个文件里面&#xff0c; 并且会实时更新。但是有时候某些操作后&#xff08;例如增加自定义字段&#xff09;&#xff0c;需要重新建索引。 详情请见 Re-indexing after major c…