MATLAB的曲线拟合

2023-11-09

原文地址:MATLAB的曲线拟合 作者:睿吉jerry

MATLAB软件提供了基本的曲线拟合函数的命令。

曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。

 

1.线性拟合函数:regress()

调用格式:  b = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X,alpha)

说明:b=[ε; β],regress(y,X)返回X与y的最小二乘拟合的参数值β、ε,y=ε+βXβ是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。

      bint返回β的95%的置信区间。

      r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。

例:

      x=[ones(10,1) (1:10)'];

      y=x*[10;1]+normrnd(0,0.1,10,1);

      [b,bint]=regress(y,x,0.05)

 

      结果得回归方程为:y=9.9213+1.0143x

 

2.多项式曲线拟合函数:polyfit()

调用格式: p = polyfit(x,y,n)

          [p,s] = polyfit(x,y,n)

说明:n:多项式的最高阶数;

  xy:将要拟合的数据,用数组的方式输入;

  p:输出参数,即拟合多项式的系数;

多项式在x处的值y可用下面程序计算:

                                y=polyval(p,x)

例:

       x=1:20;

       y=x+3*sin(x);

       p=polyfit(x,y,6)

       xi=linspace(1,20,100);

       z=polyval(p,xi);        % 多项式求值函数

       plot(x,y,'o',xi,z,'k:',x,y,'b')

       legend('原始数据','6阶曲线')

 

3.一般的曲线拟合curvefit()

调用格式: p=curvefit(‘Fun’,p0,x,y)

说明:Fun: 表示函数Fun(p,data)M函数文件;

  xy:将要拟合的数据,用数组的方式输入;

  p0:  表示函数待拟合参数的初值;

 

4.自定义函数拟合nlinfit()

调用格式:[beta,r,J]=nlinfit(x,y,’fun’,beta0)

说明:    beta:返回函数'fun'中的待定常数;

           r:    表示残差;

           J:    表示雅可比矩阵。

           x,y:  要拟合的数据;

           fun: 自定义函数;

           beta0: 待定常数初值;

化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有非线性模型:

     现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。

                                                                      y

                0.49               16           0.43               28           0.41

                0.49               18           0.46               28           0.40

     10           0.48               18           0.45               30           0.40

     10           0.47               20           0.42               30           0.40

     10           0.48               20           0.42               30           0.38

     10           0.47               20           0.43               32           0.41

     12           0.46               20           0.41               32           0.40

     12           0.46               22           0.41               34           0.40

     12           0.45               22           0.40               36           0.41

     12           0.43               24           0.42               36           0.36

     14           0.45               24           0.40               38           0.40

     14           0.43               24           0.40               38           0.40

     14           0.43               26           0.41               40           0.36

     16           0.44               26           0.40               42           0.39

     16           0.43               26           0.41

首先,定义非线性函数的m文件:fff6.m

     function  yy=model(beta0,x)

     a=beta0(1);

     b=beta0(2);

     yy=a+(0.49-a)*exp(-b*(x-8));

拟合程序:

     x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00... 

        16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00...  

        24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00...

        34.00 36.00 36.00 38.00 38.00 40.00 42.00]';

     y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43...

        0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41...

        0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39]';

     beta0=[0.30 0.02];

     betafit = nlinfit(x,y,'sta67_1m',beta0)

结果:betafit =

                0.3896   0.1011

       即:a=0.3896 ,b=0.1011 拟合函数为:

 

4.多元非线性拟合

(1).nlinfit()

调用格式:[beta,r,J]=nlinfit(X,Y,'fun',beta0)

说明:    beta:返回函数'fun'中的待定常数;

           r:    表示残差;

           J:    表示雅可比矩阵。

           X,Y:  要拟合的多元数据矩阵;

           fun: 自定义函数;

           beta0: 待定常数初值;

例:  

      x1 = [1150,1000,900,850,700,625,550,475,3350,3500,5900,

            5800,5700,4600,4625,4725,11650,11200,11200 ]';
      x2 = [175,100,25,0,75,100,150,200,50,600,500,

            225,100,1225,1600,2000,1200,1000,1550 ]';
      = [x1,x2];
      = [1.44E-02,1.80E-02,6.08E-02,5.59E-02,3.42E-02,7.74E-03,1.17E-03,

            6.16E-03,1.91E-04,1.91E-04,1.02E-03,2.83E-03,9.52E-05,3.77E-04,

            2.70E-04,1.87E-04,3.98E-04,4.04E-04,4.02E-04 ]';
      beta0 = [0.1 0.1 1 1];
     
myfun = @(a,x)4030.0./pi./4.2./(a(1).*x(:,1).^a(2).*a(3).*x(:,1).^a(4))
.*exp(-(x(:,2).^2./2./(a(1).*x(:,1).^a(2)).^2+30.0.^2./2./(a(3).*x(:,1).^a(4)).^2));
      [a,b,c,d,res] = nlinfit(x,y,myfun,beta0);

      a,res
      plot3(x1,x2,y,'o',x1,x2,myfun(a,x))

  % 值的选取没有定法,与实际问题的模型有关。

 

(2).regress()

线性的不行,用二次函数。
      format long
      A=[...
      0.2 13.6 8503 251 27.4 
      7.7 9.9 3658 314 13.9 
      5.8 10.8 7307 433 26.8 
      7.70 9.70 6717 257 23.8 
      7.5 9.8 7609 280 21.7 
      5.6 11.3 4271 533 14.6 
      6.2 7.6 52169 48 225 
      3.23 9.16 16516 80 44.1 
      0.33 11.3 17366 85 54.1 
      0.14 9.5 14245 91 56.6 
      5.5 9.7 18184 31.6 
      2.3 8.9 33612 250 114.9 
      3.3 4.6 73927 166 
      1.9 9.7 32175 150 107.5 
      0.6 9.9 33088 242 142.3 
      0.22 11.7 18620 567 60.4 
      1.88 11.76 27885 267 71.6 
      2.78 10.9 21780 76 58.7]
      x=A(:,1:4),Y=A(:,5)
      x11=x(:,1).*x(:,1);
      x12=x(:,1).*x(:,2);
      x13=x(:,1).*x(:,3);
      x14=x(:,1).*x(:,4);
      x22=x(:,2).*x(:,2);
      x23=x(:,2).*x(:,3);
      x24=x(:,2).*x(:,4);
      x33=x(:,3).*x(:,3);
      x34=x(:,3).*x(:,4);
      x44=x(:,4).*x(:,4);
      X=[x(:,:),x11,x12,x13,x14,x22,x23,x24,x33,x34,x44]
      [B,BINT,R] REGRESS(Y,[ones(length(Y),1),X]) 
B就是系数,R就是预测值与实际值的差值。

 

(3).lsqcurvefit()

clear
    clc
    x = [40    50    60    70    80    90   100   110   120   135   150];
    y = [0.0096    0.0145    0.0194    0.0348    0.0501    0.0751

     0.1000    0.1497    0.1993    0.2496    0.2999];
    z = [0.2400    0.2865    0.3330    0.3600    0.3870    0.4010

     0.4150    0.4390    0.4630    0.4875    0.5120];
    X0 = [1 1 1 1 1 1];
    % 只要这样写就可以了
   
f=@(p,x)( p(1) + p(2)*x(1,:) + p(3)*x(2,:) + p(4)*x(1,:)

   .^2 + p(5)*x(1,:).*x(2,:) + p(6)*x(2,:).^2);
    p=lsqcurvefit(f,X0,[x;y],z);

 

5.稳健回归函数:robust()

稳健回归是指此回归方法相对于其他回归方法而言,受异常值的影响较小。

调用格式:  b = robustfit(x,y)

           [b,stats] = robustfit(x,y)

           [b,stats] = robustfit(x,y,’wfun’,tune,’const’)

说明:

        b:系数估计向量;

         stats:各种参数估计;

         wfun:指定一个加权函数;

         tune:为调协常数;

         const:值为’on’(默认值)时添加一个常数项,为’off ’时忽略常数项。

演示一个异常数据点如何影响最小二乘拟合值与稳健拟合。首先利用函数y=10-2x加上一些随机干扰的项生成数据集,然后改变一个y的值形成异常值。调用不同的拟合函数,通过图形观查影响程度。

程序:x=(1:10)’;

y=10-2*x+randn(10,1);

y(10)=0;

bls=regress(y,[ones(10,1) x]);  % 线性拟合

brob=robustfit(x,y);            % 稳健拟合

scatter(x,y;

hold on

plot(x,bls(1)+bls(2)*x,’:’);

plot(x,brob(1)+brob(2)*x,’r‘);

结果 : bls  8.4452    -1.4784

        brob  10.2934   -2.0006

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB的曲线拟合 的相关文章

  • please select a valid python interpreter(请选择一个解释器)

    1 更改Pycharm的设置 打开settings CTRL ALT S 或者file gt settings 2 在查询框中输interpreter 进行查询 3 选择界面右边上的配置按钮 右击选择add local 4 选择system
  • Linux服务器成功安装CUDA11.3和cudnn

    说在前面 NVIDIA的显卡驱动与CUDA的版本并不是严格的一一对应关系 CUDA实际上也只是一个工具包 我们可以根据自己的需求进行安装 即可以安装多个CUDA版本 同时CUDNN是一个SDK 专门用于神经网络的加速包 它与CUDA也没有严
  • 巨细!Python爬虫详解

    Python技术 爬虫 又称为网页蜘蛛 网络机器人 在 FOAF 社区中间 更经常的称为网页追逐者 它是一种按照一定的规则 自动地抓取网络信息的程序或者脚本 如果我们把互联网比作一张大的蜘蛛网 那一台计算机上的数据便是蜘蛛网上的一个猎物 而
  • 第十一章 GetAway服务网关详解

    目录 一 服务网关使用背景 二 服务网关的种类和区别 三 Gateway 简介 优点 缺点 Gateway组成 三 快速入门案例 1 创建网关服务 引入 GetAway 依赖 2 创建主类 3 配置GetAway网关服务 4 创建 订单服务
  • PyCharm安装教程,图文教程(超详细)

    作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 PyCharm 一 PyCharm下载安装 二 Python下载安装 三 创建项目
  • Unity点击物体后,移动到物体所在位置

    Unity点击物体后 移动到物体所在位置 方法一 OnMouse检测 需要Collider组件 脚本挂在被点击的物体上 using System Collections Generic using UnityEngine using Uni
  • 【Python】字典dict 基础用法

    参考资料 Python字典 Dictionary 操作全解 创建 读取 修改 添加 删除 有序字典 浅复制 排序 字典是 键 值 对的无序可变序列 字典中的每个元素可以分为两部分 键 和 值 定义字典时 每个元素的 键 和 值 用冒号分隔
  • 朴素贝叶斯分类器

    贝叶斯分类器 优点 数据较少任然有效 可以处理多类别的问题 缺点 输入数据准备方式比价敏感 数据类型 标称型数据 朴素贝叶斯决策理论 假设有两类数据 A 和 B 假设有两类数据 A和B 假设有两类数据 A和B 平面直角坐标
  • springboot开发环境生产环境配置文件切换

    一 单个文件切换环境里 在application yml配置文件中添加如下信息 server port 8081 spring profiles active prod 激活prod生产环境 server port 8083 spring
  • “物联网+区块链”技术给农业发展带来新机遇

    运用 物联网 区块链 技术 从鸡苗供应 养殖 再到屠宰 流通等环节 每一只肉鸡的信息数据都被如实记录在 身份证 上 且不可篡改 经区块链加密的多宝鱼生长数据 通过 绿色履历 呈现在消费者面前 从土地承包到播种 加工 稻米的相关信息全部在区块
  • 【机器学习实战】5、Logistic 回归

    文章目录 5 1 基于Logistic回归和Sigmoid函数的分类 5 2 基于最优化方法的最佳回归系数确定 5 2 1 梯度上升法 5 3 python实战 5 3 1 查看数据集分布情况 5 3 2 训练 5 3 3 绘制决策边界 5
  • OpenCV相机标定全过程

    一 OpenCV标定的几个常用函数 findChessboardCorners 棋盘格角点检测 bool findChessboardCorners InputArray image Size patternSize OutputArray
  • Go语言在机器学习中有未来吗?

    Go 是一种开源编程语言 最初由 Google 设计 用于优化系统级服务的构建和使用 在大型代码库上轻松工作 以及利用多核联网机器 Go 于 2009 年推出 作为一种静态类型和编译型编程语言 深受 C 语言的影响 注重简单性 安全性和并发
  • ros 源码安装

    版本lunar 系统版本debian 9 8 参考 http wiki ros org lunar Installation Source 1 Installing bootstrap dependencies sudo apt get i
  • Flutter 实现安卓原生系统级悬浮窗

    Flutter实现安卓原生系统级悬浮窗 原创 As Kai 博客地址 https blog csdn net qq 42362997 如果以下内容对您有帮助 点赞点赞点赞 最近碰到了一个需求 使用Flutter实现悬浮窗效果 想来想去只能使
  • 关于 ioctl 的 FIONREAD 参数

    ioctl 是用来设置硬件控制寄存器 或者读取硬件状态寄存器的数值之类的 而read write 是把数据丢入缓冲区 硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区 ioctl keyFd FIONREAD b 得到缓冲区里
  • cmake message显示

    cmake message 在output中显示 PS C mywork mycpp helloworld build gt cmake Configuring done Generating done Build files have b
  • 雅可比算法求矩阵特征值C语言源代码,雅可比(Jacobi)计算特征值和特征向量

    雅可比迭代法法 在图形图像中不少地方用到求矩阵的特征值和特征向量 好比主成分分析 OBB包围盒等 编程时通常都是用数值分析的方法来计算 这里介绍一下雅可比迭代法求解特征值和特征向量 雅可比迭代法的原理 网上资料不少 详细可见参考资料1 这里
  • 【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

    简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下
  • Linux中桥接模式配置IP

    前言 本文主要介绍如何使用桥接模式配置IP 在使用虚拟机进行通信时 经常需要面临三种模式选择 不同模式之间配置不同 系统环境 CentOS 7 两种模式区别 NAT 虚拟机从属于主机 访问外部网络必须通过主机访问 虚拟机的IP只有主机才能识

随机推荐

  • 用DETR进行目标检测的predicat文件

    文章目录 前言 二 使用步骤 1 更改官方detr中308行的类别数 2 根目录加入检测文件 总结 前言 由于最近研究DETR目标检测 但是发现官方给的代码缺少了predict文件 于是自己写了一个 但是写代码的过程中也想到了一些问题 比如
  • QT QPushButton点击事件的实现

    最近需要对按钮实现效果 当鼠标按下时按钮有效果1 然后鼠标松开时按钮有效果2 分析 这里没有现成的信号可以使用 需要重载mousePressEvent 及 mouseReleaseEvent 事件函数 在mouseReleaseEvent
  • 技术笔记

    https docs qq com doc DUVBFRUNvUW1SUXB5
  • js模仿f11全屏_js触发f11全屏

    document on keydown function e var e event window event arguments callee caller arguments 0 if e e keyCode 122 捕捉F11键盘动作
  • 【CSS】css样式控制div水平垂直居中的六种方法

    1 绝对定位方法 不确定当前div的宽度和高度 采用 transform translate 50 50 当前div的父级添加相对定位 position relative 如图所示 代码如下 div background red posit
  • grep、sed、awk、perl等对正则表达式的支持的差别

    以perl的正则为基准 不同的用法以粉红色标出 因为spacemacs支持vim正则表达式操作 而且能够实时显示匹配内容和替换结果 可以作为perl脚本的正则表达式debug手段 转载来自 grep sed awk perl等对正则表达式的
  • Qt:信号和槽总结(1,C++11下的信号和槽 2,第五个参数 3,阻塞 )

    Qt 信号和槽总结 1 C 11下的信号和槽 2 第五个参数 3 阻塞 信号和槽是Qt特有的一种通讯方法 具有以下特点 信号与槽的连接比较灵活 可以一对一 一对多或者是多对一 信号与槽的绑定与解除也十分的灵活 使用connect以及disc
  • CONTAINING_RECORD宏原理与使用详解

    先不急着说CONTAINING RECORD宏 我们从最浅显的代码开始讲解 一 0指针的妙用 0指针 即nullptr NULL 空指针 是不是很常见 一遇到它往往就是segment fault 代码 如下 struct Test int
  • Vue实现Alert插件

    实现alert插件 在Vue中我们可以使用 Vue component tagName options 进行全局注册 也可以是在组件内部使用 components 选项进行局部组件的注册 全局组件是挂载在 Vue options compo
  • python的with关键字

    前言 with表达式其实是try finally的简写形式 但是又不是全相同 格式 格式 with context as var pass 其中的context是一个表达式 返回的是一个对象 var用来保存context表达式返回的对象 可
  • git pull: Please commit your changes or stash them before you merge

    参考 Git冲突 commit your changes or stash them before you can merge 总结 如果git pull 报错 Please commit your changes or stash the
  • Hyperledger Fabric能否大规模运行?

    我很高兴回答这个问题 简短的回答是 是的 确实如此 我的疑问 我对大规模Hyperledger Fabric Fabric 的性能提出了很多疑问 很多时候 人们已经完成了一些 或阅读 听说过 性能测试 比如在他们的笔记本电脑或早期版本的Fa
  • Android 使用 Jenkins 实现自动化打包【流程】&【踩坑】

    引言 每个Android开发应该都有经历过正在码代码的时候突然被打断要求打个啥啥环境啥啥配置的安装包 然后就得暂存代码 切换分支 更改配置 等待build balabala 往大了说就是浪费时间消耗员工价值对公司的不负责 胡扯 往小了说就是
  • 在复苏与重塑之路上,同程旅行为旅游业价值回归交出答卷

    若论对疫情感受最深刻的行业 旅游业必然榜上有名 也许这个产业链上的每个玩家在这两年都思考过这样两个问题 客观上 旅游业恢复的基础条件有哪些 主观上 又该用什么措施 什么方法应对现在的局面 尽管疫情影响仍未消散 但11月以来 从防疫新提法到文
  • PostgreSQL pg中的截取补齐lpad函数怎么用?

    PostgreSQL pg中的截取补齐lpad函数怎么用 1 左边填充 右边截取 PostgreSQL中的lpad 函数有两个功能 如果长度不够指定的长度 就在左边填充字符串 如果长度超出了指定的长度 就把右边截掉 The PostgreS
  • 使用matplotlib绘制饼图

    根据消费类别 如外卖 零食 衣服 娱乐等 使用matplotlib绘制本月的消费支出饼图 以代码插入方式提交源代码 并以图像文件提交运行截图 python代码 import matplotlib pyplot as plt from pyl
  • 60分钟学pytorch

    本文会持续更新 直至完成pytorch中的60分入门文档部分 目前为tensor的基础操作部分 本文代码github https github com amazingzby pytorch tutorial pytorch官方文档给初学者提
  • ui(new Ui::MainWindow)

    用最新的QtCreator选择GUI的应用会产生含有如下文件的工程 下面就简单分析下各部分的功能 pro文件是供qmake使用的文件 不是本文的重点 不过其实也很简单的 在此不多赘述 所以呢 还是从main开始 include
  • Java基础-学习笔记(一)

    1 IT业务的发展变化 1 大型机 一代 IBM 2 PC Mac 二代 微软 苹果 3 互联网 三代 Google Baidu 4 移动互联网 谷歌 微软 苹果 所谓 移动互联网 移动通信 互联网 马云所属 IT到DT的变化 注 推荐本书
  • MATLAB的曲线拟合

    原文地址 MATLAB的曲线拟合 作者 睿吉jerry MATLAB软件提供了基本的曲线拟合函数的命令 曲线拟合就是计算出两组数据之间的一种函数关系 由此可描绘其变化曲线及估计非采集数据对应的变量信息 1 线性拟合函数 regress 调用