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

news2024/11/26 7:00:32

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

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

三、实验内容及要求

  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 编程、插值算法和数值计算的知识有了更全面的认识。在以后的学习和实践中,我将更加注重理论和实际问题的结合,提高编程和问题解决的能力。

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

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

相关文章

Docker 基础使用 (1)

文章目录 Docker 软件安装Docker 镜像仓库Docker 仓库指令Docker 镜像指令Docker 容器指令Docker 使用实例 —— 搭建 nginx 服务nginx 概念nginx 使用用 docker 启动 nginx 侧重对docker基本使用的概览。 Docker 软件安装 Linux Ubuntu 依次执行以下指令即可 # 更新软件包列…

Java | Leetcode Java题解之第102题二叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res new ArrayList<>();if (root ! null) queue.a…

代码模板,Cookie和Session

目录 代码模板 Cookie的基本使用 概念 Cookie的API public Cookie(String name, String value) 发送Cookie对象到客户端&#xff1a;使用response对象 创建Cookie对象并响应给浏览器 在服务器后端获取Cookie对象 Cookie[]cookiesrequset.getCookies(); Cookie的使用细…

Linux 软件包管理器 yum的下载、功能介绍及使用

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 Linux下的三种软件安装方…

香橙派 AiPro通过Micro USB接口进行串口调试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、配置步骤1.安装CH343驱动2.配置串口参数 二、使用步骤总结 前言 最近在玩一个新玩具香橙派 AiPro&#xff0c;除了通过SSH方式连接开发板以外&#xff0c;…

创新指南|降低 TikTok CPA 的 9 项专家策略

企业在 TikTok 上投放广告&#xff0c;往往最想确保获得最佳的投资回报。然而&#xff0c;这往往说起来容易做起来难。您需要了解如何利用不同的营销工具、定位策略和创意执行来实现您的业务目标并提高成本效率。本文将分享 9 个行之有效的策略&#xff0c;助您有效降低 TikTok…

【介绍下如何在SQL中添加数据】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Linux——多线程(一)

一、线程的概念 1.1线程概念 教材中的概念&#xff1a; (有问题?) 线程是进程内部的一个执行分支&#xff0c;线程是CPU调度的基本单位 之前我们讲的进程&#xff1a; 加载到内存中的程序&#x…

go-zero 实战(2)

go-zero 实战&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 创建了order 和 user 两个微服务。而order作为grpc的客户端&#xff0c;user 作为grpc的服务端&#xff0c;打通了 order 到 user的调用。接下来&#xff0c;我们在user中&#xff0c;加入mysql组件。确保数…

module ‘plotting‘ has no attribute ‘EpisodeStats‘

plotting.py 的版本不同&#xff0c;可以使用下列版本 reinforcement-learning/lib/plotting.py at master dennybritz/reinforcement-learning GitHubImplementation of Reinforcement Learning Algorithms. Python, OpenAI Gym, Tensorflow. Exercises and Solutions to a…

【Real】[Flask]SSTI

文章目录 前言一、题目解读二、解题过程三、知识点Flask是什么SSTI是什么SSTI是如何形成的易于利用的类payload是什么 探索类型和类层次结构和方法 前言 温馨提示&#xff1a;看到哪里不懂直接跳到知识点部分&#xff0c;理解完再回到解题过程。 一、题目解读 题目是[Flask]S…

winform安装时覆盖原版本并保留配置文件

如何打包参考大佬的博客添加链接描述 覆盖原版本 修改 Properties 下的 AssemblyInfo.cs 中的版本号&#xff0c;如下。原来是1.0.0.0&#xff0c;我修改成1.0.2。 选中 Setup 项目&#xff0c;修改 Version 属性修改 Version 属性后 ProductCode 也会改变&#xff0c;卸载程…

关于k8s集群的污点和容忍,以及k8s集群的故障排查思路

一 污点(Taint) 和 容忍(Tolerations) &#xff08;一&#xff09;污点 在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;污点&#xff08;Taints&#xff09;是一个重要的概念&#xff0c;用于实现Pod的调度控制。以下是关于污点的详细解释&#xff1a;1.污点定义 污点…

SSL协议:网络安全通信的守护者

在网络通信迅猛发展的今天&#xff0c;数据安全和隐私保护变得尤为重要。安全套接层协议&#xff08;Secure Sockets Layer, SSL&#xff09;作为早期网络加密及身份验证的基石&#xff0c;为在线数据传输提供了安全保障。下面我们就来了解一下SSL协议。 SSL协议概述 SSL协议最…

package.json中peerDependencies的使用场景

文章目录 peerDependencies 的使用场景peerDependencies 的使用案例为什么使用 peerDependencies需要注意的事项主要作用 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xf…

(2020|ICML PMLR,线性 Transformer,核函数,RNN)Transformer 是 RNN

Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 线性 Transformers 3.1. Transformer 3.2.…

力扣62 不同路径 Java版本

文章目录 题目描述代码 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少…

NLP技术发展和相关书籍分享

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学领域和人工智能领域的重要研究方向之一&#xff0c;旨在探索实现人与计算机之间用自然语言进行有效交流的理论与方法。它融合了语言学、计算机科学、机器学习、数学、认知心理学等…

场景文本检测识别学习 day10(MMdetection)

配置文件(config) 由于在大型项目中&#xff0c;一种模型需要分&#xff1a;tiny、small、big等很多种&#xff0c;而它们的区别主要在网络结构&#xff0c;数据的加载&#xff0c;训练策略等&#xff0c;且差别很多都很小&#xff0c;所以如果每个模型都手动从头写一份&#…

ssm150旅游网站的设计与实现+jsp

旅游网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本旅游网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞…