当前位置:文档之家› 连续系统数字仿真数值积分法

连续系统数字仿真数值积分法


main() { float x11,x21,x31,x41,x10,x20,x30,x40,R; int i; x10=0;x20=0;x30=0;x40=0; outputy[0][0]=0; ST=15;DT=0.005; LP=ST/DT;VN=1; R=10;




(4-7)
简记为: X(k+1)= X(k)+Te(k) (4-8) 式(4-8)被称为欧拉公式。欧拉公式可以从 图4.2的几何图形中得到解释。 有了式(4-8),就很容易求出系统式(4-1)、 式(4-2)的差分方程 X(k+1)= (I+AT)X(k)+TBU(k) (4-9) Y(k+1)= CX(k+1)+DU(k+1) (4-10)
0 0 1 1 1 A 0 0.5 0.5 1 1 0 0.1 0.1 1 B 0 0

X(k+1)= (I+AT)*X(k)+T*B*R(k)
x1(k 1) x1(k ) T * x3(k ) T * R (k ) T T x 2(k 1) x1(k ) (1 ) x 2( k ) 0 .5 0.5 T T x3(k 1) x 2(k ) (1 ) x3(k ) 0.1 0 .1 y (k 1) x3(k 1)

main() { float x11,x21,x31,x10,x20,x30,R; int i; x10=0;x20=0;x30=0;outputy[0][0]=0; ST=10;DT=0.005; LP=ST/DT;VN=1;R=20; for (i=1;i<=LP;i++) { x11=x10-DT*x30+DT*R; x21=DT/0.5*x10+(1-DT/0.5)*x20; x31=DT/0.1*x20+(1-DT/0.1)*x30; outputy[0][i]=x31; x10=x11;x20=x21;x30=x31; } dispcurve(); } 程序为llx56.c


例1: 某控制系统如图所示,输入为R=10阶跃函数, 初始条件为0,试用欧拉法求输出仿真曲线。
e1 R x 4 1 4 1 x x1 e1 10 10 1 4 4 1 x x1 x4 R 10 10 10 2 e 2 x1 e1 x 2 x1 x 4 R x 1 1 3 x x3 x2 0 .5 0 .5 1 1 4 x x4 x3 0 .1 0 .1 y x4


例题:某控制系统如图所示,输入为 U=10的阶跃函数,初始条件为0,试用四阶龙 格-库塔法求输出仿真曲线。
e U x3 1 e x 1 U x3 x 1 1 2 x x2 x1 0.5 0.5 1 1 3 x x3 x2 0.1 0.1 y x3
#include <stdio.h> /* 头文件声明*/ #include <stdlib.h> #include <math.h> #include <string.h> #include <graphics.h> const VN=2; float outputy[2][500],ST,DT; int LP,i,j; float x11,x21,x10,x20,e10,e20,e11,e21,y1,y2; float u1,u2; void dispcurve(); /* 画图子程序*/
1 10 1 A 0 0 4 10 1 B 0 0
0 0 1 0. 5 0
0 0 1 0 .5 1 0 .1
4 10 1 0 1 0 .1
X(k+1)= (I+AT)*X(k)+T*B*R(k)
0.1 T DT 0.002 0.01 0.005 50 10 ST (5 20) * 0.5 2.5 10 10

仿真程序清单如下: #include <stdio.h> /*函数头文件声明 */ #include <stdlib.h> #include <math.h> #include <string.h> #include <graphics.h> float outputy[1][5501],ST,DT; int LP,VN; void dispcurve();


for (i=1;i<=LP;i++) { x11=(1-DT/10)*x10-4*DT/10*x40+4/10*DT*R; x21=DT*x10+x20-DT*x40+DT*R; x31=DT/0.5*x20+(1-DT/0.5)*x30; x41=DT/0.1*x30+(1-DT/0.1)*x40; outputy[0][i]=x41; x10=x11;x20=x21;x30=x31;x40=x41; } dispcurve();


(4-20)

式(4-30)是四阶龙格-库塔公式在输入为阶跃或斜坡函 数时的总体表示。仿真前,先求出方程的系数,仿真时就只 有简单的代数运算了,这样仿真的速度要比用分离公式的速 度快。
非常有趣的是式(4-30)与式(3-51)完全相同。由此说明, 当系统的输入为阶跃或斜坡函数时,四阶龙格-库塔公式即 是把离散-再现环节加在系统的入口处,使用三角保持器, 取eAt的定义式到t的4次项所得到的差分方程。由此可见,使 用三角保持器比使用四阶龙格-库塔公式要精确。同理也可 证明,取eAt的定义式到t的2次项,所得到的差分方程即是梯 形公式,取eAt的定义式到t的1次项,所得到的差分方程即是 欧拉公式。
Байду номын сангаас



}


当DT<0.2时,系统输出曲线稳定。
当DT>=0.2时,系统输出曲线振荡发散。

程序为llx57.c

例题2:某控制系统如图所示,输入为R=20阶跃函数, 初始条件为0,试用欧拉法求输出仿真曲线。
e R x3 1 e x 1 R x3 x 1 1 2 x x2 x1 0.5 0.5 1 1 3 x x3 x2 0.1 0.1 y x3






main() { x10=0;x20=0; outputy[0][0]=0; outputy[1][0]=0; u1=1;u2=1; y1=1;y2=1; DT=0.5; ST=100; LP=ST/DT;





for (i=1;i<=LP;i++) { e10 =-0.12771*x10+0.04233*x20+12.771*u1-0.04235*u2; e20 =0.01262*x10-0.08533*x20-1.262*u1+0.08534*u2; e11=-0.12771*(x10+DT*e10)+0.04233*(x20+DT*e20); e11=e11+12.771*u1-0.04235*u2; e21=0.01262*(x10+DT*e10)-0.08533*(x20+DT*e20); e21=e21-1.262*u1+0.08534*u2; x11=x10+DT*e10/2.0+DT*e11/2.0; x21=x20+DT*e20/2.0+DT*e21/2.0; y1=0.01*x11; y2=x21; outputy[0][i]=y1; outputy[1][i]=y2; x10=x11;x20=x21; } dispcurve(); }
第4章 连续系统的数 字仿真-数值积分法



第3章从仿真原理方面讨论了连续系统的仿真方 法。本章将从构造积分器的角度再对仿真方法做进 一步的讨论。 4.1 欧拉法 数值积分法是把微分方程化成积分运算,再进 一步化成代数运算的过程,主要解决如何构造一个 积分器,然后求出积分器的差分方程的问题。有了 积分器就能很容易地对系统进行仿真。 数值积分法最初是从数值计算的角度得到的。 但是为了和第3章所讨论的方法统一起来,我们用插 入离散-再现环节的方法,以状态空间描述为基础, 推出线性系统数值积分法的仿真模型。

4.2 梯形法 为了提高仿真精度,离散-再现环节采取图4.3 的形式。 (4-11)


X (k 1) X (k )
T [e(k ) e(k 1)] 2
(4-12)
式(4-12)称为梯形公式,其几何解释如图4.4所示。

[例4.1] 已知一多变量系统的结构框图如图4.5所示,请 用梯形公式对此系统进行仿真,并输出y1、y2的仿真结果。
0 0 1 0 0 1 1 1 A 0 2 2 0 0.5 0.5 0 10 10 1 1 0 0.1 0.1 1 B 0 0
T X (k 1) X (k ) (e1 2e2 2e3 e4 ) 6 e1 AX (k ) BU (k ) T 1 e2 A[ X (k ) e1] BU (k ) 2 2 T 1 e3 A[ X (k ) e2] BU (k ) 2 2 e4 A[ X (k ) Te3] BU (k 1)
相关主题