Matlab拟合曲线的方式

Matlab拟合曲线的方式有很多种,有三次样条插值、线性插值、多项式拟合等等。多项式拟合由于函数由f(x)=anxn+an−1xn−1+...+a1x+a0f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0f(x)=an​xn+an−1​xn−1+...+a1​x+a0​组成,若采用最小二乘法拟合,对于参数an,an−1,...,a1,a0a_n,a_{n-1},...,a_1,a_0an​,an−1​,...,a1​,a0​来说,方程组fn(x)=0f_n(x)=0fn​(x)=0是一个线性方程组,可以用Matlab求逆矩阵的方法,得到方程的最小二乘解。但如果参数构成的方程组并不是线性方程组,则不可以用矩阵的方法求得。使用样条插值和线性插值固然可以,但是得不到需要的表达式,此时使用非线性拟合方法解决最为合适。
通常,我们在实验前对模型都有一个假设,例如这是一个指数衰减的曲线,或者指数衰减振荡的曲线,或者是一个周期振荡的由若干个频率的三角函数叠加组成的信号。此时我们只需要指定需要估计的参数,代入数据求解即可。以下就是一个点典型的例子。

步骤解读

这个例子的数据是一个对一个惯性系统给定一个阶跃输入,对系统的输出进行采集,并辨别这个系统。
(xdata,ydata)是一个一阶系统阶跃响应的采集数据,ydata是输出值,xdata是时间戳。由于系统是阶跃响应,我们假定系统的传递函数是KTps+1\frac{K}{T_ps+1}Tp​s+1K​,显然需要辨别的两个参数是K和TpT_pTp​。
该系统在阶跃响应输入下的始于表达式为c(t)=K(1−etTP)c(t)=K(1-\rm e^\frac{t}{T_P})c(t)=K(1−eTP​t​),因此需要建立的函数fun如下

fun=@(xdata,ydata)(x(1)*(1-exp(-xdata/x(2))))

是一个指定参数的函数,我们需要求解的参数就是x(1)和x(2),其中x返回值是一个二元参数向量,可直接调用fun函数求得y根据时间戳生成的辨识系统的计算值。并与实验值ydata画在一张图进行比较。

clc
close all
plot(xdata,ydata);xlim([0,1]);hold on;%实际曲线绘图
fun=@(x,xdata)(x(1)*(1-exp(-xdata/x(2))));%估计函数
x0=[1500,0.025];%初始估计值[x(1),x(2)]
x=lsqcurvefit(fun,x0,xdata,ydata);%非线性函数拟合
y=fun(x,xdata);%代入估计的值,并获得函数点
plot(xdata,y);xlim([0,1]);%绘制估计曲线
title(['[K,Tp]=',num2str(x)]);%标注估计的参数

绘制的预估曲线如下:(蓝色的是实验数据,红色的是拟合曲线)

可以发现,如果沿着实验曲线的大致趋势,拟合的指数逼近曲线如红色线所示,可见辨识的参数较为准确。

Matlab对指定参数的曲线进行非线性拟合相关推荐

  1. matlab 线性最小二乘法,matlab_最小二乘法线性和非线性拟合.ppt

    3.血液容积v, t=0注射剂量d, 血药浓度立即为d/v. 2.药物排除速率与血药浓度成正比,比例系数 k(>0) 模型假设 1. 机体看作一个房室,室内血药浓度均匀--一室模型 模型建立 在 ...

  2. matlab 中数据未定义,matlab总是出现参数未定义

    matlab 曲线拟合参数 1.你给的数据有问题,t有11个点,而R只有10个点.暂按照删去t的最后一个点考虑.2.拟合和很多因素有关,比如初值.拟合函数的选择.算法设置等.3.按现有程序拟合的结果: ...

  3. 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool

    在Origin中使用自定义函数进行非线性拟合 http://blog.163.com/wuhen211@126/blog/static/7474635020105233269949/ matlab拟合 ...

  4. matlab 分式拟合,第七讲matlab实现非线性拟合.ppt

    其中 R2越趋近于1表明拟合效果越好. 如果是多项式函数,则称为多项式回归,此时的参数即多项式的系数:如果为指数函数.对数函数.幂函数或三角函数等,则称为非线性拟合.下面的图形给出了常见曲线与方程的对 ...

  5. matlab 变长参数,变长参数函数的概念

    分享一个2015年华为笔试知识点:变长参数函数 变长参数的函数即参数个数可变.参数类型不定 的函数. 设计一个参数个数可变.参数类型不定的函数是可能的,最常见的例子是printf函数.scanf函数和 ...

  6. 翻领成型器轨迹点MATLAB编程,基于MATLAB的翻领成型器领口曲线的展开及可视化

    基于MATLAB的翻领成型器领口曲线的展开及可视化 易启伟基于 M A T L A B的翻领成型器领 口曲线的展开及可视化 基于 M A T L A B的翻领成型器领口曲线的展开及可视化 易启伟 ( ...

  7. Matlab中的参数解析

    本文中,我们讨论如何在Matlab中进行参数解析. 参数解析对于软件开发和程序设计至关重要.在Matlab中,函数参数传递一般采用直接传值方式,最复杂的情况下也就是使用varargin变长数组.那么如 ...

  8. 参数函数 matlab,MATLAB的函数参数

    本节介绍一下 MATLAB 的函数参数.具体的操作步骤如下: 确定函数参数数量 当调用一个函数时,所用的输入变量和输出变量的数量,在函数内是确定的.nargin 函数确定输入变量个数,nargout ...

  9. matlab和creo仿真,一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法与流程

    本发明涉及一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法,属于计算机图形学技术领域. 背景技术: 在工业生产中,经常遇到各种类型的曲线,如轴的截面圆轮廓曲线.螺纹的螺旋线.齿轮轮齿的齿廓曲 ...

最新文章

  1. 预、自训练之争:谷歌说预训练虽火,但在标注数据上自训练更有效
  2. C语言访问MYSQL数据库的完整的代码例子
  3. 等号赋值与memcpy的效率问题
  4. EfficientNetv2测试
  5. 当当架构部张亮:从码农到大牛,技术与心境的双重提升
  6. 哪吒之魔童降世 - 逆天改命,若命运不公,就和它斗到底!
  7. qt tounicode 崩溃_吐槽大会丨细数那些打块的崩溃瞬间!看看你中了几枪?
  8. java 中使用mongodb_mongodb在java中的使用
  9. Linux常用命令(第二版) --权限管理命令
  10. 第三只眼使用局域网版本还是网络版好_iOS13.4测试版使用3天后,发现3个优化,建议升级!...
  11. Android 系统性能优化(47)---Traceview
  12. Linux之文件目录常用命令
  13. Spark采用分区方式读取数据库时partitionColumn, lowerBound, upperBound, numPartitions的理解与验证
  14. Zabbix 使用微信接收报警信息
  15. glBindTexture--纹理
  16. go - 发布订阅模型
  17. 【源码】基于MPPT的光伏(PV)系统仿真
  18. 2个或2个以上路由器串联上网,在同一网段
  19. Java 中获取错误代码_错误代码:99999, 错误信息:无法获取到文件名
  20. PDF文件怎么编辑,如何删除其中一页

热门文章

  1. LDAP命令介绍---import-ldif
  2. SSH软件包:Sftp,scp和ssh-agent
  3. MYSQL的集群的安装与配置(mysql-5.1.21)
  4. 递归基础之N皇后问题
  5. mvn 使用中的错误
  6. matlab2016b ubuntu命令行安装 + matconvnet的安装
  7. JavaOne大事纪:IBM谈OpenJ9和Open Liberty
  8. 即时通讯应用战争开打,到底谁能最终定义我们的交流方式?
  9. ZZULI 1876: 蛤玮的项链 Hash + 二分
  10. logstash 过虑nginx访问日志