多项式拟合:最小二乘、拉格朗日插值、牛顿插值

多项式拟合是一种常用的数学和机器学习方法,它使用一个多项式函数来拟合一组数据点。多项式拟合的目的是在众多的样本点中找出满足样本点分布的多项式。它基于多项式函数的性质,可以表示为 y=w0+w1x+w2x2+…+wnxn 的形式,其中 y 是因变量(输出), x 是自变量(输入), w0,w1,…,wn 是多项式的系数。

多项式拟合的应用非常广泛,包括但不限于以下方面:

  1. 数据分析与预测:在数据分析中,多项式拟合可以帮助理解和预测变量之间的关系。例如,在经济学中,可以使用多项式拟合来预测股票价格或销售额的变化趋势。

  2. 信号处理:在信号处理领域,多项式拟合可用于去除噪声或平滑信号。通过拟合信号的主要趋势,可以减少随机噪声的影响。

  3. 图像处理:在图像处理中,多项式拟合可用于边缘检测、图像增强等任务。通过拟合图像的像素值分布,可以提取出图像的特征或进行图像修复。

  4. 机器学习算法:多项式拟合也是许多机器学习算法的基础,如多项式回归、支持向量机等。这些算法利用多项式拟合来捕捉数据中的非线性关系。

此外,多项式拟合还可以根据具体需求和应用场景进行定制和优化。例如,可以通过调整多项式的阶数来控制拟合的复杂度,或者使用不同的优化算法来确定最佳的拟合系数。

需要注意的是,多项式拟合并不总是稳定的,特别是在数据缺失或噪声较大的情况下。此外,过高的多项式阶数可能导致过拟合,使得模型在训练数据上表现良好,但在新数据上表现不佳。因此,在使用多项式拟合时,需要仔细选择模型参数并评估其性能。

总之,多项式拟合是一种强大而灵活的工具,可以在多个领域用于数据处理、分析和预测。然而,它的使用也需要谨慎,以避免潜在的稳定性问题和过拟合风险。

本文介绍三种MATLAB多项式拟合的方法,并给出演示代码。

1. 最小二乘多项式拟合

最小二乘多项式拟合是一种数学优化技术,用于寻找一个多项式函数,使得该函数与给定的数据点之间的平方误差之和最小。具体来说,假设有一组数据点 eq?%28x_i%2Cy_i%29,其中eq?i%3D1%2C2%2C...%2Cn,我们希望找到一个多项式函数eq?p%28x%29%20%3D%20w_0%20+%20w_1x%20+%20w_2x%5E2%20+%20...%20+%20w_mx%5Em,使得所有数据点与该多项式的垂直距离(即误差)的平方和最小。

最小二乘法的目标是最小化如下形式的损失函数(或称为残差平方和):

eq?S%20%3D%20%5Csum%20%5B%28y_i%20-%20p%28x_i%29%29%5E2%5D

其中 eq?%5Csum表示对所有的eq?i从 1 到eq?n求和。损失函数eq?S衡量了多项式拟合函数eq?p%28x%29与实际数据点之间的总体偏差。最小二乘法通过调整多项式的系数eq?w0%2Cw1%2C...%2Cwm来最小化eq?S

为了找到使eq?S最小的系数,通常会使用线性代数中的矩阵方法(如正规方程)或迭代优化算法(如梯度下降)。一旦找到了这些系数,就得到了一个多项式函数,该函数以最小平方误差的方式拟合了给定的数据点。

最小二乘多项式拟合具有许多优点,例如计算效率高、易于实现、以及在许多情况下能够提供很好的拟合效果。然而,它也有一些局限性,例如对于某些复杂的数据分布,可能无法找到一个合适的多项式来准确拟合。此外,如果多项式的阶数选择不当,可能会导致过拟合或欠拟合的问题。

在实际应用中,最小二乘多项式拟合被广泛用于回归分析、信号处理、图像处理、物理建模等多个领域。通过拟合数据中的趋势和模式,它可以帮助我们理解和预测变量的行为,并为决策提供有力的支持。

演示代码如下:

clc;clear;close all;
%% 最小二乘多项式拟合
% 定义一些样本数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
y = [2, 3, -5, 3, 5, 11, -2, 3, 7, -7];% 指定拟合多项式的次数
n = 9;% 使用 polyfit 函数进行最小二乘拟合
p = polyfit(x, y, n);% 生成拟合曲线的 x 值
x_fit = linspace(min(x), max(x), 100);
% 计算拟合曲线的 y 值
y_fit = polyval(p, x_fit);% 绘制原始数据
figure;
plot(x, y, '.blue', 'MarkerSize', 25); % 原始数据点
hold on;% 绘制拟合曲线
plot(x_fit, y_fit, 'r-', 'LineWidth', 2); % 拟合曲线
hold off;% 添加图例和标签
legend('原始数据', '拟合曲线','Fontsize',11);
xlabel('数据序号','Fontsize',12);
ylabel('数据大小','Fontsize',12);
title('最小二乘多项式拟合','Fontsize',12);
grid on;

 

fe458284c62ea8cce16cce8f5d814867.png

最小二乘多项式拟合

 

2. 拉格朗日插值多项式拟合

拉格朗日插值多项式拟合是一种通过已知的数据点来构造一个多项式函数,从而在未知数据点处进行预测或者估计的方法。具体地,给定一组互不相同的数据点 ,其中 是互不相同的实数,拉格朗日插值多项式 可以表示为 ,其中 是拉格朗日基函数。

拉格朗日基函数 的定义为 ,其中 。这意味着基函数 在 处取值为1,而在其他插值点 处取值为0。这样,当 等于某个特定的插值点 时,只有对应的基函数 对 有贡献,其他基函数均为零。因此,拉格朗日插值多项式能够确保在已知的数据点处,多项式与给定的函数值完全匹配。

拉格朗日插值多项式拟合的求解过程需要先求出基函数 ,然后再将其带入到多项式中求解。这种方法具有结构简单、运算简便的优点,因此在许多领域得到了广泛的应用。

然而,需要注意的是,拉格朗日插值多项式拟合也存在一些局限性。例如,当插值节点的数量增加时,多项式的次数也会相应增加,这可能导致龙格现象(Runge's phenomenon),即在区间的某些部分,插值多项式的值可能会远离实际函数值,产生较大的误差。因此,在选择使用拉格朗日插值多项式拟合时,需要综合考虑数据的性质、插值节点的数量和分布等因素。

演示代码如下:

clc;clear;close all;
%% 拉格朗日插值多项式拟合
% 定义要拟合的原始数据点
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
y = [2, 3, -5, 3, 5, 11, -2, 3, 7, -7];% 定义要插值的点
x_interp = 1:0.01:10;% 使用拉格朗日插值法拟合多项式
n = length(x);
p = zeros(size(x_interp));
for i = 1:nL = ones(size(x_interp));for j = 1:nif j ~= iL = L .* (x_interp - x(j)) / (x(i) - x(j));endendp = p + y(i) * L;
end% 绘制原始数据点和插值结果
figure;
plot(x, y, '*', x_interp, p, '-', 'LineWidth', 2); % 拟合曲线% 添加图例和标签
legend('原始数据', '拟合曲线','Fontsize',11);
xlabel('数据序号','Fontsize',12);
ylabel('数据大小','Fontsize',12);
title('拉格朗日插值多项式拟合','Fontsize',12);
grid on;

 

b785ca000f0b2e43dba298d2c7e3e9fa.png

拉格朗日插值多项式拟合

 

3.牛顿插值多项式拟合

牛顿插值多项式拟合是一种数学方法,用于通过已知的数据点来构造一个多项式函数,以便在未知的数据点处进行预测或估计。这种方法的核心在于使用差商的概念和牛顿插值公式来生成多项式

首先,差商是一系列与函数值及其导数有关的量,通过计算这些差商,可以构建出牛顿插值多项式。牛顿插值多项式的优点在于,每增加一个新的数据点(或称为节点),插值多项式只需要增加一项,这使得递推运算变得相对容易

具体地,牛顿插值多项式拟合的过程大致如下:首先,根据已知的数据点计算出各阶差商。然后,利用这些差商和牛顿插值公式,可以构建出一个多项式,该多项式通过所有的已知数据点。最后,使用这个多项式来估计未知数据点的值。

需要注意的是,虽然牛顿插值多项式拟合在许多情况下都能提供较好的结果,但它也有一些局限性。例如,当数据点的分布不均匀或者存在较大的噪声时,牛顿插值多项式可能无法给出准确的预测。此外,如果多项式的阶数选择不当,也可能导致过拟合或欠拟合的问题。

因此,在使用牛顿插值多项式拟合时,需要综合考虑数据的性质、插值节点的数量和分布等因素,以确保得到准确且可靠的结果。同时,也可以结合其他方法(如曲线拟合、多项式拟合等)来进行比较和验证,以提高预测的准确性。

演示代码如下:

clc;clear;close all;
%% 牛顿插值法拟合多项式
% 定义要拟合的原始数据点
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
y = [2, 3, -5, 3, 5, 11, -2, 3, 7, -7];% 定义要插值的点
x_interp = 1:0.01:10;% 使用牛顿插值法拟合多项式
n = length(x);
F = zeros(n, n); %用于存储差商
F(:,1) = y';
for j = 2:nfor i = j:nF(i,j) = (F(i,j-1) - F(i-1,j-1)) / (x(i) - x(i-j+1));end
end% 计算插值多项式在给定点上的值
p = zeros(size(x_interp));
for k = 1:length(x_interp)P = F(1,1);for j = 2:nterm = F(j,j);for i = 1:j-1term = term * (x_interp(k) - x(i));endP = P + term;endp(k) = P;
end% 绘制原始数据点和插值结果
plot(x, y, '*', x_interp, p, '-', 'LineWidth', 2); % 拟合曲线
legend('原始数据', '拟合曲线','Fontsize',11);
xlabel('数据序号','Fontsize',12);
ylabel('数据大小','Fontsize',12);
title('牛顿插值多项式拟合','Fontsize',12);
grid on;

 

6b28123462967dc8436eaf61e86aa3d5.png

牛顿插值多项式拟合

 

(本文为CSDN“光学码农”原创,转载须注明本文网址,违者必究!)

 

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

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

相关文章

4.11学习总结

一.IO流 一.java中IO的初步了解 (一).概念: Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据…

html 实现多个文本内容,轮播效果类似gif图片

前几日&#xff0c;产品要求后端实现一个将文字转为gif图片&#xff0c;要用于官网首页广告栏。我想这不是前段就能实现吗&#xff0c;怎么还要求后端生成gif&#xff0c;然后前段在展示。你确定招的前段不是对手公司过来的卧底&#xff1f;&#xff1f;&#xff1f; <!DOCT…

asp.net core 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…

贪心算法|56.合并区间

力扣题目链接 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() 0) return result; // 区间集合为空直接返回// 排序的参数使用了lambda表达…

解决vue启动项目报错:npm ERR! Missing script: “serve“【详细清晰版】

目录 问题描述问题分析和解决情况一解决方法情况二&#xff08;常见于vue3&#xff09;解决方法情况三解决方法 问题描述 在启动vue项目时通常在控制台输入npm run serve 但是此时出现如下报错&#xff1a; npm ERR! Missing script: "serve" npm ERR! npm ERR! T…

qt-C++笔记之获取当前文件名所在路径并拼接出新文件路径的一种方法

qt-C笔记之获取当前文件名所在路径并拼接出新文件路径的一种方法 code review! 运行 在 Qt 框架中&#xff0c;QFileInfo 和 QDir类通常用于文件系统信息的查询和目录管理。下面是按照这样一种新颖的步骤来拼接新文件路径的示例代码&#xff1a; #include <QFileInfo>…

微商商城源码小程序好用么?

商城APP作为电子商务行业的重要组成部分&#xff0c;已经成为了人们购物的主要方式之一。为了在竞争激烈的市场中脱颖而出&#xff0c;开发一款专业且思考深度的商城APP方案显得尤为关键。本文将从专业性和思考深度两个方面&#xff0c;探讨商城APP的开发方案。 一、专业性的重…

Qt Creator 12.0.2 debug 无法查看变量的值 Expression too Complex

鼠标放在局部变量上提示“expression too complex”。 在调试窗口也看不到局部变量的值。 这应该是qt的一个bug&#xff0c;https://bugreports.qt.io/browse/QTCREATORBUG-24180 暂时解决方法&#xff1a; 如下图&#xff0c;需要右键项目然后执行"Clean"和&quo…

Blazor OIDC 单点登录授权实例7 - Blazor hybird app 端授权

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor OIDC 单点登录授权实例2-登录信息组件wasmBlazor OIDC 单点登录授权实例3-服务端管理组件Blazor OIDC 单点登录授权实例4 …

Kyligence 发布企业级 AI 解决方案,Data + AI 落地迈向新阶段

4月11日&#xff0c;Kyligence 2024 数智论坛暨春季发布会成功召开。Kyligence 正式发布全新的企业级 AI 解决方案&#xff0c;基于服务金融、零售、制造、医药等行业领先客户的落地实践&#xff0c;Kyligence 为企业提供准确、可靠、智能的 AI 指标平台一站式解决方案&#x…

VQ-BeT: Behavior Generation with Latent Actions 代码复现(Mujoco 安装)

代码地址&#xff1a;https://github.com/jayLEE0301/vq_bet_official.git 创建环境 conda create -n vq-bet python3.9 conda activate vq-bet拉取库 git clone https://github.com/jayLEE0301/vq_bet_official.git export PROJ_ROOT$(pwd)安装pytorch conda install pyto…

win11 连接海康摄像头 ONVif协议

目录 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 海康摄像头设置支持onvif协议 安装onvif协议 onvif协议示例代码 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 第一步、桌面右键新建一个 txt 的文档 第二步、打开文档并且复制粘贴下面代码 CreateObject(&…