搜档网
当前位置:搜档网 › 状态空间模型

状态空间模型

状态空间模型
状态空间模型

引言

状态空间模型是应用状态空间分析法对动态系统所建立的一种数学模型,它是应用现代控制理论对系统进行分析和综合的基础。状态空间模型由描述系统的动态特性行为的状态方程和描述系统输出变量与状态变量间变换关系的输出方程组成。

在经典控制理论中,采用n阶微分方程作为对控制系统输入量u(t)和输出量y(t)之间的时域描述,或者在零初始条件下,对n阶微分方程进行Laplace 变换,得到传递函数作为对控制系统的频域描述,“传递函数”建立了系统输入量U(s)=L[u(t)]和输出量Y(s)=L[y(t)]之间的关系。传递函数只能描述系统的外部特性,不能完全反映系统内部的动态特征,并且由于只考虑零初始条件,难以反映系统非零初始条件对系统的影响。

现代控制理论是建立在“状态空间”基础上的控制系统分析和设计理论,它用“状态变量”来刻画系统的内部特征,用“一阶微分方程组”来描述系统的动态特性。系统的状态空间模型描述了系统输入、输出与内部状态之间的关系,揭示了系统内部状态的运动规律,反映了控制系统动态特性的全部信息。

龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。

标准四阶龙格——库塔法的基本思想

龙格和库塔提出了一种间接地运用Taylor公式的方法,即利用y(x)在若干个待定点上的函数值和导数值做出线性组合式,选取适当系数使这个组合式进Taylor展开后与y(xi+1)的Taylor展开式有较多的项达到一致,从而得出较高阶的数值公式,这就是龙格—库塔法的基本思想。

一、实验原理

龙格——库塔法

龙格—库塔法是仿真中应用最广泛的方法。它以泰勒展开公式为基础,用函数f的线性组合代替f的高阶导数项,避免了高阶导数的运算,又提高了精度。泰勒公式的阶次取得越高,龙格—库塔法所得的误差等级越低,精度越高。最常用的是四阶龙格—库塔法,它虽然有一定的时间损耗,但比梯形法要快,而且与

其它方法比较,其误差比欧拉法高三个数量级,比预估—校正法高两个数量级,是自启动的。它之所以广泛用于仿真上,还有不可忽视的优点:编程容易、改变步长方便、稳定性好。

龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法。如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法。

一阶常微分方程可以写作:y'=f(x,y),使用差分概念。

(Yn+1-Yn)/h=f(Xn,Yn)推出(近似等于,极限为Yn')

Yn+1=Yn+h*f(Xn,Yn)

另外根据微分中值定理,存在0

Yn+1=Yn+h*f(Xn+th,Y(Xn+th))

这里K=f(Xn+th,Y(Xn+th))称为平均斜率,龙格库塔方法就是求得K的一种算法。利用这样的原理,经过复杂的数学推导(过于繁琐省略),可以得出截断误差为O(h^5)的四阶龙格库塔公式:

K1=f(Xn,Yn);

K2=f(Xn+h/2,Yn+(h/2)*K1);

K3=f(Xn+h/2,Yn+(h/2)*K2);

K4=f(Xn+h,Yn+h*K3);

Yn+1=Yn+h*(K1+2K2+2K3+K4)*(1/6);

Smulink介绍

Simulink是MATLAB软件包之一,用于可视化的动态系统仿真,它适用于连续系统和离散系统,也适用线性系统和非线性系统。它采用系统模块直观地描述系统典型环节。因此可十分方便地建立系统模型而不需要花较多时间编程。正由于这些特点,Simulink广泛流行,被认为是最受欢迎的仿真软件。

Simulink实际上是面向结构的系统仿真软件。利用Simulink进行系统仿真的步骤是:

(1)启动Simulink,进人Simulink窗口;

(2)在Simulink窗口下,借助Simulink模块库,创建系统框图模样并调

整模块参数;

(3)设置仿真参数后,启动仿真;

(4)输出仿真结果。

二、设备和仪器

微型计算机、MATLAB软件

三、设计方法

运行MATLAB,在MATLAB窗口中按SimuLink按钮,启动SimuLink库浏览器,在浏览器窗口上选create a new modem命令,得到一个空模型,从Library: SimuLink窗口中找到需要的模块,将这些模块拖到空模型窗口中。将空模型窗口中的排好,并按要求连接。在保存好的模型窗口中,选Simulation\Paramters命令设置各模块的参数和仿真参数。给模型取一个名字,保存起来。选Simulation\Start命令,进行仿真。

四、设计过程

启动Simulink窗口及模型库

用户首先进入 MATLAB COMMAND窗口,键人Simulink,立即弹出 Simulink 模块库窗口,如图3-1所示。

图3-1 Simulink模块库

系统框图模型的建立

系统框图模型建立的过程如下:

1、建立模型窗口

建立新的模型窗口常有四种方法:

(1)在 MATLAB COMMAND窗口下,键人Simulink,弹出Simulink模块库窗口同时,也弹出一个Untitled窗口,该窗口为未取名的模拟窗口,用户可在该窗口下建立新的系统框图模型。

(2)在Simulink窗口下,用鼠标选取菜单[File]中[New]子菜单的[Model]后,会弹出一个Untitled窗口,如图3-2所示,该窗口供用户建立系统框图模型。

图3-2 Untitled模型窗口

(3)若模型文件已存在,Simulink窗口下,选择菜单[File]中[Open]命令,输入文件名,即打开一个已存在的方框图模型。

2、选取模块或模块组

在建立框图模型过程中,需进行如拷贝、删除模块等操作,必须首先选择模块或模块组,具体操作如下:

(1)在模型或模块库的窗口内,找出所需模块图标,用鼠标左键单击。图标四角出现黑圆点,表示该模块已被选中。

(2)在模型或模块库窗口内,用鼠标左键在窗口矩形边界两个对角单击一下,即生成一个边界框将所需几个模块图标包围,松开鼠标,则边界框内模型和连接线出现黑圆点,表示这些模型(包括在连接线)均被选中。

用同样方法可以选取一个系统框图模块的全部模块。

3、模块拷贝及删除

用户在建立自己模型时候,常常需要从Simulink模块库,其他模块库或其他模型窗口复制所需的模块并移动至自己的模型窗口内。有两种操作方法;鼠标拖动方法和菜单命令法。介绍一种如下。

鼠标拖动法如下:

(1)打开模块库窗口或模型窗口。

(2)将鼠标移至要拷贝的模块图标上,按下鼠标左键并保持。

(3)移动鼠标将模块图标拖至目标模型窗口一定位置。

(4)松开鼠标左键,模块图标保留在目标模拟窗口内,模块拷贝完成。模块的删除有两种方法:

(1)选取要删除的模型,从[Edit]菜单中选取[Clear]或[Cut]令,用[Cut]命令删除的模块允许使用[Paste]粘贴在另一个地方。

(2)选取要删除的模块,并按[Del]键。

Simulink允许模块更名,图标大小改变、模块图标移动、模块图标旋转等操作。模块图标旋转快捷键是CTRL+R。

4、模块参数设置

用鼠标双击待设置参数的模块图标,打开模块对话框,按对话框栏目中提供的信息,输入或改变模块参数。按[Close],模块参数设置或修改完成。

5、模块连接线

模块之间的连接线是信号线,每根连接线都表示标量或向量信号的传输,连接线的箭头表示信号流向。连接线把一个模块的输出端口和另一个模块的输入端口连接起来,也可以利用分支线把一个模块的输出端口和几个模块的输人端口连接起来。

6、模型文件取名及保存

一旦把模型窗口上各模型连接起来,一个系统方框图模型建立工作就已完成。选择模型窗口 [File]菜单中[Save as]命令,弹出对话框,填人模型文件名。

系统仿真运行

系统仿真运行常有两种方法进行:

1、Simulink模型窗口下的仿真运行

在Simulink模型窗口下进行仿真操作简单、直观,不必记忆命令的语法规则,人机交互方式选择或修改仿真参数,模型参数等。具体操作如下:(1)打开系统模型窗口。

(2)从菜单[Simulation]中选取[Parameters],弹出仿真参数对话框。

如图3-3所示。

图3-3仿真参数对话框

(3)应用仿真参数

在通过 Simulation Prameters对话框设置或修改好仿真参数后,准备应用到用户模型仿真中,按对话框中[Apply]键,再按对话框中[Close]键,关闭对话框。

(4)仿真开始和停止

从[Simulation]菜单中选取[Start]命令,仿真立即开始运行,这时[Start]变为[Stop]。若要停止仿真,从[Simulation]菜单中选择[Stop],仿真运行立即停止。

若要使仿真运行暂停,可从[Simulation]菜单中选择[Pause],这时[Pause]变为[Continue]。若要使仿真继续运行,选择[Continue]。

仿真结果输出

1、利用Scope模块

在仿真期间,Scope模块还具有放大、缩小功能以便更清晰显示感兴趣的区域,Scope模块还可将数据存储在丁作空间(Workspace)内。

利用XY图形模型,可显示两个变量之间变化轨迹。

2、利用变量返回值

利用Connectionl模块子库的Out模块,建立如图3-4的模型。仿真运行后,输出量yout保存在工作空间内,可供用户调用,绘制输出轨迹。

图3-4 Out模块应用

3、利用 To Workspace模块

建立如图3-4所示的Simulink模型,模型中采用两个To Workspace模块,一个用于记录时间变量t,一个用来记录变量y。变量名t和y通过打开To Workspace模块对话框填入。To Workspace只能接受一个输入变量。仿真结束后,在MATLAB COMMAND窗口下,键入plot(t,y)可观察输出y的轨迹。

仿真结果可以以数据文件的形式存起来,有两种方法:

(1)利用MATLAB COMMAND窗口,键入

ty=[t y] ; save ty ydout.dat -Ascii

图3-4 To Workspace模块应用

(2)利用To File模块。

仿真结果

课程设计心得体会

经过这次课程设计,我对MATLAB有了较深的认识,它在数学方面,绘图方面都有较庞大的系统,特别是这次课程设计的Simulink系统的绘图功能让我认识到MATLAB的功能强大。设计过程中有人遇到了很多问题,主要是对Simulink 仿真元件库不熟悉造成的。这让我充分认识到实践的重要性,特别是各类软件的使用,不能眼高手低,需要将理论与实践结合起来,多练习以达到知识真正为我所用的目的。

对状态空间模型的理解也从课本上升到实验的实践认识上,对仿真步长对仿真精度的影响有了更深刻形象的理解。

课程设计结束了,但是我们的学习过程没有结束,在以后的学习中,要以此次设计所暴露的问题和总结的经验为积淀,不断提高自己的能力。

由传递函数转换成状态空间模型(1)

由传递函数转换成状态空间模型——方法多!!! SISO 线性定常系统 高阶微分方程化为状态空间表达式 SISO ()()()()()()m n u b u b u b y a y a y a y m m m n n n n ≥+++=++++--- 1102211 )(2 211110n n n n m m m a s a s a s b s b s b s G +++++++=--- 假设1+=m n 外部描述 ←—实现问题:有了部结构—→模拟系统 部描述 SISO ? ??+=+=du cx y bu Ax x 实现问题解决有多种方法,方法不同时结果不同。 一、 直接分解法 因为 1 0111 11()()()()()()()() 1m m m m n n n n Y s Z s Z s Y s U s Z s U s Z s b s b s b s b s a s a s a ----?=? =?++++++++ ???++++=++++=----) ()()() ()()(11 11110s Z a s a s a s s U s Z b s b s b s b s Y n n n n m m m m 对上式取拉氏反变换,则 ? ??++++=++++=----z a z a z a z u z b z b z b z b y n n n n m m m m 1) 1(1)(1)1(1)(0 按下列规律选择状态变量,即设)1(21,,,-===n n z x z x z x ,于是有

?????? ?+----===-u x a x a x a x x x x x n n n n 12113 221 写成矩阵形式 式中,1-n I 为1-n 阶单位矩阵,把这种标准型中的A 系数阵称之为友阵。只要系统状态方程的系数阵A 和输入阵b 具有上式的形式,c 阵的形式可以任意,则称之为能控标准型。 则输出方程 121110x b x b x b x b y m m n n ++++=-- 写成矩阵形式 ??????? ? ????????=--n n m m x x x x b b b b y 12101 1][ 分析c b A ,,阵的构成与传递函数系数的关系。 在需要对实际系统进行数学模型转换时,不必进行计算就可以方便地写出状态空间模型的A 、b 、c 矩阵的所有元素。 例:已知SISO 系统的传递函数如下,试求系统的能控标准型状态空间模型。 4 2383)()(2 3++++=s s s s s U s Y 解:直接得到系统进行能控标准型的转换,即

实验四用MATLAB求解状态空间模型

实验四 用MATLAB 求解状态空间模型 1、实验设备 MATLAB 软件 2、实验目的 ① 学习线性定常连续系统的状态空间模型求解、掌握MATLAB 中关于求解该模型的主要函数; ② 通过编程、上机调试,进行求解。 3、实验原理说明 Matlab 提供了非常丰富的线性定常连续系统的状态空间模型求解(即系统运动轨迹的计算)的功能,主要的函数有: 初始状态响应函数initial()、阶跃响应函数step()以及可计算任意输入的系统响应数值计算函数lsim()和符号计算函数sym_lsim()。 数值计算问题可由基本的Matlab 函数完成,符号计算问题则需要用到Matlab 的符号工具箱。 4、实验步骤 ① 根据所给状态空间模型,依据线性定常连续系统状态方程的解理论,采用MATLAB 编程。 ② 在MATLAB 界面下调试程序,并检查是否运行正确。 习题1:试在Matlab 中计算如下系统在[0,5s]的初始状态响应,并求解初始状态响应表达式。 Matlab 程序如下: A=[0 1; -2 -3]; B=[]; C=[]; D=[]; x0=[1; 2]; sys=ss(A,B,C,D); [y,t,x]=initial(sys,x0,0:5); plot(t,x) 0011232????==????--???? x x x

习题2:试在Matlab 中计算如下系统在[0,10s]内周期为3s 的单位方波输入下的状态响应。并计算该系统的单位阶跃状态响应表达式。 Matlab 程序如下: A=[0 1; -2 -3]; B=[0; 1]; C=[]; D=[]; x0=[1; 2]; sys=ss(A,B,C,D); [u t]=gensig('square',3,10,0.1) 0011232????==????--???? x x x

状态空间模型

状态空间模型概述 状态空间模型是动态时域模型,以隐含着的时间为自变量。状态空间模型在经济时间序列分析中的应用正在迅速增加。其中应用较为普遍的状态空间模型是由Akaike提出并由Mehra进一步发展而成的典型相关(canonical correlation)方法。由Aoki等人提出的估计向量值状态空间模型的新方法能得到所谓内部平衡的状态空间模型,只要去掉系统矩阵中的相应元素就可以得到任何低阶近似模型而不必重新估计,而且只要原来的模型是稳定的,则得到的低阶近似模型也是稳定的。 状态空间模型起源于平稳时间序列分析。当用于非平稳时间序列分析时需要将非平稳时间序列分解为随机游走成分(趋势)和弱平稳成分两个部分分别建模。含有随机游走成分的时间序列又称积分时间序列,因为随机游走成分是弱平稳成分的和或积分。当一个向量值积分序列中的某些序列的线性组合变成弱平稳时就称这些序列构成了协调积分(cointegrated)过程。非平稳时间序列的线性组合可能产生平稳时间序列这一思想可以追溯到回归分析,Granger提出的协调积分概念使这一思想得到了科学的论证。Aoki和Cochrane等人的研究表明:很多非平稳多变量时间序列中的随机游走成分比以前人们认为的要小得多,有时甚至完全消失。 协调积分概念的提出具有两方面的意义:

①如果一组非平稳时间序列是协调积分过程,就有可能同时考察他们之间的长期稳定关系和短期关系的变化; ②如果一组非平稳时间序列是协调积分过程,则只要将协调回归误差代入系统状态方程即可纠正系统下一时刻状态的估计值,形成所谓误差纠正模型。 Aoki的向量值状态空间模型在处理积分时间序列时,引入了协调积分概念和与之相关的误差纠正方法,因此向量值状态空间模型也是误差纠正模型。一个向量值时间序列是否为积分序列需判断其是否含有单位根,即状态空间模型的动态矩阵是否含有量值为1的特征值。根据动态矩阵的特征值即可将时间序列分解成两个部分,其中特征值为1的部分(包括接近1的“近积分”部分)表示随机游走趋势,其余为弱平稳部分,两部分分别建模就得到了两步建模法中的趋势模型和周期模型。 状态空间模型的假设条件是动态系统符号马尔科夫特性,即给定系统的现在状态,则系统的将来与其过去独立。 [编辑] 状态空间模型的分类 状态空间模型包括两个模型:一是状态方程模型,反映动态系统在输入变量作用下在某时刻所转移到的状态;二是输出或量

实验八MATLAB状态空间分析

实验八 线性系统的状态空间分析 §8.1 用MATLAB 分析状态空间模型 1、状态空间模型的输入 线性定常系统状态空间模型 x Ax Bu y Cx Du =+=+ 将各系数矩阵按常规矩阵形式描述。 [][][]11 121120 10 1;;;n n n nn n n A a a a a a a B b b b C c c c D d ==== 在MATLAB 里,用函数SS()来建立状态空间模型 (,,,)sys ss A B C D = 例8.1 已知某系统微分方程 22d d 375d d y y y u t t ++= 求该系统的状态空间模型。 解:将上述微分方程写成状态空间形式 0173A ??=??--??,01B ??=???? []50C =,0D = 调用MATLAB 函数SS(),执行如下程序 % MATLAB Program example 6.1.m A=[0 1;-7 -3]; B=[0;1]; C=[5 0]; D=0; sys=ss(A,B,C,D) 运行后得到如下结果 a = x1 x2 x1 0 1

x2 -7 -3

b = u1 x1 0 x2 1 c = x1 x2 y1 5 0 d = u1 y1 0 Continuous-time model. 2、状态空间模型与传递函数模型转换 状态空间模型用sys 表示,传递函数模型用G 表示。 G=tf(sys) sys=ss(G) 状态空间表达式向传递函数形式的转换 G=tf(sys) Or [num,den]=ss2tf(A,B,C,D) 多项式模型参数 [num,den]=ss2tf(A,B,C,D,iu) [z,p,k]=ss2zp(A,B,C,D,iu) 零、极点模型参数 iu 用于指定变换所需的输入量,iu 默认为单输入情况。 传递函数向状态空间表达式形式的转换 sys=ss(G) or [A,B,C,D]=tf2ss(num,den) [A,B,C,D]=zp2ss(z,p,k) 例 8.2 11122211220.560.050.03 1.140.2500.1101001x x u x x u y x y x -??????????=+??????????-????????????????=??????? ????? 试用矩阵组[a ,b ,c ,d]表示系统,并求出传递函数。 % MATLAB Program example 6.2.m

状态空间模型

引言 状态空间模型是应用状态空间分析法对动态系统所建立的一种数学模型,它是应用现代控制理论对系统进行分析和综合的基础。状态空间模型由描述系统的动态特性行为的状态方程和描述系统输出变量与状态变量间变换关系的输出方程组成。 在经典控制理论中,采用n阶微分方程作为对控制系统输入量u(t)和输出量y(t)之间的时域描述,或者在零初始条件下,对n阶微分方程进行Laplace 变换,得到传递函数作为对控制系统的频域描述,“传递函数”建立了系统输入量U(s)=L[u(t)]和输出量Y(s)=L[y(t)]之间的关系。传递函数只能描述系统的外部特性,不能完全反映系统内部的动态特征,并且由于只考虑零初始条件,难以反映系统非零初始条件对系统的影响。 现代控制理论是建立在“状态空间”基础上的控制系统分析和设计理论,它用“状态变量”来刻画系统的内部特征,用“一阶微分方程组”来描述系统的动态特性。系统的状态空间模型描述了系统输入、输出与内部状态之间的关系,揭示了系统内部状态的运动规律,反映了控制系统动态特性的全部信息。 龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。 标准四阶龙格——库塔法的基本思想 龙格和库塔提出了一种间接地运用Taylor公式的方法,即利用y(x)在若干个待定点上的函数值和导数值做出线性组合式,选取适当系数使这个组合式进Taylor展开后与y(xi+1)的Taylor展开式有较多的项达到一致,从而得出较高阶的数值公式,这就是龙格—库塔法的基本思想。 一、实验原理 龙格——库塔法 龙格—库塔法是仿真中应用最广泛的方法。它以泰勒展开公式为基础,用函数f的线性组合代替f的高阶导数项,避免了高阶导数的运算,又提高了精度。泰勒公式的阶次取得越高,龙格—库塔法所得的误差等级越低,精度越高。最常用的是四阶龙格—库塔法,它虽然有一定的时间损耗,但比梯形法要快,而且与

实验四 用MATLAB求解状态空间模型

实验四用MATLAB求解状态空间模型 1、实验设备 MATLAB软件 2、实验目的 ①学习线性定常连续系统的状态空间模型求解、掌握MATLAB中关于求解该模型的主要函数; ②通过编程、上机调试,进行求解。 3、实验原理说明 Matlab提供了非常丰富的线性定常连续系统的状态空间模型求解(即系统运动轨迹的计算)的功能,主要的函数有: 初始状态响应函数initial()、阶跃响应函数step()以及可计算任意输入的系统响应数值计算函数lsim()和符号计算函数sym_lsim()。 数值计算问题可由基本的Matlab函数完成,符号计算问题则需要用到Matlab 的符号工具箱。 4、实验步骤 ①根据所给状态空间模型,依据线性定常连续系统状态方程的解理论,采用MATLAB编程。 ②在MATLAB界面下调试程序,并检查是否运行正确。 习题1:试在Matlab中计算如下系统在[0,5s]的初始状态响应,并求解初始状态响应表达式。 Matlab程序如下:A=[0 1; -2 -3]; B=[]; C=[]; D=[]; 011 232???? == ???? -- ????x x x

x0=[1; 2]; sys=ss(A,B,C,D); [y,t,x]=initial(sys,x0,0:5); plot(t,x) 习题2:试在Matlab 中计算如下系统在[0,10s]内周期为3s 的单位方波输入下的状态响应。并计算该系统的单位阶跃状态响应表达式。 0011232????==????--???? x x x

Matlab程序如下: A=[0 1; -2 -3]; B=[0; 1]; C=[]; D=[]; x0=[1; 2]; sys=ss(A,B,C,D); [u t]=gensig('square',3,10, [y,t,x] = lsim(sys,u,t,x0) plot(t,u,t,x);

相关主题