神经网络讲义
第0讲 前言自我介绍:姓名,E-mail地址
登记学生名单:
非电信系学生凭选课单上课;
有选课单未上课的,老师有权给0分。
讲授计划:
第一课:绪论
第二课:介绍Matlab及其神经网络工具包
第三课:神经元与网络结构
第四课:感知机(Perceptron)
第五课:线性神经网络(Adaline)
第六课:后向传播网络(Bckpropagation)
第七课:自学习规则
第八课:自组织网络、Hopfield网络
第九课:期末考试
授课方式:讲授与练习相结合。
授课主要以Matlab为工具,在第二、四、五、六、八课均有课后作业。
每次作业占两个课时。完成后以电子邮件形式将word文档发到信箱;标题写“神经网络作业”,写明如何使用该文件。教师通过上机检查。
考试方式:
平时作业:50%;课后作业,以软件为主;
期末考试:50%;开卷考试,以概念为主。
参考书目:
《人工神经网络》,郑君里,杨行峻主编,1992年9月高教出版社第1版;
《神经网络与模糊控制》,张乃尧,阎平凡编著,1998年10月清华大学出版社第1版;
《基于Matlab的系统分析与设计——神经网络》,楼顺天,施阳主编,1999年9月西安电子科技大学出版社第1版;
英文文献:Neural Network Toolbox For Use with Matlab User Guide Version 4,Matlab Help。
第一讲 绪论
以冯·诺依曼型计算机为中心的信息处理技术的高速发展,使得计算机在当今的信息化社会中起着十分重要的作用。但是,当用它来解决某些人工智能问题时却遇到了很大的困难。
例如,一个人可以很容易地识别他人的脸孔,但计算机则很难做到这一点。这是因为脸孔的识别不能用一个精确的数学模型加以描述,而计算机工作则必须有对模型进行各种运算的指令才行,得不到精确的模型,程序也就无法编制。而大脑是由生物神经元构成的巨型网络,它在本质上不同于计算机,是一种大规模的并行处理系统,它具有学习、联想记忆、综合等能力,并有巧妙的信息处理方法。人工神经网络(简称神经网络)也是由大量的、功能比较简单的形式神经元互相连接而构成的复杂网络系统,用它可以模拟大脑的许多基本功能和简单的思维方式。尽管它还不是大脑的完美元缺的模型,但它可以通过学习来获取外部的知识并存贮在网络内,可以解决计算机不易处理的难题,特别是语音和图像的识别、理解、知识的处理、组合优化计算和智能控制等一系列本质上是非计算的问题。
因此,神经网络技术已成为当前人工智能领域中最令人感兴趣和最富有魅力的研究课题之一。
1.1 神经网络的研究发展史
1.1.1 第一次神经网络研究高潮对大脑神经元的研究表明,当其处于兴奋状态时,输出侧的轴突就会发出脉冲信号,每个神经元的树状突起与来自其它神经元轴突的互相结合部(此结合部称为Synapse,即突触)接收由轴突传来的信号。如果—神经元所接收到的信号的总和超过了它本身的“阈值”,则该神经元就会处于兴奋状态,并向它后续连接的神经元发出脉冲信号。
1943年,W.S.McCulloch和W.Pitts根据上述研究发表了他们的神经元模型,通常称为MP模型。在该模型中,当神经元处于兴奋状态时,其输出为1;处于非兴奋状态时,输出为0。
1949年,D.O.Hebb提出了神经元的学习法则,即Hebb法则。当神经元兴奋时,输入侧的突触结合强度由于受到刺激而得到增强,这就给神经网络带来了所谓的“可塑性”,并被认为是用神经网络进行模式识别和记忆的基础。到现在为止,大部分神经网络型机器的学习法则仍采用Hebb法则或它的改进形式。
50年代末,F.Rosenblatt基于上述原理提出了一种模式识别机,即感知机(Perceptron)模型。它是由光接收单元组成的输入层,MP神经元构成的联合层和输出层构成。输入层和联合层之间的结合可以不是全连接,而联合层与输出层神经元之间一般是全连接,用教师信号可以对感知机进行训练。
在Hebb的学习法则中,只有加强突触结合强度这一功能,但在感知机中,除此之外还加入了当神经元发生错误的兴奋时,能接受教师信号的指导去减弱突触的结合强度这一功能。
感知机是现代神经计算的出发点。Block于1962年用解析法证明了感知机的学习收敛定理。正是由于这一定理的存在,才使得感知机的理论具有实际的意义,并引发了60年代以感知机为代表的第一次神经网络研究发展的高潮。然而,遗憾的是感知机只能对线性可分离的模式进行正确的分类。当输入模式是线性不可分离时,则无论怎样调节突触的结合强度和阂值的大小也不可能对输入进行正确的分类。以后,Rosenblatt又提出了4层式感知机,即在它的两个联合层之间,通过提取相继输入的各模式之间的相关性来获得模式之间的依存性信息,这样做可使无教师学习成为可能。M.Minsky和S.Papert进一步发展了感知机的理论,他们把感知机定义为一种逻辑函数的学习机,即若联合层的特征检出神经元具有某一种任意的预先给定的逻辑函数,则通过对特征检出神经元功能的研究就可以识别输入模式的几何学性质。此外,他们还把感知机看作并行计算理论中的一个例子,即联合层的每个神经元只对输人的提示模式的某些限定部分加以计算,然后由输出神经元加以综合并输出最终结果。联合层各神经元的观察范围越窄,并行计算的效果就越好。Minskey等人首先把联合层的各神经元对输入层的观察范围看作一个直径为有限大的圆,这与高等动物的大脑中的视觉检出神经元在视网膜上只具有一个有限的视觉范围原理极为相似。但是,由于在如何规定直径的大小上没有明确的理论指导,所以只能作出联合层的神经元对输人层上的观察点的个数取一个有限值这样的规定。为了研究感知机的本质,特别是神经计算的本质究竟是什么,还对决定论中的一些代表性方法,如向量法、最短距离法、统计论中的最优法、Bayes定理、登山法、最急下降法等进行了比较研究,并以此来寻求它们的类同点和不同点。研究的结果表明,有时即使是采用多层构造,也可能对识别的效果毫无帮助。对某些识别对象,即使能分类识别,但却需要极大量的中间层神经元,以致失去了实际意义。当采用最急下降法时,若对象的“地形”很差,则有可能无法得到最佳值,即使能得到最佳值,也可能因为所需的学习时间太长或权系数的取值范围太宽而毫无实用价值。一般认为,由于Minskey的地位和他的这一研究断定了关于感知机的研究不会再有什么大的成果,而使第一次神经网络的研究热潮逐渐地被冷却了下来。
B.Widraw在稍后于感知机一些时候提出了Adline分类学习机。它在结构上与感知机相似,但在学习法则上采用了最小二乘平均误差法。以后,他又把这一方法用于自适应实时处理滤波器,并得到了进一步的发展。
1961年,E.R.Caianiello提出了能实现记忆和识别的神经网络模型,它由学习方程式和记忆方程式两部分组成。尽管这一研究没有超出以前的成果,也没有实际的应用例子,但由于它在神经网络的可塑性理论方面给出了一些重要的结论而得到了高度的评价。
与上述神经网络研究相平行的是在这一段时期内,脑的生理学方面的研究也在不断地发展。D.H.Huble和T.W.Wiesel从50年代后半期开始对大脑视觉领域的神经元的功能进行了一系列的研究。研究结果表明:视觉神经元在视网膜上具有称作为“接收域(receptive field)”的接收范围这一事实。例如某些神经元只对特定角度的倾斜直线呈现兴奋状态,一旦直线的倾斜角度发生变化,兴奋也就停止,代之以别的神经元处于兴奋状态。此外,还存在对黑白交界的轮廓线能作出反应的神经元;对以某种速度移动的直线发生兴奋的神经元和对双眼在一特定位置受到光刺激时才能发生兴奋的神经元等。这一系列脑功能研究领域中的开创性工作使他们在1981年获得了诺贝尔奖。此后的研究者又把研究范围扩大到侧头叶和头顶叶的神经元。当用猴子和猩猩作实验时,又发现了对扩大、旋转、特定的动作、手或脸等起反应的神经元。此外,在脑的局部功能学说中还认为幼儿具有认识自己祖母的所谓“祖母细胞(grandmother cell)”,尽管这一点还没有得到最后的证实,但从脑细胞分工相当细这一点来看还是有可能的。D.Marr在1969年提出了一个小脑功能及其学习法则的小脑感知机模型,这被认为是一个神经网络与神经生理学的事实相一致的著名例证。
在Minskey关于感知机的悲观研究结果发表后,特别是在美国,神经网络信息处理的研究被蒙上了阴影,大多数人都转向符号推理人工智能技术的研究,但仍有不少研究者在坚持不懈地对神经网络进行认真、深入的研究,并逐渐积累和取得了许多有关的基本性质和知识。
日本的研究者中野,于1969年提出了一种称为Associatron的联想记忆模型。在这种模型中,事物的记忆用神经网络中的神经元兴奋状态来表示,并对比比的学习法则加以修正,使其具有强化的学习功能并可用于记亿。该模型在记忆了多个兴奋模式以后,就具有了输入某个兴奋模式的一部分而重现该兴奋模式全体的功能。如果一个兴奋模式是由几个记忆事项联合构成时,它就成为一个能通过寻求各事项之间的关联而实现想起的联想记忆装置。在这种记忆模型中,可把记忆事项看作数学中的向量,用自相关行列式来说明记忆的原理。
东京大学的甘利教授从1970年起,就对神经网络的性质及其局限性作了许多理论研究,并取得了相当好的成果。他的研究成果已发表在1978年出版的“神经网络的数学原理”一书中。
1972年,芬兰的T.Kohonen发表了一个与感知机等神经网络不同的线性神经网络模型。比较非线性模型而言,它的分析要容易得多。
1975年,福岛提出了一个称为Co如咖的自组织识别神经网络模型。这是一个多层构造的神经网络,后层的神经元与被叫作接收域的前层神经元群体相连接,并具有与Hebb法则相似的学习法则和侧抑制机能。当在该系统的第一层反复提示几个输入模式后,就会在输出层产生对各种不同模式呈现兴奋状态的神经元。
C.V.Malsburg与D.J.Willshaw在1976年发表了“地形图”的自形成模型。简单地说,所谓地形图是指含有信息的神经网络的连接形式。例如视网膜上的视觉细胞的排列与受它激发而兴奋的大脑视觉域的神经元的排列是一致的,这样的构造在脑的任何部位均可见到,由此可以证明生物体具有学习环境的构造并保持这种构造的功能。甘利对这种功能作出了数学上的解释,并给出了形成这种排列构造所需的条件。此外,Kohonen还从信息工学的角度解释了这种神经网络的功能,并提出了能保存抽象信息的拓扑模型。
1.1.2 第二次神经网络研究高潮
1982年,美国物理学家Hopfield对神经网络的动态特性进行了研究,提出了所谓Hopfield神经网络模型。以Rumelhart为首的PDP(Parallel Distributed Processing)并行分布处理研究集团对联结机制(connectionist)进行了研究。此外,T.J.Sejnowski等人还研究了神经网络语音信息处理装置。这些成功的研究对第二次神经网络研究高潮的形成起了决定性的作用。
Hopfield模型的动作原理是,只要由神经元兴奋的算法和神经元之间的结合强度所决定的神经网络的状态在适当给定的兴奋模式下尚未达到稳定,那么该状态就会一直变化下去,直到预先定义的一个必定减小的能量函数达到极小值时,状态才达到稳定而不再变化。如果把这个极小值所对应的模式作为记忆模式,那么在以后,当给这个系统一个适当的刺激模式时,它就能成为一个已经记忆了模式的一种联想记忆装置。
1985年,Hopfield和D.W.Tank用上述模型求解了古典的旅行推销商问题(Traveling Salesman Problem),简称TSP问题。该问题就是在某个城市集合中找出一个最短的且经过每个城市各一次并回到出发城市的旅行推销路径。当考虑用Hopfield神经网络来求解时,首先需要构造一个包括距离变量在内的能量函数,并求其极小值。即在神经网络上输入适当的初始兴奋模式,求神经网络的结合强度。当能量变化并收束到最小值时,该神经网络的状态就是所希望的解,求解的结果通常是比较满意的。
1983年,S.E.Farmann和Hiton提出了波尔兹曼机BM(Boltzmann Machine),该神经网络模型中使用了概率动作的神经元,把神经元的输出函数与统计力学中的波尔兹曼分布联系起来。例如当神经网络中某个与温度对应的参数发生变化时,神经网络的兴奋模式也会象热运动那样发生变化。当温度逐渐下降时,由决定函数判断神经元是否处于兴奋状态。在从高温到低温的退火(annealing)中,能量并不会停留在局部极小值上,而以最大的概率到达全局最小值。
1985年,W.O.Hillis发表了称为联结机(connection)的超级并行计算机。他把65536个lbit的微处理机排列成起立方体的互连形式,每个微处理机还带有4kbit的存贮器。这种联结机虽然与神经计算不同,但从高度并行这一点来看却是相似的,均突破了冯,诺依曼计算机的格局。PDP有时也被叫作联结机制,实际上这种机制最适合于用来模拟神经网络。
误差反向传播神经网络BP(Error Back Propagation Neural Network)是1986年由Rumelhart和Hinton提出的,它是一种能向着满足给定的输入输出关系方向进行自组织的神经网络。当输出层上的实际输出与给定的教师输入不一致时,用最速下降法修正各层之间的结合强度,直到最终满足给定的输出输入关系为止。由于误差传播的方向与信号传播的方向正好相反而称为误差反向传播神经网络。与感知机相比,这就意味着可对联合层的特征检测神经元进行必要的训练,这正好克服了感知机在这一方面的缺点。
T.J.Sejnowski和C.R.Rcsenberg用BP神经网络作了一个英语课文阅读学习机的实验。在这个名为NetTalk的系统中,由203个神经元组成的输入层把字母发音的时间序列巧妙地变换成空间序列模式,它的中间层(隐藏层)有80个神经元,输出层的26个神经元分别对应于不同的需要学习的发音记号,并输出连接到由发音记号构成的语音合成装置,构成了一台英语阅读机。实验结果是相当成功的,有力地证明了BP神经网络具备很强的学习功能。
1.1.3存在的问题
BP神经网络的理论认为:只要不断地给出输入和输出之间的关系,则在神经网络的学习过程中,其内部就一定会形成表示这种关系的内部构造,并且只要使关系形成的速度达到实用值,那么BP的应用就不存在任何困难,但实际上问题并非如此简单。如前所述,神经网络识别机的原型是感知机,而BP只是学习方法改进了的感知机,所以把它当作识别机械时,可能存在着中间层神经元的个数会很庞大、学习时间太长、结合系数的范围太宽等严重缺点。这是因为它使用了固定的离散型的视网膜原理,即为了把作平行移动、旋转、相似变换而本身并不发生变化的对象看清楚,就要求视网膜的所有部分都具有精密的解析功能而引起的,所以特征神经元的数目就将变得十分庞大。而人在观察物体时,身体可以移动,头部和眼睛也可以转动,观察位置可以近一点或远一点看,此时不管视网膜上的映像有多大,人对物体的实际大小的感觉是不变的。尽管现在我们对大脑的这种功能在原理上还不十分清楚,但要作出高性能的识别系统,就必须模仿大脑的这种功能。
当把Hopfield神经网络模型和波尔兹曼机用作最优解的求解机时,还需要弄清楚该模型对具体的对象是否适用。当把神经网络用于运动控制装置时,另一个重要的问题是如何获得自组织的运动模式。
总之在研究神经网络时,应该尽量模仿脑的观测、识别、记忆、思考、行动和精神作用等功能,需要在其等效的工程学实现方法上下功夫,朝着把脑的全部功能用人工神经网络来实现的方向努力。
综上所述,神经网络的研究虽然时有起伏,出现了研究的高潮与低潮,但总的方向无疑还是正确的。但是,需要注意的是目前在实用化问题上还不宜操之过急,不要想一下子就能对各种对象开发出相应的实用化系统,还需要不断地总结和积累经验。
1.2 并行分布处理理论并行分布处理(PDP)理论是神经网络、神经计算和神经计算机研究中一个十分重要的基础概念,其中还包括了神经计算机的硬件结构——并行分布式连接及其软件编制和运行的基本原则。1986年,Rumelhart和McClelland发表了《并行分布处理——认知微结构探索》一书。全书共2卷26章,由不同学科的16名研究者共同撰写。书中系统地总结了PDP的概念、理论、数学方法、产生的背景和发展前景。著名的BP神经网络学习法则就是在本书中由Rumelhart提出的。1988年他们又编写了并行分布处理手册,书中系统地介绍了各种神经网络模型的理论背景和仿真程序的使用方法等。这套仿真程序被称为PDP神经网络软件。
1,2.1PDP的基本概念
PDP是一种联结理论,与心理学、神经生理等学科有密切的联系。在心理学中,联结理论起源于18世纪的联想主义理论。所谓联想是指不同的概念在人们头脑中相互作用的现象。在现代心理学中还包括联想记忆、联想思维等概念。在行为主义心理学中,还把行为看作刺激与反应之间的联结,明确了刺激和反应之间的关系,就能阐明人类行为的基本规律。
在经典的神经生理学中,脑反射论也将行为的基础看成刺激与反应之间的联结,其生理基础是由刺激在脑内引起的兴奋灶与支配反应的中枢兴奋灶之间存在的联结,而学习行为正是在刺激与反应的先天性通路基础上形成的暂时联系。例如:当铃声与食物两种刺激不断重复出现时,在大脑内会同时形成听觉兴奋灶和食物中枢兴奋灶,此时两者可以形成暂时的联系,即使以后单独出现铃声而不伴有食物,也会引起取食反应,这是因为脑内已经建立了铃声与食物之间的暂时性联系,这也就是著名的巴甫格夫条件反射学说。
70年代,神经生理学的研究进一步证明了暂时联系是神经系统的普遍特性,神经生理学的研究还表明,暂时性联系的生理学基础是“异源性突触异化”。任何一个神经元可以连接数以干计的神经末梢,形成大量突触,不同来源的神经末稍聚集在某一个神经元上,形成许多异源性突触,它们的兴奋总和,不管是同时性兴奋、还是间隔性兴奋,都可以引起这个神经元的兴奋。此外,不同来源的突触兴奋可以彼此异化,这就是异源性突触异化现象。在人工神经网络的联结理论中,神经元之间结合强度的变化就是在神经生理学概念的启发下产生的。
随着信息处理和人工智能学的迅速发展,人们发现复杂模式的识别,不确定、不完善知识的处理,机器人控制和组合优化计算等问题用现有的单台计算机是很难完善解决的,必须靠许多台计算机联合工作才行,并且只有用并行的联结,即神经网络的工作方式才能较好地解决问题,这也是80年代PDP概念形成的基础。
1.2.2 联结性和并行分布性
Rumelhart和McClelland在他们的PDP专著中认为:联结是一种微推理过程,网络中的每个单元均可以看作是某项目的一种微特征,联结强度(即结合强度)就是微特征间的微推理程度,调节联结强度可使该项目的各种微特征共存并存贮在联结中。而这种微推理过程既可以加强联结强度,也可以削弱联结强度。从数学上来说,微推理过程就是对输入和联结强度(权重)进行统计学上的相关运算。点积(dot product)是一种典型的相关运算,在神经网络的研究中被广泛采用。
PDP模型的信息处理是并行的,而信息的表达则是分布的,知识被各单元之间的连接所编码,所以PDP具有分布式的编码方式,这与数字计算机不同。计算机中采用的是局域性编码或地址编码,而分布式编码则是一种内容编码。分布式编码具有许多优点:一是可以节省大量单元(它并不要求每个特征对应一个单元),二是信息的存取是多个单元并行动作,所以速度快,最突出的优点是它具有较强的容错性和鲁棒性。
1.2.3 非符号性和连续性
传统的人工智能研究方法基本上是属于“符号处理”的范畴,而计算机则是实行“符号处理”的机器之一。因此,用二进制的计算机来实现人工智能问题,本质上就是离散符号的数字处理原则。而神经网络的研究者们已逐步认识到把大脑仅仅看作是“符号处理的机器”显然是不合适的。认知科学认为大脑的思考方式一般应含有论理的思考和直观的思考两种方式。前者把信息概念化,并用符号或语言来表示,接着以论理为主体,在符号操作的基础上进行推理,这种方式的思考是在人的意识或经验支配下实行的,计算机专家系统选择这种方式可以说是理所当然的。而后一种思考方式则是人们把各种事件作为信息置于脑中,常常在无意识中综合全部信息,并由此突然得出一个“好主意”或问题的解决办法,这种形式的思考方式归根结底是通过神经元之间同时、并行地相互作用的动态过程而实现的。大脑的思考应当是这两种形式的思考方式的结合。因而在人工神经网络中,特别强调信息表征的非符号性、信息的连续性及其模拟运算。
1.3 神经网络的研究概况神经网络的研究主要可分为以下三个方面:
1.大脑和神经系统的信息处理原理。
2.构造能实现信息处理的神经网络模型。
3.能实现信息处理基本原理的技术研究一—神经计算机。
以上三个内容本身还具有相当广泛的研究内容。此外神经网络是一门新兴的交叉学科,其研究涉及到神经科学、认知科学、物理学、数学、计算机科学、人工智能、信息科学、微电子学和光学等众多的学科。
生物体的大脑和神经系统是自然界中客观存在的东西,因此,真正搞清楚生物体的信息处理的基本原理是神经网络研究中必不可少的基础。
人类看到鸟类在空中飞行而制造出了飞机,是一个伟大的发明。但更重要的是懂得了在空中飞行是可能的这一道理,即得到了开发目标是存在的这一证明。同样,通过对大脑和神经系统的研究,知道了与现在计算机完全不同的,并行分散信息处理系统是客观存在的。因此,充分证明了神经计算机也是可以制造出来的,尽管还有许多困难。至于是什么样的神经计算机,进而它的应用领域的开拓等、则完全要靠我们充分发挥想象力了。
然而,大脑信息处理机制的研究,神经网络模型的研究和神经计算机的开发并不是一件容易的事。如上所述,因为它是一门交叉的学科,所以需要各学科的大力协作。国际上以美国和日本为首,无论是大学、研究所和企业都对神经网络和神经计算机的研究开发给予高度的重视与支持。特别是美国军方,认为神经网络技术是比原子弹工程更重要的技术。美国国防部(DARPA)曾宣布执行一项总投资为4亿美元的八年计划,其主要研究目标为:连续语音信号识别、声纳信号识别、目标识别及跟踪等。
日本通产省早在1988年也提出了所谓人类尖端科学计划(Human Frontier Science Program),即所谓的第六代计算机计划,研制能模拟人类智能行为的计算机系统。表1.1列举了美国、日本—一些大学和研究所的神经网络研究状况。

到目前为止,已经发表了多达几十种的神经网络模型,它们具备不同的信息处理能力,典型的神经网络模型如表1.2所示。

1987年6月21至24日在美国加州圣地亚哥(San Diego)召开的第一届神经网络国际会议,有一千多名学者参加,标志着神经网络研究在世界范围内已形成了新的热点。会议论文集共4卷,内容十分广泛,包括:综述性报告、自组织、协同与竞争、网络动力学、知识处理、学习算法和适应谐振理论、系统和网络结构、神经计算机和综合性组合优化问题、神经生物学中的联结问题、视觉、语音识别、语音合成、新型机器人等。
1988年,我国在北京召开了神经网络的国际研究工作会议,并出版了论文集。1989年10月在北京又召开了神经网络及其应用讨论会。1990年12月在北京召开了我国首届神经网络学术大会,并决定以后每年召开一次年会。1991年冬在南京召开的第二届中国神经网络学术大会上,宣布成立中国神经网络学会。
这些年来,我国的神经网络研究取得了不少成果,特别是1995年,在中国科学院半导体所诞生了我国第一台采用数模结合型多元逻辑电路的神经计算机,并被命名为“预言神”号,为我国的神经计算机研究作出了开创性的工作。
关于神经网络的主要国际性杂志有:
(1)Neural Networks(国际神经网络协会会刊)
(2)IEEE Transactions on Neural Networks
(3)IEEE Transactions on Parallel Distributed System
(4)Connections Science
(5)Neurocomputing
(6)Neural Computation
(7)International Journal of Neural Systems
第二讲 Matlab与神经网络工具箱
Matlab简介具有Fortran和C高级计算机语言知识的读者可能已经注意到,如果用它们去进行程序设计,尤其当涉及矩阵运算或画图时,编程会很麻烦。比如说,若想求解一个线性代数方程组AX=B=>X=A-1B,用户得首先编写一个主程序,然后编写一个子程序去读入各个矩阵的元素,之后再编写一个子程序,求解相应的方程,最后输出结果。一般说来,求解线性方程组这样一个简单的功能需要100多条源程序。
Matlab的首创者Cleve Moler博士在数值分析,特别是在是指线性代数的领域中很有影响。1980年前后,他在New Mexico大学讲授线性代数课程时,发现用其它高级语言编程极为不便,便构思并开发了Matlab(Matrix Laboratory,即矩阵实验室)。在Matlab下,矩阵的运算变得异常的容易,后来的版本中又增添了图象处理及多媒体、因特网、数据库等功能。
Matlab出现以后一直在美国的New Mexico等大学作为教学辅助软件使用,并作为面向公众的免费软件广为流传。Matlab于1984年推出了正式版本。后来Moler组建了一个名为MathWorks的软件开发公司(http:// www,Mathworks.com)专门扩展并改进Matlab。该公司于1992年推出具有划时代意义的Matlab 4.0版。可以配合Microsoft Windows一起使用。1998年推出5.3版。2000年11月6日推出最新版本Matlab 6.0。
Matlab 6.0有30个工具箱包,包括控制系统工具箱(Control System Toolbox),信号处理工具箱(Signal Processing toolbox),系统辨识工具箱(System Identification toolbox),鲁棒控制工具箱(Robust Control toolbox),μ分析于综合工具箱(μ-analysis and synthesis toolbox),定量反馈理论工具箱(QFT toolbox),神经网络工具箱(Neural Network toolbox),最优化工具箱(Optimisation toolbox),数据库工具箱(Database toolbox),网络工具箱(Matlab WebServer)等。
现在的Matlab已经不仅仅是一个“矩阵实验室”了,它已经形成了一种具有广泛应用前景的全新的计算机高级语言。严格的说,Matlab并不是一种计算机语言,因为用它编写出来的程序并不能脱离Matlab环境而执行,但从功能上说,Matlab已经完全具备了计算机语言的结构和性能,因此我们也习惯的称之为Matlab语言。
Matlab 5.3以上版本提供了C/C++的接口,通过另外一个工具MatCom,能用Visual C++调用Matlab编写的程序,从而大大减少C++程序的编写难度。此工具我已经用过,效果不错。
Matlab的基本操作
Matlab的安装关键是选择合适的工具箱和相应的帮助文件。
帮助文件(helpdesk)
两种:(1)pdf格式:系统详细介绍了Matlab的基本结构,各个命令的使用。工具包的相关技术、命令,非常详实,简单、易学,共100多M的容量。
(2)html格式:主要是命令,各种基本命令及工具箱命令的搜索,及相关命令调用等。
演示(demo)
详尽演示矩阵运算、图形显示、工具箱的使用等。
退出:exit 或quit命令
Matlab的基本语句结构
Matlab实际上可以认为是一种解释性语言,用户可以在Matlab工作环境下键入一个命令,也可以由它定义的语言编写应用程序,这样Matlab软件对此命令或程序中各条命令进行翻译,然后在Matlab环境下对它进行计算,最后返回结果。
基本的赋值语句变量名列表=表达式
如:A=[1,2,3;4,5,6;7,8,0](列于旁边,以后要用)
等号右边的表达式可以用分号结束,也可以用逗号或换行号结束。用分号结束表示左边的变量结果将不在屏幕显示出来,否则左边返回矩阵的内容全部显示出来。
Matlab区分大小写,Abc,ABC,abc表示不同的矩阵名,但实际编程时应尽量避免这样的命名方式。
在矩阵A中,同一行中的内容用逗号分隔,而采用分号来表示换行。按这种格式输入后,矩阵A的内容将按照下面的格式显示出来:
A=[1,2,3;4,5,6;7,8,0]↘
1 2 3
A= 4 5 6
7 8 0
如果在上面赋值的式子末尾加一个分号,则矩阵的内容就不在屏幕上显示了。所以用户可以通过是否在语句末加分号的方式来决定运算的结果是否显示出来,这样就可以使得不必要的中间结果部分不被显示出来。
一般情况下,用于同行中分隔的逗号是可以由空格来代替的。其实,Matlab的矩阵输入格式并不是很严格,矩阵A还可以由下面的两种方式来输入:
>>A=[1 2 3;4 5 6; >>A=[1 2 3;4,5,…
7 8 0]; 6;7 8,0];
(…)为续行号。在一个语句相当长时,可以采用续行号将一条语句分割成几行表示。
Matlab的保留字符串判断0元素用的误差限eps,其默认值为eps=2.2204×10-16
pi表示圆周率
Inf表示无穷大。Matlab允许的最大数据为1.797693×10308;一个数据大于此数则认为是Inf。1/0产生Inf。
即使在Matlab中保留了若干字符串,它们还可以重新进行赋值。如果用户想将判0的误差限扩大10倍,则可以采用esp=10×esp命令来进行修正。
矩阵的基本运算
矩阵A有n行m列,称A矩阵为n×m矩阵。
矩阵加减法运算:C=A+B 和C=A-B。
若A、B的维数相同,则可以执行加减法,得到矩阵C;
若A、B的维数不匹配,则Matlab将自动给出错误信息,提示两个矩阵的维数不匹配。
矩阵的转置:AT
1 2 3 1 4 7
实矩阵转置 A=[4 5 6] AT=[2 5 8 ]
7 8 0 3 6 0
5+i 2-i 1 5-i -6i
复矩阵转置 A=[ 6i 4 9-i] A*=[2+I 4 ]
1 9+i
在Matlab下,矩阵A的转置(包括复矩阵的转置)均可以简单地由A’求出。
矩阵乘法
1 2 5 5 19 21
A=[ 3 4] B=[7 8 ] 则C=A×B=[43 47]
在这里并不需要制定A、B的维数。如果A、B的维数相容,则可以准确无误地获得矩阵C。如果二者维数不相容,则给出错误信息,通知用户这两个矩阵是不可乘的。
矩阵的点乘
1 2 3 2 3 4
A=[4 5 6] B=[ 5 6 7 ]
7 8 0 8 9 0
36 42 18
若C=A×B,则C=[ 81 96 51 ]
54 69 84
2 6 12
若C=A.×B,则C=[ 20 30 42 ]
56 72 0
可知,前者是普通矩阵乘积,后者是两个矩阵对应元素之间的乘积。
矩阵的除法
Matlab定义了矩阵的除法运算,其意义相当于矩阵的求逆运算。
如:Ax=B
式中A和B为相容维数的矩阵,则x亦为矩阵,
则 x=A-1B
A-1可由函数inv(A)直接求出,即x=inv(A)×B,也可简单地写成x=A/B。
单个矩阵元素的赋值与运算
Matlab允许用户对一个矩阵地单个元素进行赋值和操作。
1 2 3
如:A(2,3)=100 则A变成[ 4 5 100 ]
7 8 0
表示将矩阵A的第二行第三列的元素赋为100。若给出的行数或列数大于原来矩阵的范围,则Matlab将自动扩展原来的矩阵,并将扩展后未赋值的元素置为0。
-1 2 3 0 0
如:A(4,5)=8 则A变成[ 4 5 100 0 0 ]
7 8 0 0 0
0 0 0 0 8
Matlab还允许对子矩阵进行定义和处理。
A(:,j)表示A矩阵的第j列元素;
A(i,:)表示A矩阵的第i列全部元素。
A(:,1)=[1,4,7]
A(2,:)=[4,5,6]
下节将讲
Matlab的控制语句(循环,条件);
Matlab的绘图功能;
神经网络工具箱的函数列表。
先复习上节内容:
Matlab简介;
Matlab基本操作:helpdesk,demo,quit,help;
Matlab基本语句:赋值语句;
Matlab的基本运算:加、减、乘、点乘、除、转置、单个矩阵元素的运算。
Matlab的控制语句与其它高级语言一样,Matlab也提供了条件转移语句、循环语句等一些常用的控制语句,从而使得Matlab语言的编程显得十分灵活。
Matlab的循环语句结构
Matlab中可以使用两种循环语句:for语句和while语句。这两种的基本格式和C语言中的循环语句相似。
for语句的基本格式
for 循环变量i=表达式S1:表达式S3:表达式S2
循环语句组
end
表达式S1为循环变量的循环起始值,表达式S2为循环终止值判断,表达式S3为步长。
在C语言中,循环体的内容是以大括号{}括起来的,而在Matlab语言中,循环体的内容是以循环语句和end语句括起来的,所以在使用Matlab时应注意这一点。
for循环体的程序框图:
例1:求
mysum=0
for i=1:1:100
mysum=mysum+i;
end
在Matlab编程中,如果表达式S3的值为1,则可以省略。上句可以简化为for i=1:100,对于上一例子,Matlab有更好的编程方法:
i=1:100
mysum=sum(i);
利用Matlab的内部函数,速度快很多。
while语句的结构
Matlab的条件转移语句结构
Matlab的编程基础
Matlab的绘图功能神经网络工具箱常用函数列表
Matlab编程举例