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+an1xn1+...+a1x+a0组成,若采用最小二乘法拟合,对于参数an,an−1,...,a1,a0a_n,a_{n-1},...,a_1,a_0an,an1,...,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(1eTPt),因此需要建立的函数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)]);%标注估计的参数

绘制的预估曲线如下:(蓝色的是实验数据,红色的是拟合曲线)
蓝色的是实验数据,红色的是拟合曲线
可以发现,如果沿着实验曲线的大致趋势,拟合的指数逼近曲线如红色线所示,可见辨识的参数较为准确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis原生批量插入的坑与解决方案!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入、MyBatis Plus 批量插入、MyBatis 原生批量插入…

Spring学习(20)--- Schema-based AOP(基于配置的AOP实现) -- 配置切入点pointcut

pointcut(切断点)表达式: execution(public * *(..)) execution(* set*(..)) execution(* com.xyz.service.AccountService.*(..)) execution(* com.xyz.service..(..)) execution(* com.xyz.service...(..)) within(com.xyz.service.*)…

系统结构图 数据结构_数据结构图简介

系统结构图 数据结构What you are going to learn? 你要学什么? In this article, we learn about the introduction to Graphs in Data Structure and Algorithm. 在本文中,我们将了解图在数据结构和算法中的介绍 。 What are the components in Gra…

Matlab仿真PID控制(带M文件、simulink截图和参数分析)

文章目录0.符号说明1.如何根据连续系统建立差分方程1.1.获取连续系统的传递函数1.2.获取离散系统的传递函数1.3.转换为差分方程2.基本PID控制原理3.比较PID输出,分析参数产生的影响4.改进PID算法(遇限削弱积分法)5.simulink仿真0.符号说明 y…

再见 Postman!Apifox 才是 YYDS!

作为开软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色。但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高效完成,比如&#xf…

Python operator.not_()函数与示例

operator.not_()函数 (operator.not_() Function) operator.not_() function is a library function of operator module, it is used to perform "NOT operation" on a given value and returns True if the given value is zero or any falsy value, False, otherw…

jprofiler安装与使用

1: 修改/etc/profile 增加以下内容: JPROFILER_HOME/opt/jprofiler9/bin/linux-x64export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$JPROFILER_HOME 2:tomcat /bin/catalina.sh 增加以下内容: CATALINA_OPTS"$CATALINA_OPTS -Xms12…

Matlab【可视化作图】绘制线电压相电压辅助线

目录引言绘图原理采点绘图设置坐标轴标尺引言 学习电力电子的同学可能在私下里练习的时候非常需要三相线电压和相电压的辅助线。最近我随便找了一本书把Matlab可视化编程恶补了一下,给大家介绍一下这个波形辅助线是怎么做的。 三相线电压辅助线就是一组相位相差60的…

SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表。你肯定听说过POI这个东西,可以实现。但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类似Xml解析)。今天给大家推…

Python datetime __str __()方法与示例

Python datetime .__ str __()方法 (Python datetime.__str__() Method) datetime.__str__() method is used to manipulate objects of datetime class of module datetime. datetime .__ str __()方法用于操作模块datetime的datetime类的对象。 It uses a datetime class o…

Facebook升级到MySQL 8.0付出的代价

近日,Facebook 官博公布了他们的数据库版本从 MySQL 5.6 升级到了 MySQL 8.0,并且在官博记录了复盘详细的升级过程。Facebook 称,他们最近的一次大版本升级到 MySQL 5.6 花了一年多时间才完成,还在 5.6 版上开发 LSM 树存储引擎&a…

Matlab制作朱利表

朱利判据 其中 {bn−kan−k−ana0∗akcn−kbn−k−bnb0∗bk...qn−kpn−k−pnp0∗pk\begin{cases} b_{n-k}a_{n-k}-\frac{a_n}{a_0}*a_k\\ c_{n-k}b_{n-k}-\frac{b_n}{b_0}*b_k\\ ...\\ q_{n-k}p_{n-k}-\frac{p_n}{p_0}*p_k \end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧​bn−k​an−k​−a0…

HDOJ 1047 Integer Inquiry

JAVA睑板.... Integer Inquiry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12042 Accepted Submission(s): 3037Problem DescriptionOne of the first users of BITs new supercomputer was Chip Diller. …

高并发下秒杀商品,必须知道的9个细节

高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:…

weakhashmap_Java WeakHashMap keySet()方法与示例

weakhashmapWeakHashMap类的keySet()方法 (WeakHashMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to retrieve all the key exists in this map to be viewed in a set. keySet…

最小拍控制系统详细解读(阶跃输入+速度输入2个案例)【Simulink仿真】

目录索引1.符号说明与结构框图2.最小拍控制系统构造原则2.1数字控制器D(z)的构造3.简单控制对象的最小拍控制器设计3.1阶跃输入3.2速度输入1.符号说明与结构框图 y(k)——系统响应输出的离散值u(k)——数字PID控制输出的离散值r(k)——期望输出的离散值(事先已知&a…

php中重写和final关键字的使用

为什么把重写和final放在一起,原因就是一条:final的意思是不可更改的,也就是说final定义的东西是不可改变的,下面具体来说一下。 来看一段简单的代码: 1 class BaseClass {2 final public function test() {3 …

java vector_Java Vector lastElement()方法与示例

java vector向量类的lastElement()方法 (Vector Class lastElement() method) lastElement() method is available in java.util package. lastElement()方法在java.util包中可用。 lastElement() method is used to return the last element of this Vector. lastElement()方法…

SpringBoot官方热部署和远程调试神器,真带劲!

平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效。如果你的应用足够大的话,启动可能需要好几分钟。有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款SpringBoot官方的热部署工具spri…

【Python】输入任意个数元素并保存至列表

目录1.导入任意个数元素到列表1.1.编程思路1.2.代码片2.查找一个重复元素在列表中的所有位置2.1.编程思路2.2代码片1.导入任意个数元素到列表 1.1.编程思路 输入未知个数的元素需要用列表来存储,由于Python具有内存的动态分配能力,列表不需要手动动态分…