MATLAB拟合算法

这篇具有很好参考价值的文章主要介绍了MATLAB拟合算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线)

先给出一组例子:MATLAB拟合算法

clear;clc;
x = 0.1:0.1:1;
y = [1.978,2.45,3.28,6.16,7.34,7.66,9.58,9.48,9.3,11.2];
plot(x,y,'o')
xlabel('x的值');
ylabel('y的值');

MATLAB拟合算法

设这些样本点为(xi,yi),i=1,2,…,n,我们可以设置拟合曲线为y = k*x+b

利用最小二乘法:MATLAB拟合算法

n = size(x,1);
k = (n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b = (sum(x.*x)*sum(y)-sum(x).*sum(x.*y))/(n*sum(x.*x)-sum(x).*sum(x))
hold on 
grid on 
f=@(x) k*x+b;
fplot(f,[0,1]);
legend('样本数据','拟合函数','location','SouthEast')
hold off 

利用一元线性函数,得到拟合出来的图像 :MATLAB拟合算法

得出结果后,如何知道自己拟合数据图形的好坏呢?

这里需要用到拟合优度R²,与R²有关的三个系数SSR、SSE、SST:MATLAB拟合算法

可以证明:SST = SSE + SSR 

 R² =SSR/SST(R²越接近1,说明误差平方和越接近0,误差越小说明拟合的越好。注意:R2只能用于拟合函数是线性函数时,拟合结果的评价,线性函数和其他函数(例如复杂的指数函数〉比较拟合的好坏,直接看SSE即可,假如R2是个负数,说明拟合效果不好)

(我们这里说的线性函数是指对参数为线性(线性于参数)。)

因此引入一个概念:

1、对变量为线性

对线性的第一种并且也许是更“自然”的一种解释是,¥的条件期望值是X;的线性函数。从几何意义上说,这时回归曲线是一条直线。按照这种解释,诸如 E(Y|X)=β1+β2*X²的回归函数,由于变量X以幂或指数⒉出现,就不是线性的。

2、对参数为线性

对线性的第二种解释是,Y的条件期望E(Y│X)是参数β的一个线性函数;它可以是或不是变量X的线性函数。2对于这种解释,E(Y |X)=β1+β2*X²就是一个线性(于参数〉回归模型。为了看出这-一点,让我们假设X取值为3。因此,E(Y |X=3)=β1+9β2,显然它是β和的线性函数。

计算拟合优度的代码:

y_hat = k *x+b;                     % y的拟合值
SSR = sum ( (y _hat-mean (y) ) .^2) %回归平方和
SSE = sum( (y _hat-y).^2)           %误差平方和
SST = sum ( (y-mean(y) ).^2)        %总体平方和
R_2 = SSR / SST

以上是利用最小二乘法的思想对数据进行拟合,matlab中也有自带的“拟合工具箱”:cftool

进入曲线拟合工具箱界面“Curve Fitting tool”
(1)点击“Data”按钮,弹出“Data”窗口;
(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图;
(3)点击“Fitting”按钮,弹出“Fitting”窗口;
(4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有:

Custom Equations:用户自定义的函数类型
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。
在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。

(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:

general model:
f(x) = a*x*x+b*x
Coefficients (with 95% confidence bounds):
a = 0.009194 (0.009019, 0.00937)
b = 1.78e-011 (fixed at bound)
Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263

同时,也会在工具箱窗口中显示拟合曲线。

这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。
不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好。、

如果在正式数模比赛中,利用拟合工具箱拟合出来的曲线,可以通过以下步骤将拟合出曲线的代码导出:Curve Fitting Tool ->文件 ->Generate Code ->再使用保存快捷键Ctrl+S即可文章来源地址https://www.toymoban.com/news/detail-405538.html

到了这里,关于MATLAB拟合算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全面地介绍 将二维数据矩阵插值拟合为二维曲面方程——基于matlab

    要利用matlab将二维数据矩阵拟合成一个二维曲面方程,首先,我们得明白什么是插值和拟合。下面,从对洋流数据的处理入手,先以一个基本的流程为例,进行问题的概述,然后介绍两种具体的方法。 根据已知的数据点,生成一个连续的函数,可以在任意位置求值。matlab 提

    2024年04月11日
    浏览(41)
  • 【数学建模】《实战数学建模:例题与讲解》第四讲-插值与拟合(含Matlab代码)

    如果这篇文章对你有帮助,欢迎点赞与收藏~ 在实际问题中,对于给定的函数 y = f(x) ,通常通过实验观测在某个区间 [a, b] 上一系列点 x_i 上的函数值 y_i = f(x_i) 得到。当需要在这些观测点 x_0, x_1, ..., x_n 之间的某些点 x 上估计函数值时,插值法和拟合是两种常用的数学方法。

    2024年02月05日
    浏览(52)
  • 数学建模-插值算法(Matlab)

    注意:代码文件仅供参考,一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭 如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231   //清风数学建模 简单来说是根据已知点进行线性数据预测,但数据太少需要通过数学方

    2023年04月26日
    浏览(54)
  • 基于Matlab的插值问题(Lagrange插值法、三次插值多项式)

    要求 1、 利用Lagrange插值公式 L n ( x ) = ∑ k = 0 n ( ∏ i = 0 , i ≠ k n x − x i x k − x i ) y k {L_n}(x) = sumlimits_{k = 0}^n {left( {prodlimits_{i = 0,i ne k}^n {frac{{x - {x_i}}}{{{x_k} - {x_i}}}} } right)} {y_k} L n ​ ( x ) = k = 0 ∑ n ​ ( i = 0 , i  = k ∏ n ​ x k ​ − x i ​ x − x i ​ ​ ) y k ​ 编写出

    2024年02月07日
    浏览(44)
  • MATLAB拟合算法

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。 插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么

    2023年04月09日
    浏览(31)
  • MATLAB--椭圆拟合算法

    This code aims for ellipse fitting but only contains the center’s calculation. 使用: xcell为x坐标数组,ycell为y坐标数组;

    2024年04月17日
    浏览(38)
  • 数学建模 -- 插值与拟合

    灰色预测要等时距 已知函数在某区间内若干点处的值,求函数在该区间内其他点处的值。这种问题适合用插值的方法解决。 拉格朗日插值法:用的不多,在边缘处容易出现Runge现象。 高次插值的Runge现象:当插值多项式的次数超过7时,插值多项式会出现严重的震荡现象。 避

    2024年02月13日
    浏览(38)
  • 数学建模——插值与拟合

    插值与拟合在建模过程中是一种十分重要的方法,由于赛题中给出的数据可能出现缺失,此时就需要用到插值的方式来对数据进行补全,又或者是给出一部分数据,需要你对未来一部分数据进行预测,这个时候就需要用到拟合的相关知识。 在实际中,常常要处理由实验或测量

    2024年02月01日
    浏览(69)
  • 基于MATLAB的最小二乘法拟合与拟合工具箱使用教程(附完整代码与算法)

    给定一组数据满足某一函数模型,其中a为待定系数向量。 那么,最小二乘曲线拟合的目标就是:求出一组待定系数的值,使得以下表达式子最小: 在MATLAB中格式如下: 由以下MATLAB代码生成一组数据: 该组数据满足y(x),求出待定系数,使得目标函数的值为最小。 解: MATL

    2024年01月17日
    浏览(52)
  • 数学建模实验-插值和拟合

    1.  掌握各种数据插值方法的 MATLAB 实现方法; 2.  掌握数据拟合的 MATLAB 实现方法。 1.  已知平面区域 0  ≤  x  ≤  4800  , 0  ≤  y  ≤  5600的高程数据如data5_1.xlsx所示。 试用二维插值求x,y方向间隔都为50m的高程,并画出该区域的等高线图。 表格数据如图: 2. 在一次

    2024年04月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包