多项式插值(数值计算方法)Matlab实现

多项式插值(数值计算方法)Matlab实现

  • 一. 原理介绍
  • 二. 程序设计
    • 1. 构建矩阵
    • 2. 求解矩阵方程
    • 3. 作出多项式函数
    • 4. 绘制插值曲线
    • 5. 完整代码
  • 三. 图例

一. 原理介绍

  1. 关于插值的定义及基本原理可以参照如下索引
    插值原理(数值计算方法)
  2. 前面已经介绍过插值原理的唯一性表述,对于分立的数据点,方程组:

P ( x 0 ) = y 0 ⇒ a 0 + a 1 x 0 + a 2 x 0 2 + ⋯ + a n x 0 n = y 0 , P ( x 1 ) = y 1 ⇒ a 0 + a 1 x 1 + a 2 x 1 2 + ⋯ + a n x 1 n = y 1 , ⋮ P ( x n ) = y n ⇒ a 0 + a 1 x n + a 2 x n 2 + ⋯ + a n x n n = y n . \begin{aligned} & P(x_0) = y_0 \quad \Rightarrow \quad a_0 + a_1 x_0 + a_2 x_0^2 + \cdots + a_n x_0^n = y_0, \\ & P(x_1) = y_1 \quad \Rightarrow \quad a_0 + a_1 x_1 + a_2 x_1^2 + \cdots + a_n x_1^n = y_1, \\ & \quad \vdots \\ & P(x_n) = y_n \quad \Rightarrow \quad a_0 + a_1 x_n + a_2 x_n^2 + \cdots + a_n x_n^n = y_n. \end{aligned} P(x0)=y0a0+a1x0+a2x02++anx0n=y0,P(x1)=y1a0+a1x1+a2x12++anx1n=y1,P(xn)=yna0+a1xn+a2xn2++anxnn=yn.

恒有解,多项式插值的目标即为在这一过程中求解系数 a 0 、 a 1 、 . . . 、 a n ⟺ [ a 0 a 1 a 2 ⋮ a n ] a_0、a_1、...、a_n\Longleftrightarrow\begin{bmatrix} a_0 \\ a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} a0a1...an a0a1a2an

  1. 即解方程组:
    [ 1 x 0 x 0 2 ⋯ x 0 n 1 x 1 x 1 2 ⋯ x 1 n ⋮ ⋮ ⋮ ⋱ ⋮ 1 x n x n 2 ⋯ x n n ] [ a 0 a 1 a 2 ⋮ a n ] = [ y 0 y 1 y 2 ⋮ y n ] . \begin{bmatrix} 1 & x_0 & x_0^2 & \cdots & x_0^n \\ 1 & x_1 & x_1^2 & \cdots & x_1^n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & x_n^2 & \cdots & x_n^n \end{bmatrix} \begin{bmatrix} a_0 \\ a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix}= \begin{bmatrix} y_0 \\ y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix}. 111x0x1xnx02x12xn2x0nx1nxnn a0a1a2an = y0y1y2yn .

关于该方程组的解法在线性代数中有多种,这里主要提及两种:
①高斯消元法
②克莱姆法则
程序设计过程中一般有封装好的库函数,如果为了考虑减少库依赖和提高程序运行效率及占用可能会用到上述方法(这里就不详细展开了)


二. 程序设计

1. 构建矩阵

% 构造Vandermonde矩阵A
A = zeros(n, n);
for i = 1:nfor j = 1:nA(i, j) = x_data(i)^(j-1);  % Vandermonde矩阵end
end

Ⅰ 构建一个 ( n × n ) (n \times n) (n×n)的矩阵 A 来描述多项式矩阵:
[ 1 x 0 x 0 2 ⋯ x 0 n 1 x 1 x 1 2 ⋯ x 1 n ⋮ ⋮ ⋮ ⋱ ⋮ 1 x n x n 2 ⋯ x n n ] \begin{bmatrix} 1 & x_0 & x_0^2 & \cdots & x_0^n \\ 1 & x_1 & x_1^2 & \cdots & x_1^n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & x_n^2 & \cdots & x_n^n \end{bmatrix} 111x0x1xnx02x12xn2x0nx1nxnn

其中:
A [ i ] [ j ] = x i j − 1 A[i][j] = x_{i}^{j-1} A[i][j]=xij1

式中第一列的1是通过 x i 0 x_{i}^{0} xi0得到的。

y_data = data(:, 2);

Ⅱ 构建系数矩阵 B,即原始数据对应的 y 值:

2. 求解矩阵方程

% 解线性方程组 A * coefficients = y_data
coefficients = A \ y_data;

注释:该部分通过反斜杠运算符 \ 计算线性方程组 A ⋅ c o e f f i c i e n t s = y d a t a A ⋅ coefficients = y_data Acoefficients=ydata的解。
①当方程组超定时(方程数大于未知数个数),返回最小二乘解,即最小化残差平方和 ∥ A ⋅ c o e f f i c i e n t s − y d a t a ∥ 2 ∥ A ⋅ coefficients − y_{data} ∥^2 Acoefficientsydata2
②当方程组适定时,返回精确解
③当方程组欠定时返回最小范数解

求解出矩阵形式形如
6.0000
-7.8333
4.5000
-0.6667
从上至下为最低次项到最高次项系数

3. 作出多项式函数

% 生成插值多项式的x和y值
x_vals = linspace(min(x_data) - 1, max(x_data) + 1, 500);
y_vals = polyval(flip(coefficients), x_vals);  % 计算插值多项式的y值

注释: 前面注释提到coefficients数组中的系数对应从左到右为最低到最高次项系数,而函数polyval()要求输入具有逆序的项系数:flip函数将系数的顺序反转,将变为从最高次到最低次项系数
y_vals = polyval(flip(coefficients), x_vals) 将计算每一个 x_val 对应的多项式值,并返回一个 y_vals 数组,包含每个 x_val 对应的 y 值。

4. 绘制插值曲线

% 绘制插值曲线
figure;
plot(x_vals, y_vals, 'b-', 'DisplayName', '插值曲线');
hold on;
scatter(x_data, y_data, 'ro', 'DisplayName', '数据点');
title('插值多项式');
xlabel('X轴');
ylabel('Y轴');
legend;
grid on;

5. 完整代码

% 输入数据 (x, y)
data = [1,22,33,54,4
];% 提取x和y值
x_data = data(:, 1);
y_data = data(:, 2);
n = length(data);% 构造Vandermonde矩阵A
A = zeros(n, n);
for i = 1:nfor j = 1:nA(i, j) = x_data(i)^(j-1);  % Vandermonde矩阵end
end% 解线性方程组 A * coefficients = y_data
coefficients = A \ y_data;% 输出插值多项式的系数
disp('插值多项式的系数:');
disp(coefficients);% 生成插值多项式的x和y值
x_vals = linspace(min(x_data) - 1, max(x_data) + 1, 500);
y_vals = polyval(flip(coefficients), x_vals);  % 计算插值多项式的y值% 绘制插值曲线
figure;
plot(x_vals, y_vals, 'b-', 'DisplayName', '插值曲线');
hold on;
scatter(x_data, y_data, 'ro', 'DisplayName', '数据点');
title('插值多项式');
xlabel('X轴');
ylabel('Y轴');
legend;
grid on;

三. 图例

这要求我们的输入数据都具有上述形式:

data = [x_1, y_1x_2, y_2x_3, y_3x_4, y_4...]

最后我们插值一组随机生成的测试数据

data = [7.264384, 3.9312921.943873, 6.2189038.384019, 2.5841035.672210, 9.0326740.294315, 4.7260186.129531, 7.9128469.516347, 1.4782643.824679, 5.596042
]

实际应用时应避免数据点过多导致的多项式次数过高


希望能够帮到迷途之中的你,知识有限,如有学术错误请及时指正,感谢大家的阅读

(^^)/▽ ▽\(^^)

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

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

相关文章

【Python深入浅出㉙】Python3邂逅MySQL:开启数据交互之旅

目录 一、Python 与 MySQL 的 “牵手” 前奏二、准备工作:搭建 “舞台”三、建立连接:开启沟通桥梁(一)pymysql 连接示例(二)mysql-connector 连接示例 四、基本操作:数据库的 “增删改查”&…

vite + axios 代理不起作用 404 无效

vite axios 代理不起作用 先看官方示例 export default defineConfig({server: {proxy: {// 字符串简写写法/foo: http://localhost:4567,// 选项写法/api: {target: http://jsonplaceholder.typicode.com,changeOrigin: true,rewrite: (path) > path.replace(/^\/api/, )…

【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(一)

文章目录 引言Elasticsearch检索方式概述两种检索方式介绍方式一:通过REST request uri发送搜索参数方式二:通过REST request body发送搜索参数(1)基本语法格式(2)返回部分字段(3)ma…

我准备做一个24H的摄像机模拟器,用录像视频模拟实时画面,如果能支持时间水印就更好了

之前我不是搞了一个摄像机模拟器吗《用EasyRTSPServer模拟摄像机RTSP流实现RTSP摄像机模拟器 》,搞的比较简单,就是用视频文件模拟摄像机的画面,那个只能简单用来做个IPC模拟,给开发者用用或者给调研的人看看可行性,实…

冒泡排序

目录 冒泡排序: 代码实现&#xff1a; 思路分析&#xff1a; 冒泡排序优化&#xff1a; 冒泡排序&#xff08;稳定&#xff09;: 想要数据从小到大排序。 代码实现&#xff1a; public static void bubbleSort(int[] arr) {//趟数for (int i 0; i < arr.length - 1; i) {…

国产编辑器EverEdit - 编辑辅助功能介绍

1 编辑辅助功能 1.1 各编辑辅助选项说明 1.1.1 行号 打开该选项时&#xff0c;在编辑器主窗口左侧显示行号&#xff0c;如下图所示&#xff1a; 1.1.2 文档地图 打开该选项时&#xff0c;在编辑器主窗口右侧靠近垂直滚动条的地方显示代码的缩略图&#xff0c;如下图所示&…

深入理解Java对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xf…

调用DeepSeek官方的API接口

效果 前端样式体验链接&#xff1a;https://livequeen.top/deepseekshow 准备工作 1、注册deepseek官网账号 地址&#xff1a;DeepSeek 点击进入右上角【API开放平台】&#xff0c;并进行账号注册。 2、注册完成后&#xff0c;依次点击【API keys】-【生成API key】&#x…

【SpringBoot实现全局API限频】 最佳实践

在 Spring Boot 中实现全局 API 限频&#xff08;Rate Limiting&#xff09;可以通过多种方式实现&#xff0c;这里推荐一个结合 拦截器 Redis 的分布式解决方案&#xff0c;适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标&#xff1a;基于客户端标识&#xff08…

香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。

简介&#xff1a; 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas&#xff0c;这是一种简化的视频合成系统&#xff0c;用于电影镜头设计&#xff0c;提供整体运动控制&#xff0c;以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…

01.Docker 概述

Docker 概述 1. Docker 的主要目标2. 使用Docker 容器化封装应用程序的意义3. 容器和虚拟机技术比较4. 容器和虚拟机表现比较5. Docker 的组成6. Namespace7. Control groups8. 容器管理工具9. docker 的优缺点10. 容器的相关技术 docker 官网: http://www.docker.com 帮助文档…

【DeepSeek】deepseek可视化部署

目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用&#xff0c;可是每次都需要winR输入cmd调出命令行进入到命令模式&#xff0c;输入命令ollama run deepseek-r1:latest。体验很…

开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革

2月18号&#xff0c;Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析&#xff0c;集成Deepseek R1大模型&#xff0c;通过AI技术的深度融合&#xff0c;致力于打造"会思考的BI系统"&#xff0c;让数据价值触手可及&#xff0c;助力企业实现从数据洞察到决策执…

Response 和 Request 介绍

怀旧网个人博客网站地址&#xff1a;怀旧网&#xff0c;博客详情&#xff1a;Response 和 Request 介绍 1、HttpServletResponse 1、简单分类 2、文件下载 通过Response下载文件数据 放一个文件到resources目录 编写下载文件Servlet文件 public class FileDownServlet exten…

分层耦合 - IOC详解

推荐使用下面三种, 第一种多用于其他类 声明bean的时候&#xff0c;可以通过value属性指定bean的名字&#xff0c;如果没有指定&#xff0c;默认为类名首字母小写。 使用以上四个注解都可以声明bean&#xff0c;但是在springboot集成web开发中&#xff0c;声明控制器bean只能用…

STM32 Flash详解教程文章

目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易&#xff0c;请勿搬运&#xff0c;感谢理解&#xff01;&#xff01;&#xff01; Flash基本概念…

WPF 设置宽度为 父容器 宽度的一半

方法1&#xff1a;使用 绑定和转换器 实现 创建类文件 HalfWidthConverter public class HalfWidthConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double width){return width / 4…

【Ubuntu VScode Remote SSH 问题解决】Resolver error: Error: XHR failed

1. 问题描述 VScode使用remote ssh 远程服务器&#xff0c;报错类似&#xff1a; [12:06:01.219] Downloading VS Code server locally... [12:06:01.310] Resolver error: Error: XHR failedat k.onerror (vscode-file://vscode-app/private/var/folders/g1/cvs2rnpx60qc3b4…

32单片机学习记录1之GPIO

32单片机学习记录1之GPIO 前置 GPIO口在单片机中扮演着什么角色&#xff1f; 在单片机中&#xff0c;GPIO口&#xff08;General Purpose Input/Output&#xff09; 是一种通用输入/输出接口&#xff0c;扮演着连接单片机与外部设备的桥梁角色。具体来说&#xff0c;它在单片…

第三十二周:Informer学习笔记

目录 摘要Abstract1 Informer1.1 预备知识1.2 模型框架1.3 实验分析 总结 摘要 本周学习的主要内容是Informer模型&#xff0c;Informer是一种专为长序列时间序列预测&#xff08;LSTF&#xff09; 设计的Transformer模型。相较于传统的Transformer&#xff0c;Informer采用Pr…