Matlab_系统辨识_应用例子
利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法一、引言系统辨识是研究系统动态特性的一个重要方法,它广泛应用于控制系统、信号处理、通信等领域。
利用Matlab进行系统辨识能够实现快速、准确的模型建立和参数估计。
本文将介绍在Matlab环境下常用的系统辨识技术方法及其应用。
二、系统辨识的基本概念系统辨识是通过对系统的输入和输出信号进行观测和分析,以推断系统的结构和参数。
一般来说,系统辨识包括建立数学模型、估计系统参数和进行模型验证三个步骤。
1. 建立数学模型建立数学模型是系统辨识的第一步,它是描述系统行为的数学表达式。
常用的数学模型包括线性模型、非线性模型和时变模型等。
2. 估计系统参数在建立了数学模型之后,需要通过对实验数据的分析,估计出系统的参数。
参数估计可以通过最小二乘法、极大似然估计法等方法实现。
3. 模型验证模型验证是为了确定估计得到的系统模型是否准确。
常用的方法有经验验证、残差分析、模型检验等。
三、常用的系统辨识技术方法1. 线性参数模型线性参数模型是最常用的系统辨识方法之一。
它假设系统具有线性特性,并通过估计线性模型的参数来描述系统。
在Matlab中,可以使用函数"arx"进行线性参数模型的辨识。
2. 神经网络模型神经网络模型是一种非线性模型,它通过人工神经元的连接权值来描述系统行为。
在Matlab中,可以使用"nlarx"函数进行神经网络模型的辨识。
3. 系统辨识工具箱Matlab提供了丰富的系统辨识工具箱,包括System Identification Toolbox和Neural Network Toolbox等。
这些工具箱提供了各种方法和函数,方便用户进行系统辨识分析。
四、利用Matlab进行系统辨识的应用案例1. 系统辨识在控制系统中的应用系统辨识在控制系统中具有广泛的应用,如无人机控制、机器人控制等。
通过对系统进行辨识,可以建立准确的数学模型,并用于控制器设计和系统优化。
matlab中systemidentification

matlab中systemidentification
System Identification Toolbox是MATLAB中的一个工具箱,用于通过观察系统输入和输出之间的关系,自动地从数据中提取数学模型,并进行参数估计和模型验证。
系统辨识(System Identification)是指通过实验数据来推测未知的控制系统或物理系统的动态模型,主要包括系统的传递函数、状态空间模型或差分方程模型等。
MATLAB提供了许多函数来进行系统辨识,如:
1. iddata:用于从实验数据创建实验数据对象
2. idss:用于创建状态空间模型对象
3. idtf:用于创建传递函数模型对象
4. idpoly:用于创建基于自回归多项式的ARX模型对象
此外,MATLAB还提供了基于不同算法的辨识方法,如ARX算法、ARMAX算法、Box-Jenkins算法、OE算法、BJ算法等。
系统辨识在控制工程、机械工程、航空航天等领域有着广泛的应用,例如用于飞机或汽车的控制、传感器模型的辨识、医疗设备的建模等。
质量弹簧阻尼系统数学模型matlab辨识

在MATLAB中,对质量-弹簧-阻尼系统(Mass-Spring-Damper System)进行数学模型的辨识通常涉及系统识别或参数估计。
这个系统可以用二阶微分方程来描述,形如:[ m\ddot{x} + c\dot{x} + kx = F(t) ]其中:∙( m ) 是质量∙( c ) 是阻尼系数∙( k ) 是弹簧常数∙( x ) 是位移∙( F(t) ) 是外部作用力∙( \dot{x} ) 和( \ddot{x} ) 分别是一阶和二阶导数,表示速度和加速度为了在MATLAB中进行辨识,你需要有系统的输入和输出数据。
通常,输入是施加到系统上的力,输出是系统的响应(位移、速度或加速度)。
以下是一个简单的步骤,说明如何在MATLAB中辨识质量-弹簧-阻尼系统的参数:1.收集数据:首先,你需要收集系统的输入和输出数据。
这可以通过实验或模拟来完成。
2.数据预处理:确保数据是干净的,没有噪声或异常值。
可能需要进行滤波或平滑处理。
3.选择辨识方法:MATLAB提供了多种系统辨识方法,如最小二乘法、频域分析等。
选择最适合你数据的方法。
4.实现辨识算法:使用MATLAB编程实现所选择的辨识算法。
5.参数估计:应用算法来估计系统的参数(质量、阻尼和弹簧常数)。
6.验证模型:使用估计的参数构建系统模型,并与原始数据进行比较,以验证模型的准确性。
以下是一个简化的MATLAB代码示例,使用最小二乘法来估计质量-弹簧-阻尼系统的参数:matlab复制代码% 假设你已经有了一些输入(力F)和输出(位移x)数据% F - 输入力向量% x - 位移向量% t - 时间向量% 计算速度和加速度dx = diff(x) ./ diff(t);ddx = diff(dx) ./ diff(t);% 构建系统矩阵A和输出向量bA = [diff(t)' diff(t)'];b = -ddx;% 最小二乘法估计参数params = A \ b;% params(1) 是阻尼系数 c% params(2) 是弹簧常数 k% 输出参数估计值fprintf('Estimated damping coefficient (c): %f\n', params(1));fprintf('Estimated spring constant (k): %f\n', params(2));% (可选)验证模型% 使用估计的参数构建模型,并与原始数据进行比较% ...请注意,上述代码是一个非常简化的示例,实际情况可能更加复杂。
系统辨识的Matlab实现方法(手把手)

最近在做一个项目的方案设计,应各位老总的要求,只有系统框图和器件选型可不行,为了凸显方案设计的高大上,必须上理论分析,炫一下“技术富”,至于具体有多大实际指导意义,那就不得而知了!本人也是网上一顿百度,再加几日探索,现在对用matlab 实现系统辨识有了一些初步的浅薄的经验,在此略做一小节。
必须要指出的是,本文研究对象是经典控制论理最简单最常用的线性时不变的siso 系统,而且是2阶的哦,也就是具有如下形式的传递函数:本文要做的就是,对于有这样传递函数的一个系统,要辨识得到其中的未知数T , ξ!!这可是控制系统设计分析的基础哦,没有系统模型,啥理论、算法都是白扯,在实际工程中非常重要哦!经过总结研究,在得到系统阶跃响应实验数据之后(当然如果是其他响应,也有办法可以辨识,在此还是只讨论最简单的阶跃响应实验曲线,谁让你我是菜鸟呢),利用matlab 至少可以有两种方法实现实现(目前我只会两种,呵呵)!一、函数法二、GUI 系统辨识工具箱下面分别作详细介绍!一、 函数法看官别着急,先来做一段分析(请看下面两排红*之间部分),这段分析是网上找来的,看看活跃一下脑细胞吧,如果不研读一下,对于下面matlab 程序,恐怕真的就是一头雾水咯!*******************************************************************************G(s)可以分解为:))((1)(212ωω++=s s T s G其中, [][]11112221--=-+=ξξωξξωTT 1ω、2ω都是实数且均大于零。
则有:211ωω=T ,21212ωωωωξ+= 传递函数进一步化为:因此,辨识传递函数就转化为求解1ω、2ω。
当输入为单位阶跃函数时,对上式进行拉普拉斯反变换,得系统时域下的单位阶跃响应为:即 t t e e t y 21211122)(1ωωωωωωωω-----=-令1ω=2ωk )1(>k ,得对上式两边取以e 为底的对数得当∞→t 时,⎥⎦⎤⎢⎣⎡---t k e k 2)1(11ln ω0→,则上式化简为 该式的形式满足直线方程其中,)(*t y =[])(1ln t y -,1ln ,2-=-=k k b a ω)1(>k 通过最小二乘算法实现直线的拟合,得到a ,b 的值,即可得到1ω、2ω的值,进而可得系统的传递函数。
使用Matlab技术进行系统辨识的基本方法

使用Matlab技术进行系统辨识的基本方法概述:系统辨识是指通过对已知输入输出数据的分析和处理,推断出系统的动态性质和数学模型的过程。
在科学研究、工程设计和控制应用中,系统辨识扮演着重要的角色。
而Matlab作为一种强大的数值计算和数据分析软件,为系统辨识提供了便利且高效的工具。
本文将介绍使用Matlab进行系统辨识的基本方法,并结合实例进行讲解。
一、数据采集与准备在进行系统辨识之前,首先需要采集到对应的输入输出数据。
一般来说,输入信号是已知的,可以通过外部激励或者系统自身的变动来获取;而输出信号则是根据输入信号通过系统响应得到的。
在采集数据时,需要注意数据的质量和采样频率的选择。
二、数据预处理在进行系统辨识之前,数据通常需要进行一些预处理,以去除噪声、平滑数据和调整时间序列等。
这可以通过Matlab中的数据处理函数和滤波器实现。
例如,可以使用高斯滤波器对数据进行平滑处理,或者使用降噪算法去除不必要的噪声。
三、参数估计参数估计是系统辨识的核心步骤之一,它通过对已知数据进行分析和处理,推断出系统的数学模型和参数。
在Matlab中,有多种方法和工具可供选择,如最小二乘法、最大似然法、系统辨识工具箱等。
这些工具可以根据不同的模型和数据类型灵活选择,并提供相应的算法和函数。
四、模型验证与优化根据估计得到的系统模型和参数,可以使用Matlab进行模型验证和优化。
模型验证是指将估计得到的模型与真实系统进行对比,检验其拟合程度和预测能力。
如果模型的拟合程度较差,则需要对参数进行调整和优化,以提高模型的准确性和稳定性。
五、模型预测与应用在系统辨识完成之后,可以使用得到的模型进行系统预测和应用。
通过对未知输入信号进行预测,可以得到相应的输出响应,进而实现对系统动态性质的分析和控制。
Matlab提供了丰富的预测和应用函数,例如时域模拟、频域分析、控制系统设计等,可以满足不同应用场景的需求。
六、案例分析为了更好地理解和掌握使用Matlab进行系统辨识的基本方法,下面通过一个简单的案例进行分析。
matlab的n4sid函数

MATLAB的n4sid函数介绍MATLAB是一款常用的科学计算软件,它提供了许多用于数据分析和建模的函数。
其中,n4sid函数是一个用于系统辨识和模型预测的函数。
在本文中,我们将详细介绍n4sid函数的功能、使用方法以及一些相关的概念。
什么是系统辨识在控制系统设计和信号处理中,系统辨识是一个重要的任务。
系统辨识的目标是根据给定的输入和输出数据,从中推断出系统的动态模型。
系统的动态模型能够帮助我们理解系统的行为,并用于预测系统在未来的响应。
在实际应用中,系统辨识广泛应用于控制系统设计、信号处理、机器学习等领域。
n4sid函数的功能和原理n4sid函数是MATLAB中用于系统辨识的一个工具函数。
它基于ARX(自回归移动平均)模型和ARMA(自回归滑动平均)模型,并使用了奇异值分解(Singular Value Decomposition,SVD)的方法来进行系统辨识和模型预测。
n4sid函数可以从输入和输出数据中自动估计系统的状态空间模型和噪声模型。
在辨识过程中,它会根据给定的输入和输出数据建立一个ARX或ARMA模型,并使用SVD方法进行模型参数的估计和模型预测。
n4sid函数能够估计出一个最佳的状态空间模型,该模型能够最好地拟合给定的数据。
n4sid函数的使用方法使用n4sid函数可以进行系统辨识和模型预测。
下面是n4sid函数的使用步骤:1.准备数据:首先,需要准备输入和输出数据。
输入数据通常是系统的控制信号,输出数据是系统的响应信号。
输入和输出数据可以是时域数据,也可以是频域数据。
2.构建模型:使用n4sid函数可以建立ARX或ARMA模型。
ARX模型是一种将当前时刻的输出与过去时刻的输入和输出相关联的模型;ARMA模型是一种将当前时刻的输出与过去时刻的输入、输出和噪声相关联的模型。
3.辨识系统:将准备好的输入和输出数据传入n4sid函数,该函数会自动辨识系统的状态空间模型和噪声模型。
辨识得到的模型可以用于系统的预测和控制。
Matlab技术的实际应用案例解析

Matlab技术的实际应用案例解析随着计算机技术的发展,Matlab作为一种高级技术语言,被广泛应用于多个领域。
无论是在科研领域还是工程实践中,Matlab都扮演着重要的角色。
本文将通过几个实际应用案例,探讨Matlab技术在不同领域的应用,以期给读者提供一些启示和参考。
一、图像处理领域图像处理是Matlab的一项重要应用领域。
利用Matlab提供的强大的图像处理工具箱,可以实现各种功能,例如图像增强、滤波、分割和识别等。
以下将介绍一个实际应用案例。
案例一:肿瘤图像分割肿瘤图像的分割对于医学诊断非常关键。
在某医院的研究中,研究人员利用Matlab进行了肿瘤图像的分割工作。
首先,他们先对肿瘤图像进行预处理,包括降噪和增强等操作。
然后,利用Matlab提供的图像分割算法,将肿瘤与周围组织分离出来。
最后,通过对分割后的图像进行计算,可以得到肿瘤的大小、形状等信息,为医生提供诊断依据。
二、信号处理领域信号处理是Matlab的另一个重要应用领域。
通过利用Matlab提供的信号处理工具箱,可以实现信号的滤波、谱分析、峰值检测等功能。
以下将介绍一个实际应用案例。
案例二:语音信号增强在通信领域,语音信号是一种常见的信号类型。
在某通信公司的项目中,研发团队利用Matlab对语音信号进行增强。
首先,他们通过Matlab提供的滤波器设计算法,设计了一种高效的降噪滤波器。
然后,他们利用该滤波器对采集到的语音信号进行滤波处理,去除噪声成分。
最后,通过对处理后的语音信号进行主观听感和客观评价,证明了该算法的有效性。
三、控制系统领域Matlab在控制系统领域的应用也非常广泛。
通过Matlab提供的控制系统工具箱,可以进行控制系统的建模、仿真和优化等操作。
以下将介绍一个实际应用案例。
案例三:智能交通信号优化在城市交通系统中,智能交通信号优化是一个重要的研究方向。
在某城市的交通管理局的项目中,研究人员利用Matlab进行了智能交通信号优化的仿真研究。
如何在MATLAB中进行系统辨识

如何在MATLAB中进行系统辨识引言:在系统辨识中,我们通常会使用数据来推导出系统的数学模型,进而对系统进行建模和预测。
MATLAB作为一种强大的数值计算和分析工具,提供了丰富的系统辨识工具包,能够帮助我们实现这一目标。
本文将介绍如何使用MATLAB进行系统辨识,包括数据预处理、模型选择、参数估计等内容。
一、数据预处理系统辨识的第一步是数据预处理,即对采集到的数据进行处理和清洗,以提高后续建模和分析的准确性。
常见的数据预处理技术包括去除异常值、平滑数据、采样率调整等。
在MATLAB中,我们可以使用一系列内置的函数和工具箱来完成这些任务。
例如,使用"findoutliers"函数可以检测并去除异常值,使用"smoothdata"函数可以平滑数据,使用"resample"函数可以进行采样率调整等。
二、模型选择在系统辨识中,我们需要选择适合的数学模型来描述系统的行为。
常用的系统模型包括线性模型、非线性模型、时变模型等。
在MATLAB中,我们可以使用"sysident"工具箱中的函数来进行模型选择。
其中最常用的方法是ARX模型和ARMAX模型。
ARX模型适用于仅包含输入和输出的线性系统辨识,而ARMAX 模型适用于包含自回归项和移动平均项的线性系统辨识。
根据实际情况和需求,选择适合的模型进行建模。
三、参数估计参数估计是系统辨识中的关键步骤,其目的是通过观测数据来估计系统模型中的参数。
在MATLAB中,我们可以使用"arx"和"armax"函数进行参数估计。
这些函数将原始观测数据作为输入,并根据选择的模型类型进行系统参数的估计。
具体的参数估计方法包括最小二乘法、极大似然法、递推最小二乘法等。
根据系统模型和实际需求,选择合适的参数估计方法进行系统参数的估计。
四、模型验证模型验证是系统辨识中的重要环节,其目的是验证建立的系统模型是否能够准确地描述观测数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1、考虑仿真对象)()2(5.0)1()2(7.0)1(5.1)(k v k u k u k z k z k z +-+-=-+-- 其中,)(k v 是服从正态分布的白噪声N )1,0(。
输入信号采用4阶M 序列,幅度为1。
选择如下形式的辨识模型)()2()1()2()1()(2121k v k u b k u b k z a k z a k z +-+-=-+-+设输入信号的取值是从k =1到k =16的M 序列,则待辨识参数LSθˆ为LS θˆ=(T T -ΦΦΦ1)z 。
其中,被辨识参数LSθˆ、观测矩阵Φ的表达式为: ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=2121ˆb b a a LS θ (3)(4)(16)z z z ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦z L (2)(1)(2)(1)(3)(2)(3)(2)(15)(14)(15)(14)z z u u z z u u z z u u --⎡⎤⎢⎥--⎢⎥Φ=⎢⎥⎢⎥--⎣⎦L L 程序框图如图1所示。
Matlab 仿真程序如下:%二阶系统的最小二乘一次完成算法辨识程序,文件名:u=[-1,1,-1,1,1,1,1,-1,-1,-1,1,-1,-1,1,1]; %系统辨识的输入信号为一个周期的M序列z=zeros(1,16); %定义输出观测值的长度for k=3:16z(k)=*z(k-1)*z(k-2)+u(k-1)+*u(k-2); %用理想输出值作为观测值endsubplot(3,1,1) %画三行一列图形窗口中的第一个图形stem(u) %画输入信号u的径线图形subplot(3,1,2) %画三行一列图形窗口中的第二个图形i=1:1:16; %横坐标范围是1到16,步长为1plot(i,z) %图形的横坐标是采样时刻i, 纵坐标是输出观测值z, 图形格式为连续曲线subplot(3,1,3) %画三行一列图形窗口中的第三个图形stem(z),grid on %画出输出观测值z的径线图形,并显示坐标网格u,z %显示输入信号和输出观测信号%L=14 %数据长度HL=[-z(2) -z(1) u(2) u(1);-z(3) -z(2) u(3) u(2);-z(4) -z(3) u(4) u(3);-z(5) -z(4) u(5) u(4);-z(6) -z(5) u(6) u(5);-z(7) -z(6) u(7) u(6);-z(8) -z(7) u(8) u(7);-z(9) -z(8) u(9) u(8);-z(10) -z(9) u(10) u(9);-z(11) -z(10) u(11) u(10);-z(12) -z(11) u(12) u(11);-z(13) -z(12) u(13) u(12);-z(14) -z(13) u(14) u(13);-z(15) -z(14) u(15) u(14)] %给样本矩阵 赋值ZL=[z(3);z(4);z(5);z(6);z(7);z(8);z(9);z(10);z(11);z(12);z(13);z(14);z(15);z(16)] % 给样本矩阵z L赋值%Calculating Parametersc1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c=c2*c3 %计算并显示θˆLS%Display Parametersa1=c(1), a2=c(2), b1=c(3),b2=c(4) %从θˆ中分离出并显示a1、a2、b1、LSb2%End程序运行结果:>>u =[ -1,1,-1,1,1,1,1,-1,-1,-1,1,-1,-1,1,1]z =[ 0,0,,,,,,,,,,,,,,]HL =0 0ZL =[ ,,,,,,,,,,,,,]Tc =[ ,,,]Ta1 =a2 =b1 =b2 =>>-11-1010-10010从仿真结果表1可以看出,由于所用的输出观测值没有任何噪声成分,所以辨识结果也无任何误差。
例2 根据热力学原理,对给定质量的气体,体积V 与压力P 之间的关系为βα=PV ,其中α和β为待定参数。
经实验获得如下一批数据, V 的单位为立方英寸,P 的单位为帕每平方英寸。
VP试用最小二乘一次完成算法确定参数α和β。
首先要写出系统的最小二乘表达式。
为此,把体积V 与压力P 之间的关系βα=PV 改为对数关系,即,βαlog log log +-=V P 。
此式与式)()()(k e k k z +=θh τ,对比可得:P log )(=k z ,]1log [)(V h -=k τ,τβα]log [=θ。
例2的程序如下。
%实际压力系统的最小二乘辨识程序,文件名:clear %工作间清零V=[,,,,,]',P=[,,,,,]' %赋初值并显示V 、P %logP=-alpha*logV+logbeita=[-logV,1][alpha,log(beita)]'=HL*sita %注释P 、V 之间的关系for i=1:6; Z(i)=log(P(i)); %循环变量的取值为从1到6,系统的采样输出赋值End %循环结束ZL=Z' % z L 赋值HL=[-log(V(1)),1;-log(V(2)),1;-log(V(3)),1;-log(V(4)),1;-log(V(5)),1;-log(V(6)),1] %H L 赋值%Calculating Parametersc1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c4=c2*c3 %计算被辨识参数的值%Separation of Parametersalpha=c4(1) %α为c4的第一个元素beita=exp(c4(2)) %β为以自然数为底的c4的第二个元素的指数程序运行结果:V = [, , , , , ]τP = [, , , , , ]τZL = [, , , , , ]τHL =c4 =alpha =beita = +004>>仿真结果表明,用最小二乘一次完成算法可以迅速辨识出系统参数,即α=,β=+004。
例3 考虑图3所示的仿真对象,图中, )(k v 是服从N )1,0(分布的不相关随机噪声。
且)(1-z G )()(11--=z A z B ,)(1-z N )()(11--=z C z D ,11211121()1 1.50.7()() 1.00.5()1A z z z C zB z z z D z --------⎧=-+=⎪=+⎨⎪=⎩ 经过计算,得到系统真实的模型:)()2(5.0)1()2(7.0)1(5.1)(k v k u k u k z k z k z +-+-=-+--选择图3所示的辨识模型。
仿真对象选择如下的模型结构)()2()1()2()1()(2121k v k u b k u b k z a k z a k z +-+-=-+-+ 其中,)(k v 是服从正态分布的白噪声N )1,0(。
输入信号采用4位移位寄存器产生的M 序列,幅度为。
最小二乘递推算法辨识的程序流程如图4所示。
下面给出具体程序。
%最小二乘递推算法辨识程序, 在光盘中的文件名:clear %清理工作间变量L=15; % M 序列的周期y1=1;y2=1;y3=1;y4=0; %四个移位寄存器的输出初始值for i=1:L;%开始循环,长度为Lx1=xor(y3,y4); %第一个移位寄存器的输入是第三个与第四个移位寄存器的输出的“或”x2=y1; %第二个移位寄存器的输入是第一个移位寄存器的输出x3=y2; %第三个移位寄存器的输入是第二个移位寄存器的输出x4=y3; %第四个移位寄存器的输入是第三个移位寄存器的输出y(i)=y4; %取出第四个移位寄存器的幅值为"0"和"1"的输出信号,即M序列if y(i)>,u(i)=; %如果M序列的值为"1", 辨识的输入信号取“-0.03”else u(i)=; %如果M序列的值为"0", 辨识的输入信号取“0.03”end %小循环结束y1=x1;y2=x2;y3=x3;y4=x4; %为下一次的输入信号做准备end %大循环结束,产生输入信号ufigure(1); %第一个图形stem(u),grid on %显示出输入信号径线图并给图形加上网格z(2)=0;z(1)=0; %设z的前两个初始值为零for k=3:15; %循环变量从3到15z(k)=*z(k-1)*z(k-2)+u(k-1)+*u(k-2); %输出采样信号end%RLS递推最小二乘辨识c0=[ ]'; %直接给出被辨识参数的初始值,即一个充分小的实向量p0=10^6*eye(4,4); %直接给出初始状态P0,即一个充分大的实数单位矩阵E=; %取相对误差E=c=[c0,zeros(4,14)]; %被辨识参数矩阵的初始值及大小e=zeros(4,15); %相对误差的初始值及大小for k=3:15; %开始求Kh1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)k1=p0*h1*x1;%求出K的值d1=z(k)-h1'*c0; c1=c0+k1*d1; %求被辨识参数ce1=c1-c0; %求参数当前值与上一次的值的差值e2=e1./c0; %求参数的相对变化e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的第k列c0=c1; %新获得的参数作为下一次递推的旧参数c(:,k)=c1; %把辨识参数c 列向量加入辨识参数矩阵的第k列p1=p0-k1*h1'*p0; %求出p(k)的值p0=p1; %给下次用if e2<=E break; %如果参数收敛情况满足要求,终止计算end %小循环结束end %大循环结束c,e %显示被辨识参数及其误差(收敛)情况%分离参数a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:); ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:);figure(2); %第二个图形i=1:15; %横坐标从1到15plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':') %画出a1,a2,b1,b2的各次辨识结果title('Parameter Identification with Recursive Least Squares Method') %图形标题figure(3); %第三个图形i=1:15; %横坐标从1到15plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') %画出a1,a2,b1,b2的各次辨识结果的收敛情况title('Identification Precision') %图形标题程序运行结果:>>c =0.010.020.03Fig.1 Input Signal1Fig. 2 Parameter Ident ification with Recursive Least Squares Method100200300Fig.3 Identification Error图5 最小二乘递推算法的参数辨识仿真e =0 0 0 0 0 0 00 0 0 0表2 最小二乘递推算法的辨识结果参 数 a 1 a 2 b 1 b 2真 值 估计值仿真结果表明,大约递推到第十步时,参数辨识的结果基本达到稳定状态,即a 1=, a 2= , b 1=, b 2=。