广义预测控制
广义预测控制理论及其应用研究

浙江大学博士学位论文摘要fI亡当面鎏I控赳作为预测控制中最具代表性的算法之一,多年来一直是研究领域最为活跃的预测控剑簋法。
它融合了预测控制与自适应控制的优点,可直接处理输入、输出约束,并对过程的时滞及阶次估计不准有好的鲁棒性,能适用于开环不稳定和非最小相位系统。
目前,线性单变量系统的广义预测控制理论发展得较为成熟,但实际中往往是多变量、非线性系践两方面的研究,主要内容如下:1.从算法、理论和应用三个方面概述了预测控制的发展历史及现状,重点介绍了广义预测控制及其改进算法。
机制能有机地结合起来,对系统的阶次估计不准有好的鲁棒性。
|}—-,3.I由于很难用常规方法获得非线性系统的精确模型,而神经网络具有能逼近任~非线性系统的能力,因此用神经网络实现非线性预测控制是处理复杂非线性问题的一种通用思路J‘本文提出了先用递归神经网络将非线性过程全局反馈线性化,然后在此基础上设计约束广义预测控制器的方法,并在控制算法中考虑了线性化带来的模型误差。
f对连续搅拌槽反应器的仿真说明了该算法的有效性。
k一4.;对预测控制器进行鲁棒性分析和设计一直都是预测控制研究领域的难点。
竭‘文结合模型误差上界的频域辨识结果和小增益理论分析了存在建模误差时广义预测控制器的稳定性,根据对模型误差上界的估计给出基于图形的鲁棒广义预测控制器的参数整定方法,并将这一结果应用于PUMA500机器人的关节力控制系统的鲁棒参数设计。
浙江大学博士学位论文5.推导了有约束的多变量广义预测控制算法,并给出状态空间实现。
(对Shell分馏塔的仿真研究结果表明,算法能有效地处理过程时滞和非最小相位特性,有良好的解耦性能,在跟踪性、抗干扰性等方面的控制效果优于动态矩阵控制算法。
}一—76简要概述了国内外催化裂化装置先进控制的现状,并根据我国催化裂化工业的具体情况,提出一些具有实际意义的建议。
7阳汽油的干点和轻柴油的倾点是反映流化催化裂倔主分馏塔产品质量指标的重要参数,但由于种种困难很难获得。
GPC控制说明文档

广义预测控制(GPC)1.GPC 基本原理介绍广义预测控制 (GPC) 是牛津大学的Clarke 等于1987年提出的,基于参数模型,它是以(CARIMA )受控自回归积分滑动平均模型的基础,并结合辨识和自校正机制,表现出良好的鲁棒性。
特点:(1)基于CARIMA 模型;(2)目标函数中对控制增量加权的考虑; (3)利用输出的远程预报; (4)控制时域长度概念的引入; (5)丢番图方程的递推求解; 1.1 预测模型假设系统基于下面的CARIMA 模型,)1(/)()1()()()(11∆ξk k u z B k Y z A +-=--其中,),(),(k u k y 和)(k ξ是系统的输出、输入和干扰信号。
a a n n z a z a z A ---+++= 1111)(,b b n n z b z b b z B +++=-- 1101)(,11--=z ∆,(1-z 是向后移时间算子),模型即 ∆ξ/)()1()2()1()()1()(101k n k u b k u b k u b n k y a k y a k y b n a n b a +--++-+-=-++-+ ,,/)()1()2()1()()1()(101∆ξk n k u b k u b k u b n k y a k y a k y b n a n b a +--++-+-+-----=i i b a ,是系数,用数据辨识得到。
为得到)(k y 的j 步向前预测值)(j k y +,考虑下面的丢番图方程组:Nj z F z z A z E j j j ,,1)()()(1111 =+∆=---- (2)简写成:j jj F z A E -+=∆1,其中j E 和j F 为待求多项式,a j j n F j E =∂-=∂,1,)1(110---+++=j j j z e z e e E ,aan n j j j j z f z f f F --+++= 11,)()1()(j k E j k u B E j k y A E j j j ++-+=+ξ∆∆ (3)将(2)代入(3)得:)()1()()1(j k E j k u B E j k y F z j j j j ++-+=+--ξ∆)()()1()(j k E k y F j k u B E j k y j j j +++-+=+ξ∆ (4)得到未来输出)(j k y +的预测值:),,1()()1()|(ˆN j k y F j k u B E k j k yj j =+-+∆=+ (5)为将)1(-+j k u B E j ∆中已知信息和未知信息分离开来,在考虑另一组丢番图方程:Nj H z G B E jj j j ,,1 =+=- (6)其中j G 和j H 为待求多项式,1,1-=∂-=∂b j j n H j G ,)1(1110----+++=j j j z G z g g G ,)1(1110----+++=b bn n jj j j z h z h h H , 将(6)代入(5)得:)()1()()1()1()()1()()|(ˆ0j k y j k u G k y F k u H j k u G k y F j k u H z G k j k yj j j j j j j j ++-+∆=+-∆+-+∆=+-+∆+=+-(7)求解j j j j H G F E ,,,的递推算法:jj j j j j j j j j j j j H z G B E f e A e F z F z e E E A z F E z A z A -+-+--+==-=+=-===)11()10()(,)9()1(,1)8()()(0111111∆在利用MA TLAB 仿真时,可以自编函数简化之。
水下机器人动力学模型辨识与广义预测控制技术研究

水下机器人动力学模型辨识与广义预测控制技术研究1. 本文概述本文旨在探讨水下机器人动力学模型辨识及其在广义预测控制技术中的应用。
水下机器人作为一种高效的海洋探索工具,在海洋科学研究、海底资源勘探、军事防御等领域发挥着重要作用。
由于水下环境的复杂性和动态特性,对机器人的控制提出了更高的要求。
为此,本文首先回顾了水下机器人动力学模型的研究现状,分析了模型辨识在提高机器人控制性能中的关键作用。
接着,本文详细介绍了广义预测控制技术的原理及其在水下机器人控制中的应用。
通过构建精确的动力学模型,结合广义预测控制算法,可以有效提高水下机器人的控制精度和稳定性。
本文通过仿真实验验证了所提出方法的有效性,并对未来研究方向进行了展望。
2. 水下机器人动力学模型水下机器人的动力学模型是理解和控制其运动的基础。
在深入研究水下机器人的动力学模型之前,首先需要明确其工作环境的特殊性:水下环境的阻力、浮力、流体动力学效应以及水下机器人特有的推进机制等。
该模型通常包括质量、阻尼和刚度等参数,用以描述机器人在水下运动时所受的力和力矩。
动力学模型可以分为几个主要部分:线性动力学模型、非线性动力学模型以及考虑流体动力学效应的复杂模型。
线性动力学模型主要关注机器人在低速运动时的行为,它假设所有力和力矩与速度和位移成线性关系。
这种模型适用于初步设计和分析,但在高速或者复杂动作时可能不够准确。
非线性动力学模型则考虑了速度和位移的非线性关系,能够更准确地描述机器人在各种速度下的行为。
这需要更复杂的数学工具和计算方法,但可以提供更精确的预测和控制。
流体动力学效应的考虑则进一步增加了模型的复杂性。
水下机器人在运动过程中会受到水流、波浪以及其他流体动力学效应的影响。
这些因素需要通过实验数据和数值模拟来综合考虑,以确保模型的实用性和准确性。
在实际应用中,动力学模型的建立和辨识是一个迭代过程。
通过实验和仿真,不断调整和优化模型参数,以提高模型的预测能力和控制精度。
一种克服模型参数失配的广义预测控制算法

一种克服模型参数失配的广义预测控制算法1 引言在控制领域中,预测控制(Predictive Control)是一种高级控制方法,该方法通过对未来系统行为的预测进行优化,能够实现较高的控制性能。
但是在实际应用中,由于模型不准确、参数变化等因素,往往会导致预测控制的失效。
为了克服这些问题,本文将介绍一种广义预测控制算法(Generalized Predictive Control,简称GPC),以其在模型参数失配情况下的优秀控制效果为例,探讨预测控制的改进之路。
2 预测控制的基本原理预测控制的基本思路是通过对系统行为的预测,通过最优化问题求解方式得到控制策略。
预测控制的过程包括两个关键步骤:预测(Prediction)和最优化(Optimization)。
在预测阶段,控制器使用系统的动态模型对未来的状态与输出进行预测,得到一组序列预测值。
在最优化阶段,使用一个性能指标(如MPC的代价函数)对控制器的控制策略进行评价,并找到最优策略,使得预测值与实际输出尽可能相近,同时优化目标最小化。
最终得到的解决方案应用于系统。
3 模型参数失配测量误差、模型不确定性、传感器误差等因素都可能导致参数的失配。
模型参数失配可以分为两类:常系数失配和时变失配。
常系数失配指的是模型中的某些参数在不确定的基础上保持不变。
在这种情况下,如果只使用标准的预测控制算法,将会导致控制效果变差且不稳定。
时变失配指的是模型的参数随时间变化。
模型参数的不确定性随着时间的推移而增加,因此预测控制算法的精度也会逐渐下降,导致控制响应变慢。
4 广义预测控制算法(GPC)广义预测控制(Generalized Predictive Control)是一种基于ARMA模型的改进方案,可以很好地解决模型参数失配问题。
ARMA(Auto-Regressive Moving Average)模型是常用的线性时不变系统模型,它通常用于描述具有随机噪声的信号序列。
gpc原理

gpc原理GPC原理。
GPC(Generalized Predictive Control)是一种广义预测控制方法,它是一种基于模型的控制策略,可以用于多变量、非线性、时变系统的控制。
GPC控制器通过对系统进行建模和预测,来实现对系统的控制。
本文将对GPC原理进行详细介绍,包括其基本原理、控制流程和应用特点。
首先,我们来介绍GPC的基本原理。
GPC控制器的设计基于对系统的数学模型,通过对系统的建模和预测,来实现对系统的控制。
在GPC中,首先需要建立系统的数学模型,通常采用ARX(自回归外推)模型或者ARMAX(自回归滑动平均外推)模型来描述系统的动态特性。
然后,利用这个模型进行预测,得到未来一段时间内系统的响应。
最后,根据预测的结果,通过优化算法计算出控制输入,从而实现对系统的控制。
接下来,我们来介绍GPC的控制流程。
首先,需要对系统进行建模,得到系统的数学模型。
然后,利用这个模型进行预测,得到未来一段时间内系统的响应。
接着,通过优化算法计算出控制输入,将其应用于系统中,实现对系统的控制。
在实际应用中,通常需要不断地对系统进行建模和预测,以及优化控制输入,来实现对系统的稳定控制。
最后,我们来介绍GPC的应用特点。
首先,GPC可以应用于多变量系统的控制,能够处理多个输入和输出之间的相互影响。
其次,GPC可以应用于非线性系统的控制,能够处理系统动态特性的非线性影响。
此外,GPC还可以应用于时变系统的控制,能够处理系统参数随时间变化的影响。
总的来说,GPC是一种灵活、高效的控制方法,适用于各种复杂的控制系统。
综上所述,GPC是一种基于模型的控制策略,通过对系统进行建模和预测,来实现对系统的控制。
它具有灵活、高效的特点,适用于多变量、非线性、时变系统的控制。
希望本文的介绍能够帮助大家更好地理解和应用GPC控制方法。
广义预测控制原理-江苏科技大学

广义预测控制理论1引言预测控制思想主要是在70年代形成的,进人80年代后,随着模型算法控制(MAC)的问世,相继出现了动态矩阵控制(DMC)、扩展时域预测自适应控制(EPSAC)等结构各异的预测控制算法,这些算法分别基于有限脉冲响应和有限阶跃响应模型,算法简单,容易实现,1984年,Clarke及其合作者在上述算法的基础上,提出了广义预测控制(GPC)思想及基本方法,GPC基于参数模型,引入了不相等的预测水平和控制水平,使系统设计更灵活。
由于广义预测控制具有预测模型、滚动优化和反馈校正三个基本特征,因而具有优良的控制性能和鲁棒性,被认为是具有代表性的预测控制算法之一并被广泛应用于过程工业中。
近年来,广义预测控制吸引了众多学者对其进行研究国际上,各大控制会议和杂志对它也非常关注,近10年来的美国控制会议(ACC)、IEEE决策与控制会议(CDC)和国际自动控制联合会(IFAC)世界大会几乎每年都有关于预侧控制的专题分组及以预侧控制为主题的工作讨论会,1995年在韩国又召开了关于预测控制的国际讨论会,在广义预测控制方面也发表了不少综述文献和著作。
2广义预测控制2.1广义预测控制的基本算法GPC采用如下CARIMA模型来描述系统A(z ' )y(t) = B(z ')u (t -1) C (z (t) / :其中A(z」),B(z'),C(z')分别是阶数位的n a,n b,n c的z J的多项式,A(z‘)和C(z‘)是首一多项式,{u(t)},{y(t)},「(t)}分别表示系统的输入、输出和白噪声序列,‘刊。
广义预测控制使用如下的二次目标函数N2 NMJ =E{ ' [y(t k) 一,(t k)]2亠二;[:u(t k -1)]2} (2.1.2) k 出1 k =1其中,N1,N2分别为最小、最大预测长度,N M为控制长度,满足关系仁N「N2,N M乞N2且当k>N2时看,假定u(t k-T,■为控制加权序列,(2.1.1)■'(t k)是经柔化后的参考值,在GPC 中,不要求对象输出直接跟踪设定值'■, 只要求y(t)沿着参考轨迹到达设定值■。
广义预测控制,算法及仿真实例

广义预测控制算法及实例分析一.广义预测控制算法1.广义预测控制的提出广义预测控制是预测控制中三种常见算法之一。
预测控制的提出并不是某一种统一理论的产物,而是源于工业实践,并在工业实践过程中发展和完善起来的一类新型计算机控制算法。
预测控制不会过分依赖被控对象的精确数学模型,能很好的应对工业对象的结构、参数的不确定性,且用工业计算机较容易实现。
2.广义预测控制的基本原理广义预测控制是预测控制中最具代表性的算法,他有三方面的特点:基于传统的参数模型,模型参数少;是在自适应发展过称中发展起来的,保留了自适应发展的优点且更具鲁棒性;采用多步预测、滚动优化、反馈校正更适于工业应用。
广义预测控制基本原理:预测模型、滚动优化、反馈校正预测模型:预测控制的模型称为预测模型。
预测控制对模型的要求只强调其功能而非结构,只要模型可利用过去己知数据信息预测系统未来的输出行为,就可以作为预测模型。
在DMC、MAC等预测控制策略中,采用了阶跃响应、脉冲响应等非参数模型,而GPC预测控制策略则多选择CARIMA参数模型。
滚动优化:预测控制是一种优化控制算法,通过某一性能指标的最优来确定未来的控制作用。
预测控制的优化标准不是采用一成不变的全局最优化目标,而是采用滚动式的有限时域优化策略。
优化不是一次离线进行,而是反复在线进行。
在每一采样时刻,优化性能指标只涉及到未来有限的时域,而到下一采样时刻,这一优化时域同时向前推移。
因此,预测控制在每一时刻有一个相对于该时刻的优化性能指标,即实现滚动优化。
反馈校正:预测控制算法在进行滚动优化时,优化的基点应与系统实际一致。
但作为基础的预测模型,只是对象动态特性的粗略描述,可能与实时状态不慎符合。
这就需要用附加的预测手段补充模型预测的不足,或对基础模型进行在线修正。
预测控制算法在通过优化确定了一系列未来的控制作用后,每次只是实施当前时刻的控制作用。
到下一采样时刻,则首先检测对象的实际输出,并利用这一实时信息对基于模型的预测进行修正,然后再进行新的优化。
多变量广义预测控制

在线估计参数的控制方法
01 背景
目录
02 多变量控制
03 广义预测控制
04 算法的改进
05 控制系统的分析
多变量广义预测控制(Multivariable generalized predictive control )具有多个输入量或输出量的 采用传统的参数模型(如CARIMA模型),参数的数目较少,对于过程参数慢时变的系统,易于在线估计参数的控制 方法。
多变量控制
简介
优点
具有一个以上输入或一个以上输出的系统,在那里任一输入的变动产生来自一个以上输出的一个响应,叫做 多变量系统。一般说来,会有m个输入和l个输出,如图1所示。如果了l=m,这系统叫做方形系统。
图1
如果任一输入的变动产生来自一个以上输出的一个响应,那么这是由于系统中某种内部耦合或传输通路引起 的,通常,当处理一个特定输入时,一个特定的系统输出端会比其他输出端起更大的响应,其他输出端对这个物 入变动的响应叫做交互作用。
控制系统的分析
稳定性分析
鲁棒性分析
当预测模型没有建模误差时, Clarke等人从状态空间的角度对 GPC的稳定性进行了分析,认为当开环系统 能稳可测时,通过选择适当的参数,可以使闭环系统在有限时域内稳定,并产生稳定的状态最小拍控制;当预测 长度趋近无穷大时,闭环系统稳定,但算法的计算量将随预测长度的增加而呈指数倍增长,这就要求预测长度在 适当的范围之内,因此在一般情形下, GPC算法并不一定能保证系统的闭环稳定性。针对这个问题,众多学者进 行了大量的研究,有些学者通过对算法的改进来保证系统的闭环稳定性,如上节中提到的各种稳定的广义预测控 制算法;还有一些学者则直接从理论上来分析 GPC的稳定性,这些分析主要有两类:基于内模控制原理和状态空 间分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广义预测控制(G P C)GPC算法仿真
被控对象模型
动态矩阵控制算法的编程原理
(1)设置GPC参数,例如采样周期,预测时域,控制时域,截断步长等。
(2)建立系统阶跃响应模型
(3)设置初始时刻参数,例如系统的初始时刻值,柔化系数等。
(4)计算参考轨迹
(5)计算控制作用增量
(6)实施GPC控制
(7)输出结果,绘制曲线
GPC算法:
1.初选控制参数:Q、R、P、M、 ysp 、?、?(z-1)
2.采集输入、输出样本{?u(k),?y(k)}
3.用RLS算法估计参数
4.递推求解Diophantine方程,得到
5.计算F(k)
6.在线计算控制器参数d T
7.得到控制增量?u(k)和控制输入u(k) =u(k-1) +?u(k)
+1 ?k,进入下一周期预测计算和滚动优化
GPC程序:
%Clarke广义预测控制(C=1)(对象参数已知)
%N1=d、N、Nu取不同的值
clear all;close all;
a=cell(1,2) ;b=cell(1,2) ;c=cell(1,1);d=cell(1,1);%对象参数syms k;
k=length(k);
if (0<=k<=150)
a=[1 ]; b=[ ]; c=1; d=1;
elseif (150<k<=300)
a=[1 ]; b=[ ]; c=1; d=1;
elseif (300<k<=450)
a=[1 ]; b=[ ]; c=1; d=1;
else (450<k<=600)
a=[1 ]; b=[ ]; c=1; d=1;
end
na=length(a)-1;b=[zeros(1,d-1) b];nb =length(b)-1;%na、nb为多项式A、B阶次(因d!=1,对b添0)
aa=conv(a,[1 -1]);naa=na+1;%aa的阶次
N1=d;N=15;Nu=5;%最小输出长度、预测长度、控制长度
gamma=1*eye(Nu);alpha=;%控制加权矩阵、输出柔化系数
L=600;%控制步数
uk=zeros(d+nb,1);%输入初值:uk(i)表示u(k-i)
duk=zeros(d+nb,1);%控制增量初值
yk=zeros(naa,1);%输出初值
w=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %设定值
xi=sqrt*randn(L,1);%白噪声序列
%求解多步Diophantine方程并构建F1、F2、G
[E,F,G]=multidiophantine(aa,b,c,N);
G=G(N1: N, : );
F1=zeros(N-N1+1,Nu); F2=zeros(N-N1+1,nb);
for i=1:N-N1+1
for j=1:min(i,Nu); F1(i,j)=F(i+N1-1,i+N1-1-j+1);end
for j=1:nb; F2(i,j)=F(i+N1-1,i+N1-1+j);end
end
for k=1:L
if (1<=k<=150)
time(k)=k;
a=[1 ]; b=[ ]; c=1; d=1;
y(k)=-aa(2:naa+1)*yk+b*duk(1:nb+1)+xi(k);%采集输出数据Yk=[y(k);yk(1:na)];%构建向量Y(k)
dUk=duk(1:nb);%构建向量△U(k-j)
elseif (150<k<=300)
time(k)=k;
a=[1 ]; b=[ ]; c=1; d=1;
y(k)=-aa(2:naa+1)*yk+b*duk(1:nb+1)+xi(k);%采集输出数据Yk=[y(k);yk(1:na)];%构建向量Y(k)
dUk=duk(1:nb);%构建向量△U(k-j)
elseif (300<k<=450)
time(k)=k;
a=[1 ]; b=[ ]; c=1; d=1;
y(k)=-aa(2:naa+1)*yk+b*duk(1:nb+1)+xi(k);%采集输出数据Yk=[y(k);yk(1:na)];%构建向量Y(k)
dUk=duk(1:nb);%构建向量△U(k-j)
else (450<k<=L)
time(k)=k;
a=[1 ]; b=[ ]; c=1; d=1;
y(k)=-aa(2:naa+1)*yk+b*duk(1:nb+1)+xi(k);%采集输出数据Yk=[y(k);yk(1:na)];%构建向量Y(k)
dUk=duk(1:nb);%构建向量△U(k-j)
end
%参考轨迹
yr(k)=y(k);
for i=1:N
yr(k+i)=alpha*yr(k+i-1)+(1-alpha)*w(k+d);
end
Yr=[yr(k+N1:k+N)]';%构建向量Yk(k)
%求控制量
dU=inv(F1'*F1+gamma)*F1'*(Yr-F2*dUk-G*Yk); %ΔU du(k)=dU(1); u(k)=uk(1)+du(k);
%更新数据
for i=1+nb:-1:2
uk(i)=uk(i-1);
duk(i)=duk(i-1);
end
uk(1)=u(k);
duk(1)=du(k);
for i=naa:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
subplot(2,1,1);
plot(time,w(1:L),'m:',time,y);
xlabel('k');ylabel('w(k)、y(k)');
legend('w(k)','y(k)');
subplot(2,1,2);
plot(time,u);
xlabel('k');ylabel('u(k)');
function[E,F,G]=multidiophantine(a,b,c,N)
%********************************************************** *
%功能:多步Diophanine方程的求解
%调用格式:[E,F,G]=sindiophantine(a,b,c,N)(注:d=1)
%输入参数:多项式A,B,C系数向量及预测步数(共4个)
%输出参数:Diophanine方程的解E,F,G(共3个)
%********************************************************** ***
na=length(a)-1;nb =length(b)-1;nc=length(c)-1;%A、B、C的阶次
%E、F、G的初值
E=zeros(N);E(1,1)=1;F(1,:)=conv(b,E(1,:));
if na>=nc
G(1,:)=[c(2:nc+1) zeros(1,na-nc)]-a(2:na+1);%令
c(nc+2)=c(nc+3)=...=0
else
G(1,:)=c(2:nc+1) -[a(2:na+1)-zeros(1,nc-na)];%令
a(nc+2)=a(nc+3)=...=0
end
%求E、F、G
for j=1:N-1
for i=1:j
E(j+1,i)=E(j,i);
end
E(j+1,j+1)=G(j,1);
for i=2:na
G(j+1,i-1)=G(j,i)-G(j,1)*a(i);
end
G(j+1,na)=-G(j,1)*a(na+1);
F(j+1,: )=conv(b,E(j+1,:));
end
仿真结果
N=15 Nu=5 alpha=
N=10 Nu=5 alpha=
N=15 Nu=3 alpha=
N=15 Nu=3 alpha=
结论
可以得出,当保持其他参数不变而改变一或几个变量时会有不同的情形。
当预测步长越大,系统越稳定,预测步长越小,系统的快速性会变好,但对系统响应没有多大影响。
当预测步长不变时,随着控制步长的减小,系统的稳定性和鲁棒性会更好,但可能跟踪性能会变差。
随着控制步长的增大,系统的灵敏性更好,动态性能会更好。
柔化系数越大参考轨迹柔性变好,鲁棒性变好,而系统的快速性下降。
心得体会
通过这次对GPC的仿真,让我更好的掌握了Matlab的运用方法,更熟悉了Matlab的一些技巧和仿真步骤。
虽然在先前的几次仿真中遇到或失败或者错误之类的,但经过同学之间的交流和师兄的指导和查阅相关资料,这些问题都得到了一一克服,我觉得这是对我对书本知识运用的一次很好的历练。