当前位置:文档之家› 实验一 面向微分方程的数值积分法仿真

实验一 面向微分方程的数值积分法仿真

实验一面向微分方程的数值积分法仿真一、实验目的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,分析该非线性对系统的影响。

相关主题