SS04_病态系统仿真
第四章 病态系统仿真
Overview
病态系统的特点?
病态仿真算法选取?
在Matlab中的实现?
第一节 病态系统
病态(Stiff,刚性)系统:系统中各个环节的时间常数差异巨大,导致积分步长必须限制在最小时间常数的数量级而选取的很小,积分时间长,由于计算的累计舍入误差导致积分的失败。
存在的问题:
仿真步长小:积分步长根据系统的最小时间常数的数量级选取。
仿真时间长:积分时间根据系统的最大时间常数选取
仿真不稳定:由于仿真步数多,累计舍入误差大,仿真容易失败
病态系统定义
病态系统定义:
已知描述动态系统的一阶微分方程组为:
则称系统为病态系统。
引例
已知微分方程:
方程的解析解为:
刚性比为:
A=[-1001,999;999,-1001];S=max(abs(real(eig(A))))/min(abs(real(eig(A))))
S = 1.0000e+003
利用龙格库塔45法、龙格库塔15s法、定长龙格库塔4法分别进行仿真,结果如下:
病态系统的仿真
仿真步长:RK45= 48229,RK15S =59
MyRK4=40001,MyRK4=20001,MyRK4=13334
第二节 线性病态系统仿真
对于线性定常系统,通常可用状态方程描述:
线性病态系统的仿真的方法
增广矩阵法
蛙跳法
2.1 增广矩阵法
将线性定常系统状态空间方程加虚拟采样开关和保持器后离散化可得:
离散化
仿造z域离散化方法
在mT和(m+1)T时刻
一步状态转移
离散化
在mT和(m+1)T之间,假设u(t)不变(零阶保持),则
在mT和(m+1)T之间,假设u(t)三角保持,则
以上两式称为连续系统的等价两式状态模型。
举例
系统如下:
离散化
采用零阶保持器进行离散化
可得离散化模型:
增广矩阵法
根据离散化的系统状态方程求取系统的解,误差主要包括
零阶保持器误差(当系统有多个环节时,误差累计)
数值计算eAT的误差。
将输入信号u(t),增广为系统的变量,将原状态方程变为齐次方程,可消除第一种误差。
增广矩阵法
显然,增广矩阵法德关键是:如何将u(t)增广为状态变量?
增广矩阵的求法1
例如
缺点:G为t的函数,A的增广矩阵为时变阵,阶次扩展为n+2
增广矩阵的求法2
A的增广矩阵为3*3的线性方阵,阶次扩展为n+3
2.2 矩阵指数eAT的数值计算
采用增广矩阵法消除了离散相似法的零阶保持器误差,另外一个误差是指数矩阵的计算。
数值计算的精度决定了仿真的精度,通常有多种方法计算矩阵指数,下面介绍常见的方法:
泰勒级数
乘方缩方法
派德逼近法*
2.2.1 泰勒展开法
利用泰勒级数展开的方法求取eAT 的值。
指数矩阵的迭代算法
根据前面的分析,指数矩阵eAT可以采用如下的算法
选取初始的级数阶次L
计算有限和M,以及余项R
求
判断 是否满足要求?
满足要求,计算完毕
否则重复2 ,继续迭代。
对于离散状态空间方程
的求法
利用前面的算法可以同时计算
2.2.2 乘方缩方法
对于:
乘方缩方法被公认为计算级数和的一种有效方法。
乘方缩方法的计算步骤
计算步骤如下:
乘方缩方法的计算步骤
计算步骤如下:
乘方缩方法的计算实例
仿真对比实例(熊光楞,数字仿真算法与软件,P98)
采用RK-4直接计算,精度10-6,取T=0.002s,计算步数2000,时间46.86(PDP-11/23)
采用变步长RKM-4,计算步数1253,时间46.64
采用缩方乘方法,T=0.005s,m=4,计算步数820次,计算时间14.66s,减少为原来的1/4左右。
乘方缩方法的计算实例
对该例,采用Matlab仿真分析
模型文件:mdex04_1.m
function dx=mdex04_1(t,x)
dx = [0*x(1)-1000*x(2)+1000;
1*x(1)-1000*x(2);
];
end
测试文件:ex04_1.m
tic;[t,y]=ode45(@mdex04_1,[0,20],[0;1]);i=toc;
subplot(2,1,1);plot(t,y);title(i);grid
tic;[t,y]=ode15s(@mdex04_1,[0,20],[0;1]);i=toc;
subplot(2,1,2);plot(t,y);title(i);grid
仿真结果
2.2.3 蛙跳法
算法步骤:
利用增广矩阵法将系统状态方程变成齐次方程。
利用pade表达式计算增广状态转