Matlab对指定参数的曲线进行非线性拟合
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)=anxn+an−1xn−1+...+a1x+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}Tps+1K,显然需要辨别的两个参数是K和TpT_pTp。
该系统在阶跃响应输入下的始于表达式为c(t)=K(1−etTP)c(t)=K(1-\rm e^\frac{t}{T_P})c(t)=K(1−eTPt),因此需要建立的函数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对指定参数的曲线进行非线性拟合相关推荐
- matlab 线性最小二乘法,matlab_最小二乘法线性和非线性拟合.ppt
3.血液容积v, t=0注射剂量d, 血药浓度立即为d/v. 2.药物排除速率与血药浓度成正比,比例系数 k(>0) 模型假设 1. 机体看作一个房室,室内血药浓度均匀--一室模型 模型建立 在 ...
- matlab 中数据未定义,matlab总是出现参数未定义
matlab 曲线拟合参数 1.你给的数据有问题,t有11个点,而R只有10个点.暂按照删去t的最后一个点考虑.2.拟合和很多因素有关,比如初值.拟合函数的选择.算法设置等.3.按现有程序拟合的结果: ...
- 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool
在Origin中使用自定义函数进行非线性拟合 http://blog.163.com/wuhen211@126/blog/static/7474635020105233269949/ matlab拟合 ...
- matlab 分式拟合,第七讲matlab实现非线性拟合.ppt
其中 R2越趋近于1表明拟合效果越好. 如果是多项式函数,则称为多项式回归,此时的参数即多项式的系数:如果为指数函数.对数函数.幂函数或三角函数等,则称为非线性拟合.下面的图形给出了常见曲线与方程的对 ...
- matlab 变长参数,变长参数函数的概念
分享一个2015年华为笔试知识点:变长参数函数 变长参数的函数即参数个数可变.参数类型不定 的函数. 设计一个参数个数可变.参数类型不定的函数是可能的,最常见的例子是printf函数.scanf函数和 ...
- 翻领成型器轨迹点MATLAB编程,基于MATLAB的翻领成型器领口曲线的展开及可视化
基于MATLAB的翻领成型器领口曲线的展开及可视化 易启伟基于 M A T L A B的翻领成型器领 口曲线的展开及可视化 基于 M A T L A B的翻领成型器领口曲线的展开及可视化 易启伟 ( ...
- Matlab中的参数解析
本文中,我们讨论如何在Matlab中进行参数解析. 参数解析对于软件开发和程序设计至关重要.在Matlab中,函数参数传递一般采用直接传值方式,最复杂的情况下也就是使用varargin变长数组.那么如 ...
- 参数函数 matlab,MATLAB的函数参数
本节介绍一下 MATLAB 的函数参数.具体的操作步骤如下: 确定函数参数数量 当调用一个函数时,所用的输入变量和输出变量的数量,在函数内是确定的.nargin 函数确定输入变量个数,nargout ...
- matlab和creo仿真,一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法与流程
本发明涉及一种基于Creo和Matlab的复杂空间焊缝曲线的重构方法,属于计算机图形学技术领域. 背景技术: 在工业生产中,经常遇到各种类型的曲线,如轴的截面圆轮廓曲线.螺纹的螺旋线.齿轮轮齿的齿廓曲 ...
最新文章
- 预、自训练之争:谷歌说预训练虽火,但在标注数据上自训练更有效
- C语言访问MYSQL数据库的完整的代码例子
- 等号赋值与memcpy的效率问题
- EfficientNetv2测试
- 当当架构部张亮:从码农到大牛,技术与心境的双重提升
- 哪吒之魔童降世 - 逆天改命,若命运不公,就和它斗到底!
- qt tounicode 崩溃_吐槽大会丨细数那些打块的崩溃瞬间!看看你中了几枪?
- java 中使用mongodb_mongodb在java中的使用
- Linux常用命令(第二版) --权限管理命令
- 第三只眼使用局域网版本还是网络版好_iOS13.4测试版使用3天后,发现3个优化,建议升级!...
- Android 系统性能优化(47)---Traceview
- Linux之文件目录常用命令
- Spark采用分区方式读取数据库时partitionColumn, lowerBound, upperBound, numPartitions的理解与验证
- Zabbix 使用微信接收报警信息
- glBindTexture--纹理
- go - 发布订阅模型
- 【源码】基于MPPT的光伏(PV)系统仿真
- 2个或2个以上路由器串联上网,在同一网段
- Java 中获取错误代码_错误代码:99999, 错误信息:无法获取到文件名
- PDF文件怎么编辑,如何删除其中一页