拉格朗日插值及牛顿差商方法的实现(Matlab)

一、问题描述
拉格朗日插值及牛顿差商方法的实现。

二、实验目的
掌握拉格朗日插值和牛顿差商方法的原理,能够编写代码实现两种方法;能够分析多项式插值中的误差。

三、实验内容及要求

  1. 利用拉格朗日插值及牛顿差商方法估计1980 年的人口,并与1980 年的真实值
    4452584592 进行比较,观察两种方法的结果是否相同。其中:
    (a)利用1970 年和1990 年的数据,得到插值直线,估计1980 年的人口;
    (b)利用1960 年、1970、1990 年的数据,得到插值抛物线,估计1980 年的人口;
    (c)利用全部数据,估计1980 年的人口。
    年份 人口
    1960 3039585530
    1970 3707475887
    1990 5281653820
    2000 6079603571

  2. 现有5 个插值节点:(0.6,1.433329), (0.7, 1.632316), (0.8, 1.896481), (0.9,2.247908), (1.0,2.718282)。
    (a)使用牛顿差商方法计算 x = 0.82 和 x = 0.98 的近似值;
    (b)上述数据来自函数f(x) = e(x2),使用插值误差公式找出x = 0.82 和x = 0.98 时的误差上界,比较误差界和实际误差。
    (c)画出在区间[0.5, 1]上实际的插值误差曲线。


四、算法原理

1. 插值多项式的具体形式
拉格朗日插值多项式:

给定 n + 1 n+1 n+1个插值节点 ( 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),拉格朗日插值多项式 L ( x ) L(x) L(x) 的表达式为:

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

其中, L ( x ) L(x) L(x) n n n 次多项式,通过 n + 1 n+1 n+1 个插值节点, x x x 是待插值的点。

牛顿差商插值多项式:

给定 n + 1 n+1 n+1个插值节点 ( 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),牛顿差商插值多项式 N ( x ) N(x) N(x) 的表达式为:

N ( x ) = y 0 + ( x − x 0 ) ⋅ f [ x 0 , x 1 ] + ( x − x 0 ) ⋅ ( x − x 1 ) ⋅ f [ x 0 , x 1 , x 2 ] + … + ( x − x 0 ) ⋅ ( x − x 1 ) ⋅ … ⋅ ( x − x n − 1 ) ⋅ f [ x 0 , x 1 , . . . , x n ] N(x) = y_0 + (x - x_0) \cdot f[x_0, x_1] + (x - x_0) \cdot (x - x_1) \cdot f[x_0, x_1, x_2] + \ldots + (x - x_0) \cdot (x - x_1) \cdot \ldots \cdot (x - x_{n-1}) \cdot f[x_0, x_1, ..., x_n] N(x)=y0+(xx0)f[x0,x1]+(xx0)(xx1)f[x0,x1,x2]++(xx0)(xx1)(xxn1)f[x0,x1,...,xn]

其中,差商 f [ x i , x i + 1 , . . . , x j ] f[x_i, x_{i+1}, ..., x_{j}] f[xi,xi+1,...,xj] 的计算方式为:

f [ x i , x i + 1 , . . . , x j ] = f [ x i + 1 , x i + 2 , . . . , x j ] − f [ x i , x i + 1 , . . . , x j − 1 ] x j − x i f[x_i, x_{i+1}, ..., x_{j}] = \frac{f[x_{i+1}, x_{i+2}, ..., x_{j}] - f[x_i, x_{i+1}, ..., x_{j-1}]}{x_j - x_i} f[xi,xi+1,...,xj]=xjxif[xi+1,xi+2,...,xj]f[xi,xi+1,...,xj1]

2. 多项式插值主定理

多项式插值主定理是插值理论的核心定理之一,它表述了一个多项式插值问题的存在唯一性。主定理陈述如下:

如果给定 n + 1 n+1 n+1 个节点 ( 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),其中所有的 x i x_i xi 都是互不相同的,则存在唯一一个次数不超过 n n n 的多项式 P ( x ) P(x) P(x) 满足 P ( x i ) = y i P(x_i) = y_i P(xi)=yi,对所有的 i i i 成立。

3. 多项式插值中的误差公式和用途
误差公式:

多项式插值中的误差公式用于估计插值多项式与真实函数之间的误差。对于拉格朗日插值,误差公式为:

∣ f ( x ) − L ( x ) ∣ ≤ M ( n + 1 ) ! ⋅ ∏ i = 0 n ∣ x − x i ∣ |f(x) - L(x)| \leq \frac{M}{(n+1)!} \cdot \prod_{i=0}^{n} |x - x_i| f(x)L(x)(n+1)!Mi=0nxxi

其中, M M M 是插值区间内的最大二阶导数的上界。
对于牛顿差商插值,误差公式为:

∣ f ( x ) − N ( x ) ∣ ≤ M 4 ( n + 1 ) ⋅ ∏ i = 0 n ∣ x − x i ∣ |f(x) - N(x)| \leq \frac{M}{4(n+1)} \cdot \prod_{i=0}^{n} |x - x_i| f(x)N(x)4(n+1)Mi=0nxxi

其中, M M M 是插值区间内的最大四阶导数的上界。

用途:
  • 误差估计: 误差公式用于估计插值多项式的精度,帮助确定插值点的选择和插值多项式的次数。
  • 数据逼近: 插值多项式可以用于逼近实际数据,使得在已知数据点上的拟合更为精确。
  • 数值计算: 插值多项式在数值计算中广泛应用,例如在数值积分和数值微分等问题中。

综上所述,插值方法通过构造插值多项式在给定节点上与已知数据一致,提供了一种在非常有限数据点上估计未知函数值的方法,并通过误差估计帮助控制插值的精度。


五、测试数据及结果

  1. 针对(a)(b)(c)三种情况,分别给出拉格朗日插值及牛顿差商方法的估计值(保留4 位小数)。给出3 种情况下的误差(保留4 位小数),分析是否插值多项式次数越高,近似结果越好。
  • 代码:
% 拉格朗日插值函数
function result = lagrange_interpolation(x, y, xi)
    n = length(x);
    result = 0;
    for i = 1:n
        term = y(i);
        for j = 1:n
            if j ~= i
                term = term * (xi - x(j)) / (x(i) - x(j));
            end
        end
        result = result + term;
    end
end

% 牛顿差商方法函数
function result = newton_interpolation(x, y, xi)
    n = length(x);
    f = zeros(n, n);
    f(:, 1) = y';
    for j = 2:n
        for i = 1:n-j+1
            f(i, j) = (f(i+1, j-1) - f(i, j-1)) / (x(i+j-1) - x(i));
        end
    end
    result = f(1, 1);
    for j = 2:n
        term = 1;
        for i = 1:j-1
            term = term * (xi - x(i));
        end
        result = result + f(1, j) * term;
    end
end
  • 结果:请添加图片描述

插值多项式次数越高,并不意味着近似结果一定越好。在插值中存在一个称为过拟合的问题,即使用高次多项式拟合数据,可能在已知数据点上表现得非常好,但在未知数据点上可能表现不佳。高次多项式在插值过程中容易产生振荡,尤其是在数据点边缘附近。这种情况下,多项式可能在数据点之间产生大的振荡,而不是真实的趋势。

  1. 按(a)(b)(c)的具体要求给出结果即可。
  • (a)&(b):
    请添加图片描述

  • ©:
    请添加图片描述

六、总结与思考

在实现拉格朗日插值和牛顿差商插值之前,深入理解了插值的基本原理是关键。插值的目标是通过已知数据点构建一个多项式,使得这个多项式在这些点上与真实函数相等。拉格朗日插值和牛顿差商插值是两种常见的插值方法,它们都基于多项式的性质,通过给定的插值节点生成插值多项式。

在编写和调试代码的过程中,遇到了一些错误,例如矩阵乘法的维度问题。这提醒了我在编写代码时要特别注意矩阵和数组的维度匹配,以避免出现运行时错误。同时,对于 MATLAB 的一些特殊语法和操作,要时刻保持警惕。

这次实验让我更深入地了解了插值方法的原理和应用,提高了对插值误差的理解。实践中遇到的问题促使我更加注重代码的细节和调试过程。通过这次实验,我对 MATLAB 编程、插值算法和数值计算的知识有了更全面的认识。在以后的学习和实践中,我将更加注重理论和实际问题的结合,提高编程和问题解决的能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了

监控员工电脑的软件在市场上种类繁多,以下是几款备受好评的电脑监控软件,它们各自具有独特的功能和优势,选择前必须了解一下才能做成正确决定。 1.安企神: 这款软件支持7天试用测试,获取测试版请移驾 ↓↓↓ 安企神…

常见的数据分析方法

1.周期性分析法 一个指标的观察时间拉长,看它是否有周期变化规律。周期性分析常见的有两者:自然周期和生命周期。自然周期,指业务指标会随着时间自然变化,如节假日用户/业绩出现下滑、产品销售额随季节变动等;生命周期,譬如“商品生命周期”、“APP生命周期”、“用户生…

【论文阅读】Rank-DETR(NIPS‘23)

paper:https://arxiv.org/abs/2310.08854 code:https://github.com/LeapLabTHU/Rank-DETR

二叉树——基础知识详解

前言: 经过前面的学习,我们接下来要开始二叉树的学习,因二叉树有难度,为了方便讲解以及各位的理解,本节知识会分成不同的小节进行学习,在本阶段只学习初阶的二叉树(堆,二叉数基本知识…

项目9-网页聊天室3(主界面之用户信息)

1.前端页面 CSS: 如何让img里的图片自适应div,且不变形_img自适应div大小 铺满且不变形-CSDN博客 JavaScript/jQuery 如何改变一个img元素的src属性|极客教程 (geek-docs.com) 2.要求 左上角显示用户的昵称和头像. 3.后端代码 3.1 添加拦截器 3.2 注册拦截器 …

信息学奥赛初赛天天练-14-阅读程序-字符数组、唯一分解定理应用

更多资源请关注纽扣编程微信公众号 1 2019 CSP-J 阅读程序1 (程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分) 1 输入的字符串只能由小写字母或大写字母组…

vue/uniapp 企业微信H5使用JS-SDK

企业微信H5需要我们使用一些SDK方法如获取外部联系人userid 获取当前外部联系人userid 使用SDK前提是如何通过config接口注入权限验证配置 使用说明 - 接口文档 - 企业微信开发者中心 当前项目是vue项目,不好直接使用 引入JS文件,但我们可以安装依赖…

python使用多种方法计算列表元素平方的技巧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、使用列表推导式进行元素平方 二、使用map函数进行元素平方 三、循环遍历列表进行元素平…

根据Depth Quality Tool的z轴误差值确认相机是否需要进行相机内参校准

下载Depth Quality Tool深度质量验证工具 网盘链接【RealSense SDK v2.55.1】 链接:https://pan.baidu.com/s/1NrlbwNDBUL8wpWfVwbpMwA?pwd2jl0 提取码:2jl0 打开Depth Quality Tool深度质量验证工具 找一面墙作为目标,将摄像头水平对准墙…

ssm超市管理系统java超市进销存管理系统jsp项目

文章目录 超市进销存管理系统一、项目演示二、项目介绍三、系统部分功能截图四、七千字项目文档五、部分代码展示六、底部获取项目源码和七千字项目文档(9.9¥带走) 超市进销存管理系统 一、项目演示 超市进销存管理系统 二、项目介绍 角色分…

007、字符串_命令

字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其 他四种数据结构的学习奠定基础。 设置值 set key value [ex seconds] [px milliseconds] [nx|xx] 下面操作设置键…

json web token及JWT学习与探索

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案 作用: 主要是做鉴权用的登录之后存储用户信息 生成得token(令牌)如下 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNjg3Njc0NDkyLCJleHAiOjE2ODc3NjA4OTJ9.Y6eFG…

go-zero 实战(1)

环境准备 go 版本 go version go1.22.2 linux/amd64 goctl 安装 goctl(官方建议读 go control)是 go-zero微服务框架下的代码生成工具。使用 goctl 可以显著提升开发效率,让开发人员将时间重点放在业务开发上,其功能有&#xff1a…

crossover玩游戏缺少文件怎么办 为什么游戏打开说缺失文件 crossover支持的游戏列表 CrossOver 提示 X 11 缺失怎么办?

CrossOver是一款类虚拟机软件,可以实现在Mac电脑上运行exe程序。不少Mac用户为了玩游戏,选择使用CrossOver这款软件玩Windows平台的游戏。 一、CrossOver支持的软件多吗 CrossOver是一款基于Wine的兼容工具,它可以让你在Mac或Linux上运行许多…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因,因为淘宝的镜像域名更换,由于 npm.taob…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题,也就是说有若干个起点,那我们就可以暴力一点,直接把多源最短路径问题转化成若干个单源最短路径问题,然后将每次的步数比较一下,取到最短的就是最短路径的结果,这…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列,栈&a…

【C++】牛客——活动安排

✨题目链接: AB31 活动安排 ✨题目描述 给定𝑛个活动,每个活动安排的时间为[𝑎𝑖,𝑏𝑖)。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。 ✨输入描述: 第一行…

cesium绘制区域编辑

npm 安装也是可以的 #默认安装最新的 yarn add cesium#卸载插件 yarn remove cesium#安装指定版本的 yarn add cesium1.96.0#安装指定版本到测试环境 yarn add cesium1.96.0 -D yarn install turf/turf <template><div id"cesiumContainer"></div&…