数值积分法仿真
连续系统数值积分法仿真Matlab编程公开课一等奖优质课大赛微课获奖课件

第2页2
function [t,y]=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,InteMethod,StateModel,OutputFile, ControlFile) t=[tstart:h:tstop];%t数一个行序列 cntt=size(t,2);%返回列数 y=zeros(cnty,cntt);%结构一个空矩阵,用来存储结果 y0=eval([OutputFile,'(tstart,x0,u0)']);%计算初始输出 y(:,1)=y0’;%将cury作为输出第1列 curx=x0; %当前一步x curu=u0; %当前一步u cury=y0; %当前一步y for i=1:1:cntt-1
第161页6
2. 模型描述函数结构
(1)状态方程
function derX=sat_StateEqu(curt,curx,curu) G=401408; derX(1)=curx(3); derX(2)=curx(4); derX(3)=-G/(curx(1)*curx(1))+curx(1)*curx(4)*curx(4); derX(4)=-2*curx(3)*curx(4)/curx(1); derX=derX’;%转换为列向量 (2)输出方程
(3)系统控制计算函数w_SysControl
function ControlU=w_SysControl(curt,h,curx,curu,cury)
% ControlU=w_sysControl(curt,h,curx,curu,cury)
% 函数功效: 计算系统控制,如u=PID(t,curx,cury)
第8页8
(2)系统输出函数w_SysOutput
第3-1章 连续系统数值积分法仿真Matlab编程

函数w_DigiInteSimu和w_StepIntegral构造了一个数值积分法 仿真的框架,并不涉及具体的系统。
具体的系统由StateModel,ControlFile,OutputFile参个参数决定, 实际上就是三个函数文件名,这三个函数输入输出参数必须遵循特定 的格式,在准备好由这3个函数描述的系统后,调用w_DigiInteSimu 即可进行仿真。 还需要一个调用w_DigiInteSimu进行仿真的程序,它指定模型文 件,指定初始参数,并且对仿真结果绘图。
2
function [t,y]=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,InteMethod,StateModel,OutputFile, ControlFile) t=[tstart:h:tstop];%t数一个行序列 cntt=size(t,2);%返回列数 y=zeros(cnty,cntt);%构造一个空矩阵,用来存储结果 y0=eval([OutputFile,'(tstart,x0,u0)']);%计算初始输出 y(:,1)=y0’;%将cury作为输出的第1列 curx=x0; %当前一步的x curu=u0; %当前一步的u cury=y0; %当前一步的y for i=1:1:cntt-1 curu=eval([ControlFile,'(t(i),h,curx,curu,cury)']);%计算控制时传递的参数:当前 时间,步长,当前状态和输出 curx=w_StepIntegral(t(i),h,curx,curu,InteMethod,StateModel);%单步积分运算 cury=eval([OutputFile,'(t(i),curx,curu)']);%计算输出 y(:,i+1)=cury‘;%将输出加入到输出序列里 end
实验:控制系统数字仿真之数值积分法

实验:控制系统数字仿真之数值积分法实验目的:学会并掌握数值积分法的基本原理和方法,了解欧拉法,梯型法,龙格一库塔法的区别,并熟练地使用这些方法。
观察并分析整体离散法、分环节离散法、欧拉法、梯形法、龙格•库塔法这几种方法原理上的差别,分析他们各自的优缺点。
实验原理:欧拉法:欧拉法是最简单的单步法,它是一阶的,精度较差。
但由于公式简单,计算方便,也易于理解,所以在讨论微分方程初值问题的数值解时通常先讨论欧拉法。
梯形法:梯形法与欧拉法相比,梯形法的e要比欧拉法的e更接近实际值,它舍弃的部分更少,它在每一步中用了两个点的输入,使得计算更加精确。
龙格•库塔法:龙格一库塔法是采用间接利用台劳展开式的思路,即用在n 个点上的函数值的线性组合來代替的导数,然后按台劳展开式确定其中的系数, 以提高算法的阶数。
这样既能避免计算函数的导数,同时乂保证了计算精度。
由于龙格薦法具有许务优点,故在许IM:包中,它是•个最垄本的算法之一。
实验过程:分环节离散法得出的响应曲线:整体离散法得出的响应曲线:用一阶欧拉法得出的系统响应曲线:欧拉法是求出当前系统的斜率(变化规律),假设这个变化规律在下一次变化前不改变。
那么系统下一次值就能够通过4 .当前值2.斜率3.步长来确定。
比如说系统当前值x (t),斜率x ' (t),仿真步长dt。
那么x (t+dt) =x (t) +x' (t) *dt程序代码:clc; close all; clear all;sampleTime = 0・l;simuTime = 2000;t=sampleTime:sampleTime:simuTime;K=1・2; n=3; T=20;[kp,ki]=PID_Gain(l・ 20z3, 0);x=zeros(l r 4);fori=l:fix(simuTime/sampleTime)u(i)=l;endfori=l:fix(simuTime/sampleTime)e=ST_RK_l(X/ u(i)f kp r ki r T z K, n);x=xfe*sampleTime;y (i)=x(4);endplot (t r y);匸ext=Tvaiuel(y,sampleTime);legend (text);自程序ST_RK_1代码:function E=ST_RK_1(x r u f kp f ki z T r K z n) E(l) = (u-x(4))*ki;E(2)=(x(l)+kp*E(l)/ki)*K/T-x(2)/T;E (3)=x(2)/T-x(3)/T;E(4)=x(3)/T-x(4)/T;end用梯形法得出系统响应曲线:X = e(r)e[(kH)T]e(kT)牙[e(灯)+ e[伙+ 1)门]X(kT) kT (k+l)T 上若采用欧拉法,误差为红色曲线围成的面积,而如果用梯形法,误差减少为蓝色曲线闱成的面积。
实验一 面向微分方程的数值积分法仿真

实验一面向微分方程的数值积分法仿真一、实验目的1.掌握数值积分法的基本概念、原理及应用;2.用龙格-库塔法解算微分方程,增加编写仿真程序的能力; 3.分析数值积分算法的计算步长与计算精度、速度、稳定性的关系; 4. 对数值算法中的“病态问题”进行研究。
二、实验内容1、已知系统微分方程及初值条件,(0)1yt y y =+= 取步长0.1h =,试分别用欧拉方程法和RK4法求2t h =时的y 值,并将求得的值与解析解()21t y t e t =--比较(将三个解绘于同一坐标中,且用数值进行比较),说明造成差异的原因。
(①编程完成;②选用MATLAB ode 函数完成。
) 程序代码如下:t0=0; tf=2; h=0.1; y1=1; y2=1; y3=1; t1=0; t2=0; t3=0n=round(tf-t0)/h; for i=1:ny1(i+1)=y1(i)+h*(2*h+y1(i)); t1=[t1,t1(i)+h]; end for i=1:nk1=y2(i)+t2(i);k2=y2(i)+h*k1/2+t2(i)+h/2; k3=y2(i)+h*k2/2+t2(i)+h/2; k4=y2(i)+h*k3+t2(i)+h;y2(i+1)=y2(i)+h*(k1+2*k2+2*k3+k4)/6; t2=[t2,t2(i)+h]; end for i=1:ny3(i+1)=2*exp(t3(i))-t3(i)-1; t3=[t3,t3(i)+h];endplot(t1,y1,'r',t2,y2,'g',t3,y3,'k') 实验结果如下;00.51 1.52 2.524681012分析:红线为用欧拉法得到的结果,绿线为用四阶龙格—库塔法得到的结果,蓝线为根据解析方程得到的结果。
其差异原因主要有两个:1、二者的方法不同,欧拉法是根据一阶微分方程计算得到的,龙格—库塔法是根据四阶微分方程得到的;2、由于步长取为0.1,所以得到的图像与解析解之间存在差异,若将步长取小,则得到的解将更靠近解析解。
实验一面向方程的数值积分方法仿真(线性定常系统)

实验一:面向方程的数值积分方法仿真(线性定常系统)1. 实验目的:加深理解四阶龙格--库塔法的原理及其稳定性。
2. 实验内容:对下列系统进行仿真(1) 线性定常系统[]⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡321001600032100300110000110321...x x x y u x x x x x x , 其初值为:)]2(1)(1[)(000)0(3)0(2)0(1--⨯=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡t t t t u x x x (2) 非线性系统⎪⎩⎪⎨⎧+-=-=)()()()()()()()(t y t bx t sy dtt dy t y t ax t rx dt t dx ① r=0.001,a =2*104,s=0.015, b =10 - 4;x(0)=1200,y(0)=600② r=0.001,a =2*10 - 6,s=0.01, b =10 - 6;x(0)=12000,y(0)=6003. 实验要求:(1) 为保证稳定性,分析系统(1)的最大仿真步长(方法自选,保留两位有效数字);(2) 设计Matlab 或 C 程序,用四阶龙格库塔法进行仿真计算,改变参数及仿真步长,观察实验结果,寻找最适宜的仿真步长和临界仿真步长。
4. 实验报告:(1) 实验所用程序清单;(2) 实验结果及分析。
注:实验报告可以采用电子文档(标明图号)+书面形式,其中书面报告内容为:(1) 系统(1)最大步长的理论分析;(2) 仿真结果分析;书面报告中不必列出实验题目与结果图(以下同)。
实验二:面向结构图的线性系统仿真1. 实验目的学习基于Simulink 面向结构图进行数字仿真的原理及方法(请使用Matlab6.1附带的Simulink 版本)。
2. 实验内容(1) 用Simulink 实现以下的仿真系统结构图(2) 当r(t)=1(t)时,对系统进行仿真;(3) 当r(t)=⎩⎨⎧>≤s t t s t t 5.1),(15.1,5时,对系统进行仿真。
实验一 数值积分算法仿真实验

3
计算机仿真输出图像 h=0.05
h=5.00
h=10.00
4
(3) 四阶龙—库法 数值积分算法如下: 数学模型为 设
初始值为 0;
计算机仿真程序 x1=0; x2=0; t0=0;tf=200;h=0.8; y=0; t=t0; n=round((tf-t0)/h); for i=1:n k11=x2; k21=1-x1-0.1*x2; k12=x2+h/2*k21; k22=1-(x1+h/2*k11)-0.1*(x2+h/2*k21); k13=x2+h/2*k22; k23=1-(x1+h/2*k12)-0.1*(x2+h/2*k22); k14=x2+h*k23; k24=1-(x1+h*k13)-0.1*(x2+h*k23); x1=x1+h/6*(k11+2*k12+2*k13+k14); x2=x2+h/6*(k21+2*k22+2*k23+k24); y=[y,x1]; t=[t,t(i)+h]; end [t',y'] plot(t,y) grid gtext('RK-4') gtext('h=0.8')
5
计算机仿真输出图像 h=0.80
h=5.00
h=10.00
6
实验结论
1、 2、 3、 4、 数值积分算法对仿真建模有三个基本要求:稳定性、准确性、快速性; 随着步距 h 的增大,仿真结果准确性逐渐降低,但速度也随之降低; 在三次仿真中, 四阶龙-库法精度最高, 可以看出, 计算量增加精度提高; 在不同的仿真计算中,要综合考虑要求精度及其运行速度选择合适的仿 真方法及步距,在既保证精度的情况下提高计算速度。
计算机仿真数值积分法系统仿真PPT学习教案

y(t n ) 计算
2.1 概述
y(t n1 ) 需要的时间为Tn,若
hn tn1 tn ,
3 . 数 值 积分 算法:
y f (y ,u,t )
对
, 已 知 系 统 变量
求
y
随 时 间 变 化 的过程
y(t ) --初值问题
y 的初始条件
y(t0 ) y0
第5页/共65页
2.1 概述
计 算 过 程 : 由初始 点
2.1 概述
第1页/共65页
1. 相 似 原 理 设系统模型为
y f (y ,u,t )
其 中 u (t)为输 入变量 ,y(t)为 系统变 量;令 仿真时 时间隔 为h, 离散化 后的输 入变量 为
uˆ(t ) n
系统变量为
yˆ (tn )
其中
tn
表示
t=nh
如果
uˆ(tn ) u(tn )
绝 对 误 差 准 则:
ey (tn ) yˆ(tn ) y(tn )
相 对 误 差 准 则:
ey (tn )
yˆ(tn ) y(tn ) yˆ(tn )
其 中 规 定 精 度的 误差量
第4页/共65页
( 3 ) 快 速性 :若第 n步计 算所对 应的系 统时间 间隔为
计算机由
T n =h n 称 为实时 仿真 T n h n 称为 超实时 仿真 T n h n 称 为亚实 时仿真
例 : 就 初 值 问题
考 察欧 拉显式 格式的 收敛性 。
y yy(ຫໍສະໝຸດ ) y0解:该问题的精确解为
欧拉公式 为
y( x) y0e x yi1 yi h yi (1 h) yi
x = x = i h 对任意固定的
仿真_3_数值积分法

f(t)
fn+1
f(t)
误差
fn
左矩形近似
tn
tn+1
t
t
f(t)
f(t)
t
t
二、梯形法
Euler法的计算精度较差,如果改用梯形面 积代替每个步距的曲线面积,就可提高精度。
精确积分应为曲边梯形的面积: tn1 f (t, x,u(t ))dt
现用直边梯形的面积来近似: tn
tn 1
f(t,x ,u (t)d ) t2 1hftn ,x n ,u nftn 1 ,x n 1 ,u n 1
最常用的数值解法有:
欧拉法、梯形法、Adams、Runge—Kutta法。
第一节 数值积分法的基本原理
以首一先阶把连需续仿系真统研为究例的,系微统分表方示程成及一初阶值微如分下方:程组或
状态方程的形式。 x(t)f(t,x,u(t)) x(t0)x0t
连续x解 (t)x(为 t0): f(t,x,u(t)d ) t
取切线上 t n 1 处的值来近似 x(tn1)
x ( t n 1 ) x ( t n ) h ( t n 1 f , x n 1 , u n 1 )
也能得到: xn1xnhn f1后向欧拉法
欧拉法(切线推导)的几何意义
欧拉法实际计算时的几何意义
例:设系统方程 y (t)y2(t)0,y(0)1
后向 yn欧 yn 1h 拉 (tfn,yn)
前向 yny 欧 n 1h(拉 tfn 1,yn 1)
后向 yn欧 yn 1h 拉 (tfn,yn)
f(t)
fn+1
误差
fn
误差
f(t)
fn+1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y (0) k 1
yk
hf
(tk ,
yk )
yk
1
yk
1 2
h[
f
(t
k
,
y
k
)
f (tk 1 , y (0) k 1 )]
龙格-库塔法的基本原理
在连续系统仿真中,主要的数值计算
工作是求解一阶微分方程:dy
dt
f
(t,
y)
若已知y的初值y0,再按离散化原理,对上
式我们可以写成:y(t ) k1
y(tk)
tk1
tk
f
(t,
y)dt
再对上式的右端函数f(t,y)(为任意非线性函 数)在tk附近展开成泰勒级数,依照展开的 阶次不同我们就构成了不同的龙格-库塔公 式。
二阶龙格—库塔公式,记在tk时刻的状态变量为yk,并 定义两个附加向量型变量 :
yk1 k1 f
yk
h 2
(k1
(tk , yk )
2. 仿真程序流程框图
开始
输入系统阶次、计算步长、 阶跃函数幅值
输入传递函数分子、分母系数
求状态方程系数矩阵 A,B,C
求四阶龙格库塔法各系数 Ki,j
计算状态变量
计算输出值
N
时间到?
Y 输出仿真结果
结束
MATLAB提供了两个常微分方程求解的函数ode23()、ode45(),分别采用了二阶三级的 RKF方法和四阶五级的RKF法,并采用自适应变步长的求解方法,即当解的变化较慢 时采用较大的计算步长,从而使得计算速度很快;当解的变化较快时,步长会自动变 小,从而使计算精度提高。
允许
误差
E k
步长控制
改变下一步 计算步长
误差估计
积分算法
本步 计算
2、误差估计
• 通常采用的方法是设法找到一个比目前使用的 龙格-库塔公式低一阶的R-K公式,将两式计算
结果之差视为误差估计值。
• 例如:现以RKM4-5为计算公式
y k 1
y k
h 6
(k1
4k 4
k
)
5
k1
f
(tk
,
y) k
6.1.2 离散化原理
在数字计算机上对连续系统进行仿真时,首先遇到的问题是,数字 计算机的数值及时间都是离散的(计算精度,指令执行时间), 而被仿真系统的数值和时间是连续的,后者如何用前者来实现?
设系统模型为:y f ( y,u,t) ,其中u(t)为输入变量,y(t)为系统状态变 量 t似=k。原h。令理如仿。果真时u’(间tk)间≈隔u(为tk)h, y,离’(t散k) 化≈ y后(t的k),输则入认变为量两为模u’型(tk等), 其价中,t称k表为示相
6.2.1 仿真过程的三类误差 通常,系统仿真的最终精度与现场原始数据的采集、使用的 计算机设备档次、仿真计算时的数值积分公式等均有相应的 关系,可以分为以下3种情况。 1. 初始误差
在对系统仿真时,要采集现场的原始数据,而计算时要提供 初始条件,这样由于数据的采集不一定很准,会造成仿真过 程中产生一定的误差,此类误差称为初始误差。 要消除或减 小初始误差,就应对现场数据进行准确的检测,也可以多次 采集,以其平均值作为参考初始数据。
控制系统的数学模型经过合理的近似及简化,大多数建立为常微分方程 的表达形式。由于数学计算的难度和实际系统的复杂程度,在实际中遇到 的大部分微分方程难以得到其解析解,通常都是通过数字计算机采用数值 计算的方法来求取其数值解。在高级仿真软件(例如MATLAB)环境下, 已提供了功能十分强大、且能保证相应精度的数值求解的功能函数或程序 段,使用者仅需要按规定的语言规格调用即可,而无需从数值算法的底层 考虑其编程实现过程。
第6章 数值积分法仿真
本章主要教学内容
本章主要介绍控制系统数学模型的相关知识,通 过本章的学习,读者应掌握以下内容:
➢求解常微分方程数值解的一般方法 ➢数值积分法的基本概念及其常用方法 ➢以系统微分方程或传递函数作为数学模型的仿真过程及程序 设计方法 ➢以系统动态结构图作为数学模型的仿真过程及程序设计方法 ➢仿真步长的选择与系统仿真精度和稳定性的对应关系 ➢快速仿真算法的概念、特点及其应用
6.2.2 稳定性分析
由于系统仿真时存在误差,对仿真结果产生会影响。若计 算结果对系统仿真的计算误差反应不敏感,那么称之为算法稳 定,否则称算法不稳定。对于不稳定的算法,误差会不断积累, 最终可能导致仿真计算达不到系统要求而失败。
1. 系统的稳定性与仿真步长的关系
一个数值解是否稳定,取决于该系统微分方程的特征根是 否满足稳定性要求,而不同的数值积分公式具有不同的稳定区 域,在仿真时要保证稳定就要合理选择仿真步长,使微分方程 的解处于稳定区域之中。
k2)
k2
f
(tk
h,
yk
hk1 )
四阶龙格—库塔公式 :
y
k
1
yk
h 6
(k1
2k2
2k3
k4 )
k1 f (tk , yk )
k 2
f (tk
h 2
,
yk
h 2
k1
)
k
3
f (tk
h 2
,
yk
h 2
k2 )
k4 f (tk h, yk hk3 )
不论几阶RK法,它们的计算公式都是由两部分组成,即上一步的结果yk和 步长h乖以tk至tk+1时间间隔间各外推点的导数ki的加权平均和
2. 舍入误差
目前,系统仿真大都采用计算机程序处理和数 值计算,由于计算机的字长有限,不同档次的计 算机其计算结果的有效值不一致,导致仿真过程 出现舍入误差。 一般情况下,要降低舍入误差应 选择挡次高些的计算机,其字长越长,仿真数值 结果尾数的舍入误差就越小。
3. 截断误差
当仿真步距确定后,采用的数值积分公式的阶 次将导致系统仿真时产生截断误差,阶次越高, 截断误差越小。通常仿真时多采用四阶龙格—库 塔法,其原因就是这种计算公式的截断误差较小。
6.1 数值积分法
6.1.1 概述
数字仿真模型、算法及仿真工具
控制系统的数字仿真是利用数字计算机作为仿真工具,采用数学上的各 种数值算法求解控制系统运动的微分方程,得到被控物理量的运动规律。 通常,计算机模拟被控对象是用一定的仿真算法来实现被控对象的运动规 律,这是基于被控对象的数学模型来完成的。
微分方程数值解的方法主要是数值积分法。 对于形如 y f (y,u,t) 的系统,已知系统状态变量y的初值y0,现
要计算y随时间变化的过程y(t),对微分方程的积分可以写作: y t
y(t) f (t, y)dt t 0
0
右图所示曲线下的面积就 是y(t),由于难以得到积分 的数值表达式,所以采用 近似的方法,常用有三种形式:
3、最优步长法
• 基本方法是根据本步的误差估计来近似地确定下一步可能的最大
步1)给长定,允步许骤的如相下对: 误差ε0,设本步步长为hk,本步相对估计误差为ek,
e E y ek由下式求得:
/(| | 1)
k
k
k
E h 若采用的RK公式是m阶,则上式中的Ek可以表示为
( ) m
k
k
e t h y 通常取ζ=tk,则有:
在仿真计算中,h值不宜选的太小,因为这样会加大计算量; 也不能选的过大,否则会导致仿真系统不稳定或误差积累过大。
通常掌握的原则是: 在保证计算稳定性及计算精度的要求下,尽可能选较大的 仿真步长。对于一般工程系统的仿真处理,采用四阶龙格—库 塔法居多 。
龙格-库塔法的步长控制策略
• 控制策略由误差估计和步长控制两方面 组成,其基本思想如下图所示:
Syntax
[T,Y] = solver(odefun,tspan,y0)
[T,Y] = solver(odefun,tspan,y0,options)
where solver is one of ode45, ode23, ode113, ode15s, ode23s, ode23t, or ode23tb. ArgumentsodefunA function that evaluates the right-hand side of the differential equations. All solvers solve systems of equations in the form or problems that involve a mass matrix, . The ode23s solver can solve only equations with constant mass matrices. ode15s and ode23t can solve problems with a mass matrix that is singular, i.e., differential-algebraic equations (DAEs). tspanA vector specifying the interval of integration, [t0,tf]. To obtain solutions at specific times (all increasing or all decreasing), use tspan = [t0,t1,...,tf].y0A vector of initial conditions.optionsOptional integration argument created using the odeset function. See odeset for details.p1,p2...Optional parameters that the solver passes to odefun and all the functions specified in options