Matlab-函数拟合

article/2025/9/21 5:03:20

文章目录

  • 0. 评价指标
  • 1. 工具箱拟合——cftool
  • 2. 万能拟合 ——nlinfit
  • 3. 多项式拟合 ——polyfit
  • 参考

0. 评价指标

一、SSE(和方差)
该统计参数计算的是拟合数据和原始数据对应点的误差的平方和,计算公式如下

在这里插入图片描述
SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。接下来的MSE和RMSE因为和SSE是同出一宗,所以效果一样

二、MSE(均方差)
该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n,和SSE没有太大的区别,计算公式如下
在这里插入图片描述

三、RMSE(均方根)
该统计参数,也叫回归系统的拟合标准差,是MSE的平方根,就算公式如下
在这里插入图片描述

在这之前,我们所有的误差参数都是基于预测值(y_hat)和原始值(y)之间的误差(即点对点)。从下面开始是所有的误差都是相对原始数据平均值(y_ba)而展开的(即点对全)!!!

四、R-square(确定系数)
在讲确定系数之前,我们需要介绍另外两个参数SSR和SST,因为确定系数就是由它们两个决定的
(1)SSR:Sum
of squares of the regression,即预测数据与原始数据均值之差的平方和,公式如下

(2)SST:Total sum of squares,即原始数据和均值之差的平方和,公式如下
在这里插入图片描述
细心的网友会发现,SST=SSE+SSR,呵呵只是一个有趣的问题。而我们的“确定系数”是定义为SSR和SST的比值,故

其实“确定系数”是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道“确定系数”的正常取值范围为[0
1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。

1. 工具箱拟合——cftool

在这里插入图片描述
在命令行输入数据:
x
y

启动曲线拟合工具箱
命令:cftool

进入曲线拟合工具箱界面“Curve Fitting tool”
1)利用X data和Y data的下拉菜单读入数据x,y
2)选择曲线拟合类型
3)自动拟合 即可在结果窗口和曲线窗口显示出拟合结果

工具箱提供的拟合类型如下,进行简要说明,可以尝试各种不同类型拟合效果

英文名称逼近类型种类数量基础类型
Custom Equations用户自定义的函数类型
Exponential指数逼近2
Fourier傅立叶逼近7
Gaussian高斯逼近8
Interpolant插值逼近4linear、nearest neighbor、cubic spline、shape-preserving
Polynomial多形式逼近9linear ~、quadratic ~、cubic ~、4-9th degree ~
Power幂逼近2ax^b 、ax^b + c
Rational有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
Smoothing Spline平滑逼近
Sum of Sin Functions正弦曲线逼近8a1sin(b1x + c1)
Weibull1abx(b-1)*exp(-a*xb)

注意 : Interpolant是插值逼近仅仅是对函数进行插值画图显示,并不能得到拟合的函数。

Exponential:指数逼近,有2种类型, aexp(bx) 、 aexp(bx) + cexp(dx)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1cos(xw) + b1sin(xw)
Gaussian:高斯逼近,有8种类型,基础型是 a1exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,ax^b 、ax^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1sin(b1x + c1)
Weibull:只有一种,a
b*x(b-1)*exp(-a*xb)
选择View > Residuals Plot,可以查看残差图。

在Table of Fits中右击选择Duplicate “XX” (或者在Fit主菜单里面复制) 复制某个拟合,重新生成别的拟合,进行对比。

观察Results以及residuals plot 残差图。
The residuals from a good fit should look random with no apparent pattern. A pattern, such as a tendency for consecutive residuals to have the same sign, can be an indication that a better model exists.

2. 万能拟合 ——nlinfit

matlab 万能实用的非线性曲线拟合方法 - It’s All Uphill From Here
matlab函数拟合 - 学习时间轴 - 博客园

clear
clc   %清除工作空间
syms x;%公共参数设置
xx=[3,5]';   %这里设置已知自变量向量(列向量)
yy = [0.8,1]';  %对应因变量(列向量)
startPos = [1,1];   %设置系数的起始搜索点
%使用fit函数拟合的
%设置参数
f = '(1+alpha*(x-belta)^(-2))^(-1)';  %设置需要拟合的函数形式
funType=fittype(f,'independent','x',...
'coefficients',{'alpha','belta'});  %在independent后面设置自变量,在coefficients后面设置待定系数(多个值用{}括起来)
%使用nlinfit函数进行拟合的
%设置参数
f1 = @(coef,x)(1+coef(1)*(x-coef(2)).^(-2)).^(-1);  %设置需要拟合的函数(内联函数形式)%后面的代码不用改
%fit拟合相关代码
opt=fitoptions(funType);
set(opt,'StartPoint',startPos);
cfun=fit(xx,yy,funType,opt)   %命令行显示结果
plot(cfun,'r',xx,yy,'*')%nlinfit拟合相关代码
coef=nlinfit(xx,yy,f1,startPos);
disp('nlinfit拟合后的系数矩阵为:');
disp(coef);hold on
xmax = max(xx);
xmin = min(xx);
xnum = 2*length(xx)+50;
x = linspace(xmin,xmax,xnum);
y = f1(coef,x);
plot(x,y,'g');legend('原始数据','fit拟合','nlinfit拟合')

3. 多项式拟合 ——polyfit

p=polyfit(x,y,2);

如何使用MATLAB进行曲线拟合-百度经验

Library Model NameDescription
poly1线性多项式曲线
poly11线性多项式表面
poly2二次多项式曲线
linearinterp分段线性插值
cubicinterp分段三次插值
smoothingspline平滑样条(曲线)
lowess局部线性回归(曲面)

参考

matlab 万能实用的非线性曲线拟合方法 - It’s All Uphill From Here


http://chatgpt.dhexx.cn/article/TZgSUgkd.shtml

相关文章

MATLAB函数拟合使用

1 函数命令拟合 最常用的函数拟合命令为fit,语法为| [拟合结果 拟合精度]=fit(X数据,Y数据,‘拟合类型’) 其中,具体的拟合类型可以参看帮助文档,也可以使用fittype来自定义新的函数…

MATLAB函数拟合指令,MATLAB拟合函数使用说明

(由于不方便上传公式,有部分直接截图) 2. Polyval函数 对应多项式拟合,多项式求值函数也相当重要,可以通过设定向量,快速定义如下多项式 据此,可以大概猜测到polyval调用的形式了 y = polyval(p,x) 如上所述 [y,delta] = polyval(p,x,S) S即为polyfit函数返回的误差估计,…

基于MATLAB的函数拟合

资源下载地址:https://download.csdn.net/download/sheziqiong/86763950 资源下载地址:https://download.csdn.net/download/sheziqiong/86763950 函数拟合 整体思路 将给定的坐标点分为 6 段部分,即左、左下、下、右、右上、上&#xff0…

【Matlab基础】数据拟合

目录 一、线性拟合 1. 常用辅助函数 2. 多元线性拟合 例子: 二、多项式拟合 三、lsqcurvefit函数 例子1: 例子2: 四、nlinfit非线性拟合 例子1: 例子2: 五、其他拟合函数 lsqnonlin fittype 一、线性拟合…

matlab 简单函数拟合(全)

学习笔记 对数据进行函数拟合有四种方式具体见连接 方法一:多项式拟合polyfit 方法二:工具箱拟合cftool 方法三:指定函数拟合 连接:matlab拟合函数的三种方法_Bily_on的博客-CSDN博客_matlab数据拟合 方法四是而利用regress函…

matlab拟合函数的三种方法

文章目录 方法一:多项式拟合polyfit方法二:工具箱拟合cftool方法三:指定函数拟合 方法一:多项式拟合polyfit x[1 2 3 4 5 6 7 8 9];y[9 7 6 3 -1 2 5 7 20]; P polyfit(x, y, 3) %三阶多项式拟合xi0:.2:10; yi polyval(P, xi)…

获取当前时间戳

获取当前时间戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 获取当前时间 SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String date df.…

C# 获取当前时间戳(正确版)

https://www.cnblogs.com/yinmu/p/11228196.html 第一种&#xff1a; /// <summary>/// 获取时间戳/// </summary>/// <returns></returns>public string GetTimeStamp(){TimeSpan ts DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);return Co…

SQLserver 获取当前时间戳

SQLserver 获取当前时间戳&#xff1a; SELECT DATEDIFF(S,1970-01-01 00:00:00, GETUTCDATE()) SELECT DATEDIFF(S,‘1970-01-01 00:00:00’,GETDATE()) select SYSDATETIME() select GETDATE() select GETUTCDATE() 1.GETUTCDATE是获取格林尼治时间函数 2.GETDATE是获取北…

小程序获取当前时间戳

使用Date.parse(new Date())默认生成的时间戳是以毫秒为单位的。 可以根据业务需求&#xff0c;通过除以1000&#xff0c;来转化为秒。因为生成的时间戳末尾是000&#xff0c;所以不用担心不是整除。 控制台打印 可在js中引用以下代码 var timeStamp Date.parse(new Date()…

LocalDateTime获取当前时间戳

以上都是获取当前时间的时间戳。而要想使用localdateTime获取当前时间&#xff0c;只需要LocalDateTime.now()即可。 输出结果如下&#xff1a;

python获取当前时间戳_python 获取当前时间戳

原博文 2019-01-04 10:42 − #!/usr/bin/python # -*- coding: UTF-8 -*- import time; # 引入time模块 ticks = time.time() print("当前时间戳为:", ticks) 输出: 当前时间戳为: 1459994552.51 &nbsp... 相关推荐 2019-12-06 10:29 − 1.获取当前时间的时…

JS获取当前时间戳与时间戳转日期时间格式

一、获取当前时间的时间戳(三种方式) const t1 new Date().valueOf() // 第一种&#xff0c;推荐 const t2 new Date().getTime() // 第二种&#xff0c;推荐 const t3 Date.parse(new Date()) // 第三种&#xff0c;不推荐&#xff0c;精度差一些注&#xff1a; new Date(…

前端获取当前时间戳的3+2+1种方法

首先说下&#xff0c;三种比较常见的方法 1.Date.parse(new Date()) Date.parse(new Date()) 1656038612000 2.new Date().getTime() new Date().getTime() 1656038636915 3.new Date().valueOf() new Date().valueOf() 1656038660413 两种不常见的方法 1.Date.now() //i…

js获取当前时间、获取当前时间戳、时间与时间戳互转。

1、 JavaScript 获取当前时间戳&#xff1a; 第一种&#xff1a; var timestamp Date.parse(new Date()); console.log(timestamp); // 1622427159000第二种&#xff1a; var timestamp (new Date()).valueOf(); console.log(timestamp); // 1622427218359第三种&#xff1…

Python中tqdm模块的用法

参考 python的Tqdm模块 - 云社区 - 腾讯云 一、简介 tqdm是Python中专门用于进度条美化的模块&#xff0c;通过在非while的循环体内嵌入tqdm&#xff0c;可以得到一个能更好展现程序运行过程的提示进度条&#xff0c;本文就将针对tqdm的基本用法进行介绍。 二、基本用法 tqd…

tqdm简介及使用方法

tqdm源自阿拉伯语 taqaddum (تقدّم) &#xff0c;意思是进程( “progress”)&#xff0c;也是西班牙语中 “I love you so much” (te quiero demasiado)的缩写&#xff0c;听着就浪漫&#xff5e;。 该模块的作用就是使循环(loop)过程展示一个进度条&#xff0c;能够通过…

python中tqdm用法

tqdm安装命令&#xff1a; pip install tqdm 1.用tqdm子模块 &#xff08;1&#xff09;例子1 from tqdm import tqdm import timefor i in tqdm(range(50)):time.sleep(0.1)pass 结果如下&#xff1a; &#xff08;2&#xff09;例子2&#xff1a;带参数 from tqdm impo…

python进度条 tqdm使用教程

文章目录 安装tqdm在循环中显示进度条1. 使用tqdm.tqdm()实现进度条2. tqdm()主要参数默认值与解释3. tqdm()的返回值4. tqdm.trange()5. 循环过程中输出额外内容6. 无法获取迭代器长度的坑 *其他方法实现进度条 安装tqdm tqdm是一个显示进度条的python工具包。安装命令如下 …

DMQ简介

DMQ简y介 DMQ简介 - Water2Wine - 博客园 原文 1. DMQ简介 Distributed Message Queue&#xff08;分布式消息队列&#xff09;&#xff0c;DMQ 是在kafka之上做了一层封装&#xff0c;为AC的其他组件提供分布式消息队列服务。简单来说&#xff0c;DMQ就是一个消息中间件&a…