哈工大计算机仿真实验三利用数值积分算法的仿真实验

  • 格式:pdf
  • 大小:458.31 KB
  • 文档页数:10

实验三利用数值积分算法的仿真实验一、实验目的1) 熟悉MATLAB的工作环境;2) 掌握MATLAB的 .M文件编写规则,并在命令窗口调试和运行程序;3) 掌握利用欧拉法、梯形法、二阶显式Adams法及四阶龙格库塔法构建系统仿真模型的方法,并对仿真结果进行分析。

二、实验内容与要求系统电路如图3所示。

电路元件参数:直流电压源,电阻,电感,电容。

电路元件初始值:电感电流,电容电压。

系统输出量为电容电压。

试利用欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法构建系统仿真模型,并求出离散系统的输出量响应曲线。

连续系统输出响应的解析解为:其中,三、实验原理在连续系统的数字仿真算法中,较常用的有欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法等。

欧拉法、梯形法和二阶显式Adams法是利用离散相似原理构造的仿真算法,而显式四阶Runge-Kutta法是利用Taylor级数匹配原理构造的仿真算法。

对于线性系统,其状态方程表达式为:(3-1)式(3-1)中,是系统的n维状态向量,是系统的m维输入向量,是系统的r维输出向量。

A为阶参数矩阵,又称动态矩阵,B为阶输入矩阵,C为阶输出矩阵,D为阶交联矩阵。

利用前向欧拉法构建线性系统的仿真模型为:(3-2)式中,为积分步长,为单位矩阵。

利用后向欧拉法构建线性系统的仿真模型为:(3-3)利用梯形法构建线性系统的仿真模型为:(3-4)利用二阶显式Adams法构建线性系统的仿真模型为:(3-5)式中: (3-6)二阶显式Adams法为多步计算方法,利用多步计算方法对系统进行仿真时,需要与之具有相同计算精度的单步计算方法辅助计算。

二阶显式Adams法的计算精度为二阶,可以采用梯形法或改进的Euler法等辅助计算。

利用改进的Euler法构建线性系统的仿真模型为:(3-7)利用显式四阶Runge-Kutta法构建线性系统的仿真模型为:(3-8)四、实验步骤与方法1. 建立系统数学模型根据图3所示电路,系统状态方程模型:(3-9)式中,状态变量,输出变量,系数矩阵为:,,。

2. 建立系统离散数学模型根据系统状态方程模型,利用式(3-2)~(3-8)给出的欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法的公式,分别构造与连续系统相似的离散系统模型,即系统的差分方程。

该模型是编写计算机仿真程序的基础。

对于图3所示的系统,利用欧拉法构造的系统差分方程具有形式:(3-10)对于前向欧拉法,式(3-10)的系数矩阵为:,,。

对于后向欧拉法,式(3-10)的系数矩阵为:,,。

对于图3所示的系统,利用梯形法构造的系统差分方程具有形式:(3-11)其系数矩阵为:,,。

利用二阶显式Adams法构造与连续系统相似的离散系统模型时,首先选择起步计算方法。

这里选择改进的Euler法。

其离散系统模型为:(3-12)其中,。

由式(3-12)计算出和后,便可以转入由二阶显式Adams法构造的离散系统模型计算,即系统差分方程。

其计算方程为:(3-13)(3-14)其中,。

利用显式四阶Runge-Kutta法构建的图3所示线性系统的离散系统模型为:(3-8)3. 编写Matlab的M文件程序利用欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法建立的离散系统差分方程编写系统仿真程序。

Matlab的M函数编写及运行见附录。

编写的M文件程序应能够满足实验要求。

4. 仿真实验为了比较分析算法特性,如稳定性、精度及误差,与积分步长的关系,应选择一组合理的积分对系统进行仿真实验。

试采用表3-1数据,分别利用欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法对图3电路进行仿真,给出仿真试验曲线及算法误差曲线(与准确解相比)。

从算法的稳定性、精度和算法误差与与积分步长的关系角度,对算法的仿真结果进行对比分析。

表3-1 积分步长的选择仿真时间t=0.01s积分步长/s五、实验报告要求1)给出欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法构建离散系统模型的过程;2)给出系统仿真程序;3)给出仿真试验曲线;4)分析仿真结果,从仿真模型实现的难易性、模型的稳定性、模型的精度等方面,对欧拉法、梯形法、二阶显式Adams法及显式四阶Runge-Kutta法构造的离散系统模型进行对比分析,并给出分析结论。

六、系统仿真程序function []=RLC(R,L,C,U,t,h)R=10;L=0.01;C=1.0e-6;U=1;t=0.01;h = 2.0e-4;m = fix(t/h);n = 2;A = [-R/L -1/L;1/C 0];B = [1/L;0];D = [0 1];E = [1 0;0 1];% 前向欧拉法 %for i=1:1:nx1(1:n,1) = 0;endfor k=1:mx1(1:n,k+1) = x1(1:n,k) + (A*x1(1:n,k)+B)*h;endfor k=1:1:my1(k) = D*x1(1:n,k);end% 后向欧拉法 %x2(1:n,1) = 0;endA1 = inv(E-A*h);for k=1:mx2(1:n,k+1) = A1*(x2(1:n,k) + B*h);endfor k=1:1:my2(k) = D*x2(1:n,k);end% 梯形法 %for i=1:1:nx3(1:n,1) = 0;endA2 = inv(E-A*h/2);for k=1:mx3(1:n,k+1) = A2*( x3(1:n,k) + B*h + A*x3(1:n,k)*h/2);endfor k=1:1:my3(k) = D*x3(1:n,k);end% 二阶显示Adams法 %for i=1:1:nx4(1:n,1) = 0;endfor k=1:mx4(1:n,k+1) = A2*(x4(1:n,k) + B*h + A*x4(1:n,k)*h/2);endfor k=3:mfm1 = 23*(A*x4(1:n,k)+ B);fm2 = -16*(A*x4(1:n,k-1)+ B);fm3 = 5*(A*x4(1:n,k-2)+ B);x4(1:n,k+1) = x4(1:n,k)+(fm1+fm2+fm3)*h/12;endy4(k) = D*x4(1:n,k);end% 四阶Runge-Kutta法 %for i=1:1:n % 状态变量初值x5(1:n,1) = 0;endfor k=1:mx5(1:n,k+1) = A2*( x5(1:n,k) + B*h + A*x5(1:n,k)*h/2);endfor k=1:1:mk1=A*x5(1:n,k+1);k2=A*(x5(1:n,k+1)+h*k1/2);k3=A*(x5(1:n,k+1)+h*k2/2);k4=A*(x5(1:n,k+1)+h*k3);x5(1:n,k+1)=x5(1:n,k+1)+h.*(k1+2*k2+2*k3+k4)./6;endfor k=1:1:my5(k) = D*x5(1:n,k);end% 解析解 %p = R/(2*L);w=sqrt(1/(L*C)-(R/(2*L))^2);for k=1:1:my(k) = U*(1-exp(-p*(k-1)*h) * (cos(w*(k-1)*h) + sin(w*(k-1)*h)*p/w));end%输出曲线 %for k=1:1:mt(k) = (k-1)*h;endsubplot(2,3,1),plot(t,y,'r',t,y1,'b')legend('y解析解,','y1前向欧拉')title('前向欧拉法')subplot(2,3,2),plot(t,y,'r',t,y2,'b')legend('y解析解,','y2后向欧拉')title('后向欧拉法')subplot(2,3,3),plot(t,y,'r',t,y3,'b') legend('y解析解,','y3梯形法')title('梯形法')subplot(2,3,4),plot(t,y,'r',t,y4,'b') legend('y解析解,','y4二阶显式Adams法') title('二阶显式Adams法')subplot(2,3,5),plot(t,y,'r',t,y5,'b') legend('y解析解,','y5显式四阶Runge-Kutta 法')title('显式四阶Runge-Kutta法')六、仿真实验曲线七、实验结论1)欧拉法为单步计算法,为自动起步的。

梯形法也为单步法,可以自动起步计算。

二阶显示Adams法需要知道k个初始值,不能自起步,二次函数很复杂,常用单步法来得到所需的几个初始值,很为复杂。

显式四阶Runge-Kutta法建模最为复杂,仿真时间也较长。

2)我们看到欧拉法最先与解析解分离开来,最后振荡开来,故稳定性最低;显式四阶Runge-Kutta法、二阶显示Adams 法和梯形法而则在较长时间可与曲线拟合收敛,故稳定性好。

3)显式四阶Runge-Kutta法,二阶显示Adams法模型的精度较高,函数曲线与真实曲线较为接近。

其次精确的是梯形法,取梯形面积,误差也较小。

前向欧拉法和后向欧拉法模型的精度最低。

4)二阶显示Adams法和梯形法对离散时间间隔要求低,前向欧拉法和后向欧拉法由于取的是矩形面积,离散时间间隔要求高。

5)从以上几种方法的仿真,共同规律是在小步长下都收敛,步长越小,误差越小,函数曲线与真实曲线较为接近;步长太大,最后的到的结果不是绝对收敛。

同时,同一算法隐式算法要比显式算法稳定性好,计算精度高。