实验一 面向微分方程的数值积分法仿真
实验:控制系统数字仿真之数值积分法

实验:控制系统数字仿真之数值积分法实验目的:学会并掌握数值积分法的基本原理和方法,了解欧拉法,梯型法,龙格一库塔法的区别,并熟练地使用这些方法。
观察并分析整体离散法、分环节离散法、欧拉法、梯形法、龙格•库塔法这几种方法原理上的差别,分析他们各自的优缺点。
实验原理:欧拉法:欧拉法是最简单的单步法,它是一阶的,精度较差。
但由于公式简单,计算方便,也易于理解,所以在讨论微分方程初值问题的数值解时通常先讨论欧拉法。
梯形法:梯形法与欧拉法相比,梯形法的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 上若采用欧拉法,误差为红色曲线围成的面积,而如果用梯形法,误差减少为蓝色曲线闱成的面积。
第5章 数值积分法仿真讲解

在求解这些微分方程时,最常用、也是最有效的一种 方法就是数值积分法。
5.2 数值积分法仿真的基本原理
对微分方程(5-1)两端同时取积分,可得
t
y(t) y(t0 ) t0 f ( , y)d
t
y(t) y(t0 ) t0 f ( , y)d
当 t tn1 时,上式变为 :
k2
f (tn
h 2
,
yn
h 2
k1
)
其截断误差为:0(h3 )
(5-17)
5.4.3 四阶龙格-库塔方法
4阶龙格-库塔法是一种最常用的方法。其经典表达式为:
yn1
yn
h 6
(k1
2k2
2k3
k4 )
k1 f (tn , yn )
k2
f
(tn
h, 2
1 (h)r
r!
]yn
0(h r 1 )
(5-21)
令: h h
——将其代入上式
得到该式的稳定条件为:
1
1
h
1h 2!
2
1h r!
r
1
( 5-22 )
由此稳定条件,下表给出了各阶龙格-库塔公式的稳定区域。
表5.2 龙格-库塔公式的稳定区域
r
1
h 所在的实稳定区域
分析欧拉法截断误差的思想,同样也适用于其它数值 积分方法。
4、舍入误差 由于计算机的字长有限,数字不能表示得完全精确,
在计算过程中,不可避免地会产生舍入误差。
舍入误差与计算步长成反比。如果计算步长小,计 算次数多,则舍入误差就大。
微分方程数值解法实验报告

微分方程数值解法实验报告2篇微分方程数值解法实验报告(一)在实际科学与工程问题中,我们经常会遇到微分方程的求解。
然而,许多微分方程往往没有解析解,这就需要我们利用数值方法来获得近似解。
本篇实验报告将介绍两种常见的微分方程数值解法:欧拉方法和改进的欧拉方法。
一、欧拉方法欧拉方法是最简单的微分方程数值解法之一。
其基本原理为离散化微分方程,将微分方程中的导数用差商代替。
设要求解的微分方程为dy/dx = f(x, y),步长为h,则可用以下公式进行递推计算:y_{n+1} = y_n +hf(x_n, y_n)二、算法实现为了对欧拉方法进行数值实验,我们以一阶线性常微分方程为例:dy/dx = x - y, y(0) = 1步骤如下:(1)选择合适的步长h和求解区间[a, b],这里我们取h=0.1,[a, b] = [0, 1];(2)初始化y_0 = 1;(3)利用欧拉方法递推计算y_{n+1} = y_n + 0.1(x_n - y_n);(4)重复步骤(3),直到x_n = 1。
三、实验结果与讨论我们通过上述步骤得到了在[0, 1]上的近似解y(x)。
下图展示了欧拉方法求解的结果。
从图中可以看出,欧拉方法得到的近似解与精确解有一定的偏差。
这是因为欧拉方法只是通过递推计算得到的近似解,并没有考虑到更高阶的误差。
所以在需要高精度解时,欧拉方法并不理想。
四、改进的欧拉方法针对欧拉方法的不足,我们可以考虑使用改进的欧拉方法(也称为改进的欧拉-柯西方法)。
它是通过利用前后两个步长欧拉方法得到的结果作为差商的中间项,从而提高了求解精度。
一阶线性常微分方程的改进欧拉方法可以表示为:y_{n+1} = y_n + h(f(x_n, y_n) + f(x_{n+1}, y_n + hf(x_n,y_n)))/2五、算法实现与结果展示将改进的欧拉方法应用于前述的一阶线性常微分方程,我们同样选择h=0.1,[a, b] = [0, 1]。
实验一 面向微分方程的数字仿真 wangxuep

内蒙古科技大学实验报告实验名称:面向微分方程的数字仿真课程名称:计算机仿真技术CAD—基于matlab的控制系统姓名:王雪萍学号: 201102208 日期:2012年4月一 、实验名称Runge-Kutta 法和ode45()函数分别求解下列微分方程组以及高阶微分方程并绘图。
1、321y y y= 312y y y-= 2132y y y-= 在初始条件下:5.0)0( ,5.0)0( ,0)0(321-===y y y ,时间区间]20,0[=t 的离散解。
2、解高阶微分方程组:t y x y x t x 26)3()(2++--= t e x yy x -+-= 初值 4)1(,2)1(==x x 6)1(,7)1(,2)1(==-=yy y 5.11≤≤t 提示:令 x x =1,x x =2,y x =3,y x =4,y x =5,将以上方程化为一阶微分方程组。
二、实验目的1 了解Runge-Kutta 法的特点以及具体实现过程。
2了解ode45函数的应用。
3 应用matlab 软件编写Runge-Kutta 算法程序。
4通过两种方法实验结果来验证自己编写的程序是否正确。
三、实验环境Win7系统、matlab7.1数值计算软件 四、实验内容1 根据Runge-Kutta 算法的特点,设计程序流程如下图(1)所示:图(1)Runge-Kutta算法流程图2 用matlab语言编程Runge-Kutta算法程序以及ode45函数实验程序。
(1)第1题求解:①将微分方程组写成一个M函数。
function dy=test_fun(x,y)dy = zeros(3,1);dy(1) = y(2) * y(3);dy(2) = -y(1) * y(3);dy(3) = -2 * y(1) * y(2);end②通用的runge_kutta1函数。
function [x,y]=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)n=floor((b-a)/h);%求步数x(1)=a;%时间起点y(:,1)=y0;%赋初值,可以是向量,但是要注意维数for ii=1:nx(ii+1)=x(ii)+h;k1=ufunc(x(ii),y(:,ii));k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);k4=ufunc(x(ii)+h,y(:,ii)+h*k3);y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;%按照龙格库塔方法进行数值求解end③在命令窗口输入如下的程序:[T,F] = ode45(@test_fun,[0 20],[0 0.5 -0.5]); subplot(121)plot(T,F)title('ode45函数效果')[T1,F1]=runge_kutta1(@test_fun,[0 0.5 -0.5],0.5,0,20); subplot(122)plot(T1,F1)title('自编的龙格库塔函数')legend('y1','y2','y3')④实验所得到的图形如下图(2)所示:5101520-0.5-0.4-0.3-0.2-0.100.10.20.30.40.5ode45函数效果5101520-0.5-0.4-0.3-0.2-0.100.10.20.30.40.5图(2)第1题的图形 (2)第1题另外一种方法①Runge-Kutta 算法程序如下: Tf=input('请输入仿真时间tf=');h=input('请输入仿真步长h='); y1=0;y2=0.5;y3=-0.5;t=0; y1out=0;y2out=0.5;y3out=-0.5; for i=1:Tf/hk11=y2*y3; k21=-y1*y3; k31=-2*y1*y2;k12=(y2+k21*h/2)*(y3+k31*h/2); k22=-(y1+k11*h/2)*(y3+k31*h/2); k32=-2*(y1+k11*h/2)*(y2+k21*h/2);k13=(y2+k22*h/2)*(y3+k32*h/2);k23=-(y1+k12*h/2)*(y3+k32*h/2);k33=-2*(y1+k12*h/2)*(y2+k22*h/2);k14=(y2+k23*h)*(y3+k33*h);k24=-(y1+k13*h)*(y3+k33*h);k34=-2*(y1+k13*h)*(y2+k23*h);y1=y1+h/6*(k11+2*k12+2*k13+k14);y2=y2+h/6*(k21+2*k22+2*k23+k24);y3=y3+h/6*(k31+2*k32+2*k33+k34);y1out=[y1out;y1];y2out=[y2out;y2];y3out=[y3out;y3];t=[t;t(i)+h];endplot(t,y1out,'-',t,y2out,'-.',t,y3out,'.')gridxlabel('t')ylabel('y1 y2 y3')title('R-T法')legend('y1','y2','y3')运行上述程序后:输入:tf=20,h=0.5后得到图像入下图(3)所示:ty 1 y 2 y 3图(3)龙哥库塔法下的曲线 ②应用ode45函数的程序如下:写一个名为rigid 的M 文件:function dy = rigid(t,y) dy = zeros(3,1); dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -2* y(1) * y(2); end在命令窗口中输入:options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [t,y] = ode45(@rigid,[0 20],[0 0.5 -0.5],options); plot(t,y(:,1),'-',t,y(:,2),'-.',t,y(:,3),'.') gridtitle('ode45法')legend('y1','y2','y3')其图形如下图(4)所示:图(4)ode45法求解曲线(3)第二题求解:对于高价微分方程的求解的问题,将其化为一阶常微分方程组后求解。
实验09 数值微积分与方程数值解(第6章)

实验09 数值微积分与方程数值求解(第6章 MATLAB 数值计算)一、实验目的二、实验内容1. 求函数在指定点的数值导数232()123,1,2,3026x x x f x x xx x==2. 用数值方法求定积分(1) 210I π=⎰的近似值。
程序及运行结果:《数学软件》课内实验王平(2) 2221I dx x π=+⎰程序及运行结果:3. 分别用3种不同的数值方法解线性方程组6525494133422139211x y z u x y z u x y z u x y u +-+=-⎧⎪-+-=⎪⎨++-=⎪⎪-+=⎩ 程序及运行结果:4. 求非齐次线性方程组的通解1234123412342736352249472x x x x x x x x x x x x +++=⎧⎪+++=⎨⎪+++=⎩5. 求代数方程的数值解(1) 3x +sin x -e x =0在x 0=1.5附近的根。
程序及运行结果(提示:要用教材中的函数程序line_solution ):(2) 在给定的初值x 0=1,y 0=1,z 0=1下,求方程组的数值解。
23sin ln 70321050y x y z x z x y z ⎧++-=⎪+-+=⎨⎪++-=⎩6. 求函数在指定区间的极值(1) 3cos log ()xx x x xf x e ++=在(0,1)内的最小值。
(2) 33212112122(,)2410f x x x x x x x x =+-+在[0,0]附近的最小值点和最小值。
7. 求微分方程的数值解,并绘制解的曲线2250(0)0'(0)0xd y dyy dx dx y y ⎧-+=⎪⎪⎪=⎨⎪=⎪⎪⎩程序及运行结果(注意:参数中不能取0,用足够小的正数代替):令y 2=y,y 1=y ',将二阶方程转化为一阶方程组:'112'211251(0)0,(0)0y y y x x y y y y ⎧=-⎪⎪=⎨⎪==⎪⎩8. 求微分方程组的数值解,并绘制解的曲线123213312123'''0.51(0)0,(0)1,(0)1y y y y y y y y y y y y =⎧⎪=-⎪⎨=-⎪⎪===⎩程序及运行结果:三、实验提示四、教程:第6章 MATLAB 数值计算(2/2)6.2 数值微积分 p155 6.2.1 数值微分1. 数值差分与差商对任意函数f(x),假设h>0。
实验一 数值积分算法仿真实验

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 的增大,仿真结果准确性逐渐降低,但速度也随之降低; 在三次仿真中, 四阶龙-库法精度最高, 可以看出, 计算量增加精度提高; 在不同的仿真计算中,要综合考虑要求精度及其运行速度选择合适的仿 真方法及步距,在既保证精度的情况下提高计算速度。
SS03_数值积分法仿真

第二节 单步法
引理:泰勒级数:如果f(x)在x0点处任意阶可导,则 在该邻域内的n阶泰勒公式为:
f ( x) = ∑
n= n =0
N
f ( n ) ( x0 ) ( x − x0 ) n + Rn ( x) n!
f ( N +1) (ξ ) 其中:RN ( x) = ( x − x0 ) N +1 称为拉格朗日余项 ( N + 1)!
y (t )
截断误差 ∝ h 2
dy dt
dy = f ( y, t ) = ym + K ⋅ h K = f ( ym , t m )
t
ym+1 = ym + K ⋅ h K = f ( ym , tm )
t
tm
h
t m +1
tm
h
tm +1
第 11 页
通常设法寻找一个低一阶的龙格-库塔公式,两者的结果之 差可以设为误差。为减少计算量,Ki通常要求公用。 Runge-Kutta-Merson法 (RK34)
K1 = K = 2 K3 = K 4 = K = 5 f ( ym , t m ) h h h f ( y m + K1 , t m + ) 四阶五级公式: ym +1 = ym + (K1 + 4 K 4 + K 5) 3 3 6 h h h f ( y m + ( K1 + K 2 ) , t m + ) ˆ 三阶4级公式:ym +1 = ym + (3K1 - 9 K 3 + 12 K 4) 6 3 6 h h f ( y m + ( K1 + 3 K 3 ) , t m + ) h 8 2 误差 : Em = (2 K1 - 9 K 3 + 8 K 4 - K 5) h 6 f ( y m + ( K1 + 4 K 4 − 3 K 3 ) , t m + h ) 2
实验一 数值积分算法仿真实验

实验一数值积分算法仿真实验数值积分算法是对微积分中每个基本概念的具体应用,它被广泛应用于数学、工程、物理学、计算机科学等领域。
实验一旨在通过仿真实验来理解数值积分的基本原理以及各种算法的优劣。
1. 实验目的通过本实验,我们将探索数值积分算法的基本原理,以及了解求解积分的各种算法的使用方法和适用范围。
具体而言,本实验的目的包括:1. 理解数值积分的基本原理和方法。
2. 掌握数值积分算法的使用方法和步骤。
3. 比较不同积分算法的优缺点,了解它们适用的范围。
2. 实验内容本实验的具体内容包括:1. Simpson 积分算法的仿真实验3. 辛普森—三分积分算法的仿真实验4. 实验结果的分析与比较3. 实验原理在本次实验中,我们将介绍三种数值积分算法,分别是 Simpson 积分算法、梯形积分算法和辛普森-三分积分算法。
Simpson 积分算法也称为复化 Simpson 公式,是一种求解一定区间内函数积分值的数值计算方法。
这种方法的基本思路是将区间内的几何图形近似为二次函数,从而完成积分的近似计算。
具体而言,这种方法是通过将区间内的函数曲线分成若干个小区间,计算每一个小区间内的积分值,最后将这些积分值加起来得到整个区间内的积分值。
Simpson 积分公式如下所示:$I=\frac{h}{3}(f(x_0)+4f(x_1)+2f(x_2)+4f(x_3)+2f(x_4)+...+4f(x_{n-1})+f(x_n))$其中,$n$ 表示小区间的数目,$h$ 表示每个小区间的长度,$f(x_i)$ 表示区间内的函数值。
3.2 梯形积分算法辛普森-三分积分公式如下所示:$I=\frac{2b-a}{6n}(f(a)+f(b)+2\sum_{j=1}^{n/2}f(x_{2j})+4\sum_{j=1}^{n/2-1}f(x _{2j + 1}))$```% Simpson 积分算法function result = simpson(a,b,f,n)h = (b-a)/n;x = a:h:b;y = f(x);result = h/3*(y(1) + 4*sum(y(2:2:n)) + 2*sum(y(3:2:n-1)) + y(n+1));end我们可以通过实验数据来比较不同积分算法的优缺点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一面向微分方程的数值积分法仿真一、实验目的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,所以得到的图像与解析解之间存在差异,若将步长取小,则得到的解将更靠近解析解。
2、已知系统的传递函数为3240.6()102722.06G s s s s =+++ 在单位阶跃输入下,系统响应的解析解为1.88 1.88 6.24() 1.84 4.95 1.50.34t t t y t te e e ---=---试分别用欧拉方程法和RK4法对系统进行仿真(编程完成):1)比较两种数值积分解与解析解得逼近程度;(绘图) 程序代码如下:num=[40.6];den=[1 10 27 22.06]; [a,b,c,d]=tf2ss(num,den);a=[0 1 0; 0 0 1; -22.06 -27 -10]; b=[0;0;1]; c=[40.6 0 0];X1=[0;0;0];t=0;Y1=0; X=0; u=1; Y2=0;Y3=0; X2=[0;0;0]; x=0;h=0.1;t0=0;tf=2;t1=0;t2=0;t3=0;N=(tf-t0)/h;for i=1:Nk1=a*X1+b;k2=b+a*(h*k1/2+X1);k3=b+a*(h*k2/2+X1);k4=b+a*(h*k3+X1);X1=X1+h*(k1+2*k2+2*k3+k4)/6;Y1=[Y1,c*X1];t1=[t1,t1(i)+h];endfor i=1:Nx=X2(:,i)+h*(a*X2(:,i)+b*u);y=c*x;X2=[X2,x];Y2=[Y2,y];t2=[t2,t2(i)+h];endfor i=1:Ny=1.84-4.95*i*exp(-1.88*i)-1.5*exp(-1.88*i)-0.34*exp(-6.24*i); Y3=[Y3,y];t3=[t3,t3(i)+h];endplot(t1,Y1,'r',t2,Y2,'g',t3,Y3,'b')当h=0.01时的结果0.511.522.500.20.40.60.811.21.41.61.82当h=0.01时的结果0.511.522.5分析:这是我得到的结果,发现两个方法得到的结果与实际结果都有较大差距,当是龙格—库塔法更接近实际的结果。
2)改变步长,分析步长对数值解精度的影响;改变步长后,发现只是两根仿真得到的曲线靠近了,但是与实际曲线仍然是差距很大,这是经过仔细的检查和讨论我觉得程序还是对的,不知道错在哪里了。
3)不断加大步长,分析计算稳定性的变化。
当取h=0.5时,得到的结果:00.20.40.60.81 1.2 1.4 1.6 1.82加大步长后结果得到的结果不稳定,不能够很好的对系统进行仿真,另外,由于系统步长选择偏大,根据解析解得到的结果也与实际值有了一定的差距,但是如果步长取得不一样又无法比较。
3、求下图所示系统的阶跃响应()y t 的数值解。
(,1v =,1k =,00t =,10f t =0.25h =)分析k 、v 对系统响应的影响。
(①编程用RK4求解;②Simulink )程序代码如下:k=1;a=conv([1 0 0],conv([0.25 1],[0.25 1])) b=[2*k k] X0=[0 0 0 0];V=1; n=4;T0=0;Tf=10; h=0.25;R=1; b=b/a(1);a=a/a(1);A=a(2: n+1);A=[rot90(rot90(eye(n-1,n)));-fliplr(A)]; B=[zeros(1,n-1),1]'; m1=length(b);C=[fliplr(b),zeros(1,n-m1)]; Ab=A-B*C*V; X=X0';y=0;t=T0; N=round(Tf-T0)/h; for i=1:N k1=Ab*X+B*R;k2=Ab*(X+h*k1/2)+B*R; k3=Ab*(X+h*k2/2)+B*R; k4=Ab*(X+h*k3)+B*R; X=X+h*(k1+2*k2+2*k3+k4)/6;(ry=[y,C*X]; t=[t,t(i)+h]; end [t',y'] plot(t,y)得到结果如下:K=0.5,v=1时的结果如下:0123456789100.511.5K=1,v=1时,0123456789100.20.40.60.811.21.41.6K=1,V=0.5时02468100.511.522.53K=1,v=5时,246810-4-3-2-1012345K=2,v=1时1234567891000.20.40.60.811.21.41.61.82分析:当k 取值增大,v 值不变时,系统输出的波头增多,而且也变陡,稳态精度降低,当k 增加到一定程度时系统便发散了(即不稳定了)。
当v 值增大,k 值不变时,波头也是变多变陡,当v 值增大到一定程度时系统便不稳定了。
②Simulink4、已知系统状态状态方程为[]211920192120,(0)101404040Tx x x --⎡⎤⎢⎥=-=-⎢⎥⎢⎥--⎣⎦采用RK4法,步长分别取0.01,0.04,0.06h =,求系统的零输入响应,并绘图分析各状态变量的响应状态及产生的原因。
(提示:病态系统)程序代码如下:a=[-21 19 -20;19 -21 20;40 -40 -40]; x=[1;0;-1];X=x;t=0; t0=t;tf=2;h=0.01; n=round(tf-t0)/h; for i=1:nx=X(:,i)+h*a*X(:,i); X=[X,x]; t=[t,t(i)+h]; endb=X(1,:);c=X(2,:);d=X(3,:); plot(t,b,'r',t,c,'g',t,d,'b')当h=0.01时得到的结果0.511.522.5-1-0.8-0.6-0.4-0.200.20.40.60.81当h=0.02时得到的结果0.511.522.5-1-0.8-0.6-0.4-0.200.20.40.60.81当h=0.04时得到的结果1.41.51.61.71.81.9-1-0.8-0.6-0.4-0.200.20.40.60.8111分析:如图,当h=0.01时,在t=0.2s 以后系统输出便趋于平稳,当取h=0.02时,系统输出振荡剧烈,趋于稳定的时间也变长,当取h=0.04后,系统输出呈发散振荡形式。
当h=0.06后系统仍然是发散的,即当h 的取值改变时,原先稳定的系统变得不稳定了,这便是病态系统。
但是这个结果与书上的不同。
三、实验报告要求记录完成实验内容所采取的步骤、方法和结果。
回答思考题。
四、预习要求及思考题要求实验前,必须预习实验知识点,按实验内容的要求的确定仿真方案,完成程序设计,以便在实验时进行调试、分析。
思考题:1、在进行仿真计算时,是否选用的数值积分法的阶次越高越好?答:阶次不是越高越好。
(1)阶次越高计算公式也越复杂,每一步需要计算的次数也更多,需要的时间也更长。
(2)每一阶的龙格库塔法都有对应的稳定区域,当hλ(λ为系统的特征方程根)超过稳定区域时,即使阶次高得到的结果也未必是稳定的。
当hλ得值接近稳定边界时,误差也会增大。
2、选用数值积分法进行仿真的原则。
答:(1)精度仿真结果的精度主要受三项误差的影响:1)截断误差:由算法本身的精度阶次所决定。
2)舍入误差:由计算机字长决定。
3)累积误差:由以上两项误差随计算时间长短累积情况决定。
(2)计算速度计算速度取决于所用的数值方法和计算步长。
(3)稳定性数值稳定性主要与计算步长h有关,不同的数值方法对h都有不同的稳定性限制范围,且与被仿真对象的时间常数也有关系。
实验二第一部分面向结构图的数值积分法仿真一、实验目的加深理解连续系统面向结构图仿真的原理及特点,进一步掌握数字积分法解算微分方程的方法,增加编写仿真程序的能力。
二、实验内容1、用面向方框图的数字仿真方法对下列系统进行仿真。
2、求解下图所示系统在f=-1(t)阶跃扰动作用下第④、第⑤环节的动态过程。
分别用面向框图的数值积分法(RK4法)、MATLAB中有关系统建模的命令和Simulink三种方法求解。
第二部分面向结构图的离散相似法仿真一、实验目的1.掌握离散相似法的基本概念和原理;2.典型环节离散系数的求取及差分方程表示;3. 掌握非线性系统的数字仿真方法。
二、实验内容1、已知控制系统结构图如图所示,设输入阶跃函数幅值Y0=10,滞环非线性参数s=1(滞环宽度),请用离散相似法编程和Simulink法对系统进行如下分析:1)不考虑非线性环节影响时,求解y(t)的阶跃响应;2)考虑非线性环节影响,其余参数不变,求解y(t)并与线性情况所得结果进行比较;3)改变的滞环非线性参数s,分析该非线性对系统的影响。