数值积分法仿真

合集下载

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

连续系统数值积分法仿真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编程

第3-1章 连续系统数值积分法仿真Matlab编程
5
函数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学习教案

计算机仿真数值积分法系统仿真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_数值积分法

仿真_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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档