基于MATLAB的最小二乘法拟合与拟合工具箱使用教程(附完整代码与算法)

【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现 上面谈到了R2R^2R2只能用于拟合函数是线性函数时拟合结果的评价,那么什么是线性函数呢?只有一次函数是线性函数吗?其实不是的。yabx2y=a+bx^2yabx2是线性函数吗?是的。因为我们这里说的线性函数是指对参数为线性(线性于参数)。如何判断线性于参数的函数?在函数中,参数仅以一次方出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合函数形式。比如下面的三种函数都是线性于参数的函数:而yax−b2yasinbcxyx−。 阅读详情
AI摘要

本文介绍了MATLAB中进行最小二乘曲线拟合和非线性拟合的方法,通过具体例子展示了如何使用lsqcurvefit和nlinfit函数进行数据拟合,并利用curvefittingtool工具进行图形化拟合操作。同时,讨论了拟合的误差评估指标和参数初始化策略。

一. 最小二乘曲线拟合

给定一组数据(x_i,y_i),\quad i=1,2,\cdots,N满足某一函数模型\hat y(x)=f(a,x),其中a为待定系数向量。

那么,最小二乘曲线拟合的目标就是:求出一组待定系数的值,使得以下表达式子最小:

J=min\sum_{i=1}^N[y_i-\hat y(x_i)]^2=min\sum_{i=1}^N[y_i-f(a,x_i)]^2

在MATLAB中格式如下:

[a,jm]=lsqcurvefit(Fun,a0,x,y)

%Fun原型函数的MATLAB表示
%a0为最优化的初值
%x,y为原始输入输出的数据向量
%a为返回的待定系数向量
%jm为此待定系数下的目标函数的值

例题1

由以下MATLAB代码生成一组数据:

x=0:.1:10;
y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);

该组数据满足y(x),求出待定系数a_i,使得目标函数的值为最小。

y(x)=a_1e^{-a_2x}+a_3e^{-a_4x}sin(a_5x)

解:

MATLAB代码如下:


clc;clear;


x=0:0.1:10;
y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);
f=inline('a(1)*exp(-a(2)*X)+a(3)*exp(-a(4)*X).*sin(a(5)*X)','a','X');

ff=optimset;
ff.TolFun=1e-20;ff.TolX=1e-15; %修改精度限制

[xx,res]=lsqcurvefit(f,[1 1 1 1 1],x,y,[],[],ff)

%绘制曲线
x1=0:0.01:10;
y1=f(xx,x1); %代入运算
plot(x1,y1,x,y,'o');
legend('拟合曲线','原数据点')

运行结果:

xx = 0.120000000000000   0.213000000000000   0.540000000000000   0.170000000000000   1.230000000000000


res =0

例题2

已知以下数据可能满足y(x)=ax+bx^2e^{-cx}+d。求满足数据的最小二乘解a,b,c,d的值。

 解:

令a_1=a,a_2=b,a_3=c,a_4=d,将原函数写成如下:

y(x)=a_1x+a_2x^2e^{-a_3x}+a_4

MATLAB代码如下:

clc;clear;

%输入已知参数
x=0.1:0.1:1;
y=[2.3201,2.6470,2.9707,3.2885,3.6008,3.9090,4.2147,4.5191,4.8232,5.1275];

f=inline('a(1)*X+a(2)*X.^2.*exp(-a(3)*X)+a(4)','a','X');
a=lsqcurvefit(f,[1 2 2 3],x,y)

%绘制曲线
y1=f(a,x);
plot(x,y1,x,y,'o');
legend('拟合曲线','原数据点');

运行结果:

a = 3.100076146500888   1.502655931856580   4.004634473891176   2.000013871079962

在MATLAB中,非线性拟合命令格式如下:

[beta,r,J]=nlinfit(x,y,fun,beta0)
%x,y为原始数据
%fun是在M文件中定义的函数
%beta0是函数中参数的初始值
%beta为参数的最优值
%r是各点处的拟合残差
%J为雅克比矩阵的数值

初始参数beta0可以用以下方法求得:

首先观察有几个待定系数,有几个待定系数就将几组实验数据代入方程中,由此可得参数的初始值。

例题3

给定以下数据,利用非线性的方法求出函数f(x)的参数。

f(x)=b_1(1-b_2e^{-b_3x})

x04793140186279372465558651
y18.9827.3534.8638.5238.4437.7338.4343.8742.7746.22

解:

MATLAB代码如下:

clc;clear;

x=[0 47 93 140 186 279 372 465 558 651];
y=[18.98 27.35 34.86 38.52 38.44 37.73 38.43 43.87 42.77 46.22];
b0=[43 0.6 0.1]; %初始参数值
fun=inline('b(1)*(1-b(2)*exp(-b(3)*X))','b','X');
[b,r,j]=nlinfit(x,y,fun,b0); %b为最佳参数
b
R=sum(r.^2)  %误差平方和
y1=fun(b,x);
plot(x,y,'*',x,y1,'-or')

运行结果:


b =42.664037023023802   0.548346447450711   0.009880232273427


R =46.197464448828995

二. curve fitting tool工具

以下将通过一个例子,来理解MATLAB中curve fitting tool工具。

首先在新建的脚本文件编辑框中键入以下代码:

clc;clear;

%产生数据
x=-20:2:20;
y=-20:2:20;
[X,Y]=meshgrid(x,y);
Z=3*X.^3-4*X+2*Y.^4+3*Y^3;
meshgrid(X,Y,Z);

第一步

在APP选项框中打开curve fitting 工具,选择数据源X/Y/Z data

第二步

选择合适的拟合方法。本例子待拟合的曲面为多项式,所以可以直接选择。其他可选择的拟合类型,如下:

  • Custom Equation:用户自定义的函数类型
  • Interpolant:插值逼近,有四种类型,linear、nearest、neighbor、cubic spline、shape-preserving
  • Lowess:平滑逼近,局部加权回归
  • Polynomial:多项式逼近,有9种类型,linear,quadratic,cubic,4-9th degree

第三步

选择合适的多项式次数与系数

第四步

拟合后的结果信息在Fitting对话框中的Results文本框中,此处有此次拟合的主要统计信息,包含:

  • 误差平方和 SSE:该参数计算拟合参数后的回归值与原始数据对应点的误差平方和,类比方差
  • 确定系数 R-square
  • 调整后的确实系数  Adjusted R-square
  • RMSE:该参数是预测数据和原始数据对应点误差的平方和的均值的平方根,即均方误差,类比标准差

另外附加两个功能:

生成代码:文件>>Generate Code>>自动生成一个creatFit.m文件;

生成图片:文件>>Print to figure

MATLAB拟合工具箱函数的使用 MATLAB拟合曲线的方法有很多,针对不同的函数类型应选用合适的拟合方法。 按照拟合方法来进行划分,一般可将待拟合的函数分为曲线/曲面拟合与多元函数拟合。 曲线/曲面拟合 曲线曲面拟合多是基于cftool拟合工具箱使用,使用非常方便,但只能对拟合一元、二元函数(当然,可以通过适当的变换对函数进行处理,使其能够在cftool中进行处理)。cftool工具一方面可以在MATLAB的APP中使用,同样也... 阅读详情

相关推荐

【数学建模】——拟合算法

拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。函数名复制完后我们在应用和的时候只需要在定义一个变量用来存放我们在生成此图像时用到的函数(如何时系统的拟合函数在拟合工具箱会显示),在一些拟合函数中的参数也要定义上。注意事项:在我们输入自定义函数后如果线段不符合点我们可以在你和选项中函数方程下面->高级选项,修改系数的值(本题的系数时r和xm我们已将xm改为100后符合线段数据)如下图我们输入的时自定义函数,它会自动帮我们求出参数的值。

weixin_73612682的博客 6903

MATLAB最小二乘拟合

最小二乘拟合线性最小二乘拟合非线性最小二乘法 线性最小二乘拟合 1、polyfit 例:a= polyfit(x0,y0,m) 其中,输入参数x0,y0为要拟合的数据,m为拟合多项式的次数(一般不超过3次),输出参数a为拟合多项式的次数(从0次开始) %例: clc;clear x=[19,25,31,38,44]; y=[19.0,32.3,49.0,73.3,97.8]; ab=polyfit(x,y,2) x0=19:0.1:44; y0=ab(3)+ab(2)*x0+ab(1)*x0.^2; plo

freshman_kx的博客 2万+

拟合算法之最小二乘法

拟合算法 与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是追求一个函数(曲线),使得该曲线在某种准测下与所有的数据点最为接近,即曲线拟合最好(最小化损失函数)。

sup1feng的博客 1万+

MATLAB之最小二乘法

一、算法原理 给定一些列点x1,x2,.....xn,对应的函数值为y1,y2,......yn。若拟合曲线为y=ax+b,根据条件可写出线形方程组为: [x1 1;x2 1;...;x3;1]*[a;b]=[y1;...;yn]即A*[a;b]=[y2;...;yn] 因为A不是方阵,无法求逆。故做如下变形: 方法一: 方法二: 对矩阵A做QR分解 二、matl...

STM89C56的博客 4万+

最小二乘法圆拟合(附完整代码)

一种简洁、高效的2D/3D圆弧拟合方法,圆弧拟合可以选择是否精确经过起点和终点。附完整代码,方便学习。

Marc Pony 1万+

最小二乘法球面拟合(附完整代码)

一种简洁、高效的球面拟合方法,附完整代码,方便学习

Marc Pony 7675

最小二乘法拟合曲线原理及其Matlab实现

利用8个数据点{(1,6),(2,4),(3,3),(4,4),(5,6),(6,9),(7,12),(8,14)}利用最小二乘法进行曲线拟合,并对x=9时的y值进行预测。最小二乘法通过求解一组已知离散点集(xi,yi),找到一条y=f(x)的曲线方程,使得点集中每个点到曲线的距离的平方和最小。对a,b,c求导,并令导数等于0,Solve出a,b,c的参数,即可得到最小二乘法求解的曲线方程。plot(x,y,'o',x1,y1) % 画观测数据点及拟合曲线。

weixin_59592549的博客 5418

Matlab:使用最小二乘法进行曲线拟合

在实际工程应用中,我们常会遇到需要将一些离散点数据进行拟合的情况。此时,最小二乘法是一个可行的方案。因为它能够通过数学方法找到一个函数,在拟合出来的函数与实际数据之间达成最短距离。这个函数可以通过最小化某个函数值来找到最优的参数向量。在这个程序中,我们使用了默认的算法(Levenberg-Marquardt 算法)来求解。接下来,我们构建一个目标函数,这个目标函数就是最小化误差的函数。至此,我们就成功地实现了曲线拟合,并得到了最优的参数向量。这个函数中,我们使用了 5 个参数。是我们需要拟合的数据,而。

2301_79331421的博客 1425

最小二乘法与matlab拟合工具箱cftool

一)关于最小二乘法 百度百科解释: 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。 用于数据拟合,直观的认识如下图所示:实际中你的数据可能是绿线所表示的那样(当然多数时候是离散的点),很明显,这样的数据没有规律也不光

我爱智能 4万+

MATLAB中拟合线性方程(最小二乘法)

上一篇说了,最小二乘法的一些概念(最小二乘法在编程中的实现),今天写一下matlab中拟合最小二乘法的代码。

ifeng12358的博客 7177

最小二乘法曲线拟合及其MATLAB代码(使用和不使用曲线拟合工具箱)

设由实验测得的数据如下,对它们进行最小二乘拟合。 本文基于一道实际的题目,讲解了最小二乘法拟合曲线的原理,包括矛盾方程的解,MATLAB曲线拟合工具箱等内容的讲解。并提供了MATLAB代码。

Zircon_Xray的博客 1万+

MATLAB与最小二乘法拟合数据

1、前言:学习并记录的原因 最小二乘法是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。 最小平方差法在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具——【From百度百科】。 2、MATLAB基于最小二乘法原理的函数拟合 (1)常见的数据拟合有直线拟合、多项式拟合、插值拟合等首先利用MATLAB中的函数来直观体验下一次拟合。 参考:http://www.qinms.com/work/nihe.html(拟合方法) h...

weixin_39090239的博客 2万+

MATLAB曲线拟合工具箱:使用指南与实战应用

在数据分析和科学计算的领域,曲线拟合是一种重要的技术手段,用于在给定的数据点之间找到一条最合适的曲线,能够反映出数据的潜在趋势和模式。MATLAB曲线拟合工具箱为用户提供了丰富的函数和图形界面,方便用户进行各类数据的曲线拟合和分析工作。本章节将为读者提供一个对MATLAB曲线拟合工具箱的概览,包括其基本功能、使用场景以及如何开始一个曲线拟合项目的基础知识。我们将从曲线拟合的基本概念和重要性开始,逐步深入到工具箱的具体应用,为后续章节中对线性、多项式和非线性拟合方法的详细讨论奠定基础。

weixin_28235889的博客 1187

最小二乘法函数拟合原理及matlab实现—数学笔记

最小二乘法函数拟合原理及matlab实现 ——数学笔记 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录最小二乘法函数拟合原理及matlab实现前言一、拟合标准1.使偏差向量满足111-范数2.使偏差向量满足∞\infty∞-范数3.使偏差向量满足222-范数二、最小二乘法原理1.最小二乘法 拟合 多项式(常用)2.最小二乘法的一般形式三、最小二乘法应用(matlab)1. 自行编写代码实现2. 利用Curving Fitting Tools工具箱2.1 命令行输入cftool

DJZYCDJ的博客 5万+

MATLAB曲面拟合实战教程与源码

本文还有配套的精品资源,点击获取 简介:MATLAB中的曲面拟合是数据分析、科学计算和工程建模中的关键任务。通过使用最小二乘法,我们可以找到最佳的数学函数来拟合给定的数据点集,使得误差之和最小。MATLAB提供了多种内置函数如 fit 和 lsqcurvefit 来执行这类拟合。二次曲面模型是常用的模型之一,其中的系数可以通过最小二乘法确定。本教...

weixin_29997223的博客 2635

PCB设计必看:铜皮厚度与载流量的黄金比例(附实用对照表)

本文深入探讨了PCB设计中铜皮厚度与载流量的关键关系,提供了实用的对照表和设计技巧。通过分析基础原理、标准选择策略及常见误区,帮助工程师优化PCB设计,确保电路板的可靠性和安全性。特别适用于需要处理大电流或高频应用的电子设计场景。

milk8的博客 510

MATLAB拟合算法

与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。 插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线) 先给出一组例子:

m0_58267655的博客 1万+

eCognition易康操作教程(二):多尺度分割基于多光谱数据构建规则集,结合DSM高程数据提取建筑物、树木和绿地

一、数据 数据来源:教程中的实验数据,共包含RGB三个波段,还有数字地表模型(以下简称DSM)文件。 图一 RGB影像 数据特征:数据范围较小,要素种类少,仅包含较多的建筑和大片的绿地。由于建筑的房顶使用的材料和材料颜色不同,所以建筑的光谱特征没有规律,是不连续的特征。而绿地的光谱特征则十分容易分辨。 但是建筑通常具有规则的形状,而且建筑相比于周围其他要素...

蒹葭苍苍 8302

拟合算法 (matlab工具箱)

尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到-个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。下表给出了近2个世纪的美国人口统计数据(单位:百万人),请使用最下面给定的拟合函数预测后30年的美国人口。这里的R^&2只能拟合线性函数(这里的线性指的是a和b是线性,而不是x),否则建议给SSE。%产生一个均值为0,标准差(方差开根号)为2的正态分布的随机矩阵,大小为3x4;这里的xm和r是两个拟合的参数,t表示年份,x(t)表示第t年的人口。

2401_84910613的博客 1900

飞牛fnNAS存储模式RAID 5数据恢复

中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇RAID 5的。但我认为,一般人出现1块硬盘损坏后,就能够赶紧采取处理措施了,再高的容灾等级也无法满足这个用户的需求了。》就完成了飞牛NAS存储空间的说明,包括了如何创建、怎么选择空间模式、RAID 5 硬盘故障后的更换、系统更换/重装后数据盘的恢复等等。在VMware中新建虚拟机,安装好fnNAS后,再向虚拟机添加“已有硬盘”(这就是所谓崩溃虚拟机的数据盘),此时新的fnNAS出现提示。在“选择要添加的硬盘”中,选择刚添加硬盘。

dgnankai的专栏 3008

杰理SDK入门教程(一):SDK的四种编译方式的使用

杰理SDK提供了四种主要编译方式:1) JL Studio官方IDE,适合初学者;2) VS Code轻量级编辑器,需在SDK根目录打开;3) 命令行/脚本编译,灵活支持自动化;4) Code::Blocks开源IDE。每种方式都有详细操作指南,开发者可根据需求选择,初学者推荐从JL Studio开始熟悉编译流程。环境配置注意事项和编译成功标识均有明确说明,确保开发效率。

qq_42014563的博客 1145

matlab最小二乘法拟合直线

最小二乘法直线拟合

mym499872723的博客 1万+

[QMT和ptrade量化交易小白入门]-125、菜场大妈加上四大现金行业指数风控,最大回撤从22%减少了一半

群里面有人建议,在菜场大妈策略的基础上,加入申万的行业指数(银行,钢铁,有色,煤炭)测算其宽度,当这四大行业其中有一个高就会清仓(用来控制回撤)。这背后的逻辑是,在存量资金博弈的市场环境中,资金总量相对固定,当银行、钢铁、有色、煤炭等大市值周期行业因基本面改善(如涨价、政策催化)或避险需求而走强时,会吸引大量资金涌入,导致其他板块(尤其是小市值股票)面临流动性虹吸。经过回测,对比上一个版本发现确实是可以降低一半的回撤,最大回撤从22.3%降到了11.4%,而且有很多时间是空仓等待。

木头大左的博客 237
上一篇: 格密码写论文综述可选主题(附分析)
下一篇: 列举详细的数学相关软件:MATLAB为何可以这么强
唠嗑!
唠嗑! 优质创作者: 信息安全技术领域 优质创作者: 信息安全技术领域
博客等级 码龄5年 3万+粉丝 169原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值