神经网络讲义
神经网络讲义
1.自我介绍:姓名,E-mai地址 2.登记学生名单 非电信系学生凭选课单上课 有选课单未上课的,老师有权给0分。 3.讲授计划: 第一课:绪论 第二课:介绍 Matlab及其神经网络工具包 第三课:神经元与网络结构 第四课:感知机( Perceptron) 第五课:线性神经网络( Adaline) 第六课:后向传播网络( Backpropagation) 第七课:自学习规则 第八课:自组织网络、 Hopfield网络 第九课:期末考试 4.授课方式:讲授与练习相结合。 授课主要以 Matlab为工具,在第四、五、六、八课均有课后作业。 每次作业占两个课时。完成后以电子邮件形式将word文档发到信箱:标题写“神 经网络作业”,写明如何使用该文件。教师通过上机检查。 5.考试方式 平时作业:50%:课后作业,以软件为主 期末考试:50%:开卷考试,以概念为主。 6.参考书目 《人工神经网络》,郑君里,杨行峻主编,1992年9月高教出版社第1版 ●《神经网络与模糊控制》,张乃尧,阎平凡编著,1998年10月清华大学出版社第 版 ●《基于 Matlab的系统分析与设计—一神经网络》,楼顺天,施阳主编,1999年9 月西安电子科技大学出版社第1版 英文文献
1. 自我介绍:姓名,E-mail 地址 2. 登记学生名单: ⚫ 非电信系学生凭选课单上课; ⚫ 有选课单未上课的,老师有权给 0 分。 3. 讲授计划: 第一课:绪论 第二课:介绍 Matlab 及其神经网络工具包 第三课:神经元与网络结构 第四课:感知机(Perceptron) 第五课:线性神经网络(Adaline) 第六课:后向传播网络(Bckpropagation) 第七课:自学习规则 第八课:自组织网络、Hopfield 网络 第九课:期末考试 4. 授课方式:讲授与练习相结合。 ⚫ 授课主要以 Matlab 为工具,在第四、五、六、八课均有课后作业。 ⚫ 每次作业占两个课时。完成后以电子邮件形式将 word 文档发到信箱;标题写“神 经网络作业”,写明如何使用该文件。教师通过上机检查。 5. 考试方式: ⚫ 平时作业:50%;课后作业,以软件为主; ⚫ 期末考试:50%;开卷考试,以概念为主。 6. 参考书目: ⚫ 《人工神经网络》,郑君里,杨行峻主编,1992 年 9 月高教出版社第 1 版; ⚫ 《神经网络与模糊控制》,张乃尧,阎平凡编著,1998 年 10 月清华大学出版社第 1 版; ⚫ 《基于 Matlab 的系统分析与设计——神经网络》,楼顺天,施阳主编,1999 年 9 月西安电子科技大学出版社第 1 版; ⚫ 英文文献:
第一讲绪论 神经网络的定义 神经网络是用非常大量的简单计算处理单元(即神经元)构成的非线性系统,它具 有学习能力、记忆能力、计算能力以及各种智能处理能力,它在不同程度和层次上模仿 人脑神经系统的信息处理、存储及检索功能 利用它完成各项信号处理或人工智能任务时在许多方面可以胜过普通的冯诺依曼 计算机 2.本课程的研究内容 人工神经网络是一门新兴的交叉学科。不同领域的学者对此有着不同的理解,不 同的研究内容并且采取不同的研究方法。对于从事电路与系统、信号处理、通信等领域的研 究人员,侧重于利用人工神经网络来解决各项特定的智能处理任务,诸如:识别、分类、联 想、优化、推理以及发现规律等。本课程的研究内容仅限于此 本课程的研究途径 由于人工神经网络的研究正处于迅速发展阶段,在研究思路、教学方法、处理 对象以及结构和硬件构成等方面存在着种种差异很大的学说和流派,相应的文献与资料的数 量迅速增加。因此,要将这一领域的主要硏究内容和方法扼要、完整地整理出来必然有很大 地困难。按照本课程地需要,主要介绍以下三种重要地研究途径 第一种是按照物理模型构成地神经网络,其中包括采用非概率神经元模型地 Hopfield神经网络 第二种是以自适应信号处理理论为基础发展起来地,其中最著名地就是前向多 层神经网络及其递推(BP)学习方法 第三种是按照自组织原则构成地神经网络,其中有代表性的是自适应谐振理论 (ART)神经网络和T· Kohonen提出的自组织特征映射神经网络 这三种途径各有其有缺点。从算法的系统性和完整性看,第一、二种优于第三 种。而从模仿人的认知过程和智能处理功能看,后者又优于前者。从立即导向一种实用系统 而言,第二种相对困难较少。 4.神经网络的研究热点 1)在神经网络硏究中采用模糊算法,构成模糊人工神经网络 2)用混沌( Chaos)理论研究人工神经网络 3)加强与其它有关学科的交叉,特别是心理学、神经生理学、生物化学与生物物理学 以及人工智能科学等等 4)用小波理论研究神经网络,形成小波神经网络 5)人工神经网络的可编程问题; 6)利用分子器件实现人工神经网络:指硬件实现
第一讲 绪论 1. 神经网络的定义 神经网络是用非常大量的简单计算处理单元(即神经元)构成的非线性系统,它具 有学习能力、记忆能力、计算能力以及各种智能处理能力,它在不同程度和层次上模仿 人脑神经系统的信息处理、存储及检索功能。 利用它完成各项信号处理或人工智能任务时在许多方面可以胜过普通的冯·诺依曼 计算机。 2. 本课程的研究内容 人工神经网络是一门新兴的交叉学科。不同领域的学者对此有着不同的理解,不 同的研究内容并且采取不同的研究方法。对于从事电路与系统、信号处理、通信等领域的研 究人员,侧重于利用人工神经网络来解决各项特定的智能处理任务,诸如:识别、分类、联 想、优化、推理以及发现规律等。本课程的研究内容仅限于此。 3. 本课程的研究途径 由于人工神经网络的研究正处于迅速发展阶段,在研究思路、教学方法、处理 对象以及结构和硬件构成等方面存在着种种差异很大的学说和流派,相应的文献与资料的数 量迅速增加。因此,要将这一领域的主要研究内容和方法扼要、完整地整理出来必然有很大 地困难。按照本课程地需要,主要介绍以下三种重要地研究途径。 第一种是按照物理模型构成地神经网络,其中包括采用非概率神经元模型地 Hopfield 神经网络。 第二种是以自适应信号处理理论为基础发展起来地,其中最著名地就是前向多 层神经网络及其递推(BP)学习方法。 第三种是按照自组织原则构成地神经网络,其中有代表性的是自适应谐振理论 (ART)神经网络和 T·Kohonen 提出的自组织特征映射神经网络。 这三种途径各有其有缺点。从算法的系统性和完整性看,第一、二种优于第三 种。而从模仿人的认知过程和智能处理功能看,后者又优于前者。从立即导向一种实用系统 而言,第二种相对困难较少。 4. 神经网络的研究热点 1) 在神经网络研究中采用模糊算法,构成模糊人工神经网络; 2) 用混沌(Chaos)理论研究人工神经网络; 3) 加强与其它有关学科的交叉,特别是心理学、神经生理学、生物化学与生物物理学、 以及人工智能科学等等; 4) 用小波理论研究神经网络,形成小波神经网络; 5) 人工神经网络的可编程问题; 6) 利用分子器件实现人工神经网络:指硬件实现
第二讲 Matlab与神经网络工具箱 Matlab简介 具有 Fortran和C高级计算机语言知识的读者可能已经注意到,如果用它们去进行 程序设计,尤其当涉及矩阵运算或画图时,编程会很麻烦。比如说,若想求解一个线性 代数方程组AX=B→>X=AB,用户得首先编写一个主程序,然后编写一个子程序去读 入各个矩阵的元素,之后再编写一个子程序,求解相应的方程,最后输出结果。一般说 来,求解线性方程组这样一个简单的功能需要100多条源程序。 Matlab的首创者 Cleve moler博士在数值分析,特别是在是指线性代数的领域中很 有影响。1980年前后,他在 New mexico大学讲授线性代数课程时,发现用其它高级语 言编程极为不便,便构思并开发了 Matlab( Matrix Laboratory,即矩阵实验室)。在 Matlab 下,矩阵的运算变得异常的容易,后来的版本中又增添了图象处理及多媒体、因特网、 数据库等功能 Matlab出现以后一直在美国的 New mexico等大学作为教学辅助软件使用,并作为 面向公众的免费软件广为流传。 Matlab于1984年推出了正式版本。后来 Moler组建了 一个名为MathWorks的软件开发公司(htp:∥www.Mathworks.com)专门扩展并改进 Matlab。该公司于1992年推出具有划时代意义的 Matlab40版。可以配合 Microsoft Windows一起使用。1998年推出53版。2000年11月6日推出最新版本 Matlab60。 Matlab6.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语言。 Matlab5.3以上版本提供了C/C艹的接口,通过另外一个工具 Matcom,能用Ⅴ isual C*调用 Matlab编写的程序,从而大大减少C程序的编写难度。此工具我已经用过, 效果不错。 2. Matlab的基本操作 1) Matlab的安装 关键是选择合适的工具箱和相应的帮助文件 2)帮助文件( helpdesk) 两种:(1)pdf格式:系统详细介绍了 Matlab的基本结构,各个命令的使用。工具 包的相关技术、命令,非常详实,简单、易学,共100多M的容量 (2)hm格式:主要是命令,各种基本命令及工具箱命令的搜索,及相关 命令调用等。 3) 详尽演示矩阵运算、图形显示、工具箱的使用等 4)退出:exit或quit命令
第二讲 Matlab 与神经网络工具箱 1. 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 ++程序的编写难度。此工具我已经用过, 效果不错。 2. Matlab 的基本操作 1) Matlab 的安装 关键是选择合适的工具箱和相应的帮助文件。 2) 帮助文件(helpdesk) 两种:(1)pdf 格式:系统详细介绍了 Matlab 的基本结构,各个命令的使用。工具 包的相关技术、命令,非常详实,简单、易学,共 100 多 M 的容量。 (2)html 格式:主要是命令,各种基本命令及工具箱命令的搜索,及相关 命令调用等。 3) 演示(demo) 详尽演示矩阵运算、图形显示、工具箱的使用等。 4) 退出:exit 或 quit 命令
3. Matlab的基本语句结构 Matlab实际上可以认为是一种解释性语言,用户可以在 Matlab工作环境下键入 个命令,也可以由它定义的语言编写应用程序,这样 Matlab软件对此命令或程序中各条 命令进行翻译,然后在 Matlab环境下对它进行计算,最后返回结果。 1)基本的赋值语句 变量名列表=表达式 如:A=[,2,3;4,5,6;7,8,0(列于旁边,以后要用) 等号右边的表达式可以用分号结束,也可以用逗号或换行号结束。用分号结束 表示左边的变量结果将不在屏幕显示出来,否则左边返回矩阵的内容全部显示 出来 Matlab区分大小写,Abe,ABC,abc表示不同的矩阵名,但实际编程时应尽 量避免这样的命名方式。 在矩阵A中,同一行中的内容用逗号分隔,而采用分号来表示换行。按这种 格式输入后,矩阵A的内容将按照下面的格式显示出来: A=[1,2,3:4,5,6;7,8,0] 123 A=456 780 如果在上面赋值的式子末尾加一个分号,则矩阵的内容就不在屏幕上显示 了。所以用户可以通过是否在语句末加分号的方式来决定运算的结果是否显示出 来,这样就可以使得不必要的中间结果部分不被显示出来 一般情况下,用于同行中分隔的逗号是可以由空格来代替的。其实, Matlab 的矩阵输入格式并不是很严格,矩阵A还可以由下面的两种方式来输入 >>A=[123;456 >>A=[1234,5 780] 6,780]; (.)为续行号。在一个语句相当长时,可以采用续行号将一条语句分割 成几行表示。 2) Matlab的保留字符串 (1)判断0元素用的误差限eps,其默认值为eps=2.2204×1016 (2)pi表示圆周率 (3)Inf表示无穷大。 Matlab允许的最大数据为1797693×10308:一个数据 大于此数则认为是Inf。1/0产生Inf。 即使在 Matlab中保留了若干字符串,它们还可以重新进行赋值。如果用户想 将判0的误差限扩大10倍,则可以采用eps=10×eps命令来进行修正 4.矩阵的基本运算 矩阵A有n行m列,称A矩阵为n×m矩阵。 1)矩阵加减法运算:C=A+B和C=A-B 若A、B的维数相同,则可以执行加减法,得到矩阵C 若A、B的维数不匹配,则 Matlab将自动给出错误信息,提示两个矩阵的维
3. Matlab 的基本语句结构 Matlab 实际上可以认为是一种解释性语言,用户可以在 Matlab 工作环境下键入一 个命令,也可以由它定义的语言编写应用程序,这样 Matlab 软件对此命令或程序中各条 命令进行翻译,然后在 Matlab 环境下对它进行计算,最后返回结果。 1) 基本的赋值语句 变量名列表=表达式 如: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]; (…)为续行号。在一个语句相当长时,可以采用续行号将一条语句分割 成几行表示。 2) Matlab 的保留字符串 (1) 判断 0 元素用的误差限 eps,其默认值为 eps=2.2204×10-16 (2) pi 表示圆周率 (3) Inf 表示无穷大。Matlab 允许的最大数据为 1.797693×10308;一个数据 大于此数则认为是 Inf。1/0 产生 Inf。 即使在 Matlab 中保留了若干字符串,它们还可以重新进行赋值。如果用户想 将判 0 的误差限扩大 10 倍,则可以采用 eps=10×eps 命令来进行修正。 4. 矩阵的基本运算 矩阵 A 有 n 行 m 列,称 A 矩阵为 n×m 矩阵。 1) 矩阵加减法运算:C=A+B 和 C=A-B。 ⚫ 若 A、B 的维数相同,则可以执行加减法,得到矩阵 C; ⚫ 若 A、B 的维数不匹配,则 Matlab 将自动给出错误信息,提示两个矩阵的维
数不匹配 2)矩阵的转置:AT 147 实矩阵转置A=456] A=[258] 360 复矩阵转置A=[649-iA=[2+1 在 Matlab下,矩阵A的转置(包括复矩阵的转置)均可以简单地由A'求出 3)矩阵乘法 A=[34]B=[78]则C=A×B=[4347] 在这里并不需要指定A、B的维数。如果A、B的维数相容,则可以准确无误 地获得矩阵C。如果二者维数不相容,则给出错误信息,通知用户这两个矩阵是不 可乘的 4)矩阵的点乘 123 234 =456 890 364218 若C=A×B,则C=[819651] 546984 2612 若C=A.XB,则C=[203042] 56720 可知,前者是普通矩阵乘积,后者是两个矩阵对应元素之间的乘积。 5)矩阵的除法 Matlab定义了矩阵的除法运算,其意义相当于矩阵的求逆运算。 如:Ax=B 式中A和B为相容维数的矩阵,则x亦为矩阵, 则ⅹ=A-B A-1可由函数inv(A)直接求出,即ⅹ=inv(A)×B,也可简单地写成x=A/B 6)单个矩阵元素的赋值与运算 Matlab允许用户对一个矩阵地单个元素进行赋值和操作 :A(2,3)=100 则A变成[45100 表示将矩阵A的第二行第三列的元素赋为100。若给出的行数或列数大于原来 矩阵的范围,则 Matlab将自动扩展原来的矩阵,并将扩展后未赋值的元素置为0
数不匹配。 2) 矩阵的转置: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’求出。 3) 矩阵乘法 1 2 5 5 19 21 A=[ 3 4] B=[7 8 ] 则 C=A×B=[43 47] 在这里并不需要指定 A、B 的维数。如果 A、B 的维数相容,则可以准确无误 地获得矩阵 C。如果二者维数不相容,则给出错误信息,通知用户这两个矩阵是不 可乘的。 4) 矩阵的点乘 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 9651 ] 54 69 84 2 6 12 若 C=A.×B,则 C=[ 20 30 42 ] 56 72 0 可知,前者是普通矩阵乘积,后者是两个矩阵对应元素之间的乘积。 5) 矩阵的除法 Matlab 定义了矩阵的除法运算,其意义相当于矩阵的求逆运算。 如:Ax=B 式中 A 和 B 为相容维数的矩阵,则 x 亦为矩阵, 则 x=A-1B A -1 可由函数 inv(A)直接求出,即 x=inv(A)×B,也可简单地写成 x=A/B。 6) 单个矩阵元素的赋值与运算 Matlab 允许用户对一个矩阵地单个元素进行赋值和操作。 1 2 3 如:A(2,3)=100 则 A 变成[ 4 5 100 ] 7 8 0 表示将矩阵 A 的第二行第三列的元素赋为 100。若给出的行数或列数大于原来 矩阵的范围,则 Matlab 将自动扩展原来的矩阵,并将扩展后未赋值的元素置为 0
-12300 如:A(4,5)=8则A变成[4510000 78000 00008 ab还允许对子矩阵进行定义和处理 A(:,j)表示A矩阵的第j列元素 A(i,:)表示A矩阵的第i列全部元素。 A(:,1)=1,4,7 A(2,;)=[4,5,6 下节将讲 ● Matlab的控制语句(循环,条件) Matlab的绘图功能 ●神经网络工具箱的函数列表。 先复习上节内容: Matlab简介; Matlab基本操作:; helpdesk,demo,qut,help Matlab基本语句:赋值语句: Matlab的基本运算:加、减、乘、点乘、除、转置、单个矩阵元素的运算 5. Matlab的控制语句 与其它高级语言一样, Matlab也提供了条件转移语句、循环语句等一些常用的控 制语句,从而使得 Matlab语言的编程显得十分灵活 1) Matlab的循环语句结构 Matlab中可以使用两种循环语句:for语句和 while语句。这两种的基本格式 和C语言中的循环语句相似 (1)for语句的基本格式 for循环变量i=表达式S1:表达式S3:表达式S2 循环语句组 表达式SⅠ为循环变量的循环起始值,表达式S2为循环终止值判断, 表达式S3为步长 在C语言中,循环体的内容是以大括号{}括起来的,而在Mab语 言中,循环体的内容是以循环语句和end语句括起来的,所以在使用 Matlab时应注意这一点。 for循环体的程序框图
-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 的基本运算:加、减、乘、点乘、除、转置、单个矩阵元素的运算。 5. Matlab 的控制语句 与其它高级语言一样,Matlab 也提供了条件转移语句、循环语句等一些常用的控 制语句,从而使得 Matlab 语言的编程显得十分灵活。 1) Matlab 的循环语句结构 Matlab 中可以使用两种循环语句:for 语句和 while 语句。这两种的基本格式 和 C 语言中的循环语句相似。 (1) for 语句的基本格式 for 循环变量 i=表达式 S1:表达式 S3:表达式 S2 循环语句组 end 表达式 S1 为循环变量的循环起始值,表达式 S2 为循环终止值判断, 表达式 S3 为步长。 在 C 语言中,循环体的内容是以大括号{}括起来的,而在 Matlab 语 言中,循环体的内容是以循环语句和 end 语句括起来的,所以在使用 Matlab 时应注意这一点。 for 循环体的程序框图:
求取S1的值=>i 求取S2的值 i在S1、S2之间 否结東循环 循环体语句 i+S3=> 例1:求∑ fori=1:1:100 在 Matlab编程中,如果表达式S3的值为1,则可以省略。上句可以 简化为fori=1:100,对于上一例子, Matlab有更好的编程方法: mysum-sum ( 利用 Matlab的内部函数,速度快很多。 (2) while语句的结构 while(条件式) 循环语句组 whle语句的框图
求取S1的值=>i i+S3=>i 循环体语句 求取S2的值 i在S1、S2之间 是 否 结束循环 例 1:求 = 100 i 1 i 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 的内部函数,速度快很多。 (2) while 语句的结构 while (条件式) 循环语句组 end while 语句的框图:
条件式成立? 奇·循环结束 执行循环体内容 对于上例,如果改用 while循环,可写为 sum=0;1=1 hile(i≤100) sum=sum+ii=i+1 当然, Matlab提供的for, while允许多层嵌套,而且它们之间也可以 相互嵌套,这和C语言是一致的 2) Matlab的条件转移语句结构 (1)基本格式: if(条件式) 条件块语句组 结构框图: 条件式成立? 执行循环体内容 当给出的条件成立时,则执行该条件块结构中的语句内容,执行
条件式成立? 执行循环体内容 是 否 循环结束 对于上例,如果改用 while 循环,可写为: sum=0;i=1; while (i≤100) sum=sum+i, i=i+1; end 当然,Matlab 提供的 for,while 允许多层嵌套,而且它们之间也可以 相互嵌套,这和 C 语言是一致的。 2) Matlab 的条件转移语句结构 (1) 基本格式: if(条件式) 条件块语句组 end 结构框图: 条件式成立? 执行循环体内容 是 当给出的条件成立时,则执行该条件块结构中的语句内容,执行
完之后,继续向下执行:若条件不成立,则跳出条件块而直接向下执 行 例2:求出满足∑1>1000的最小m。 break 这里使用了 break命令,其作用就是中止上一级的for语句循环 过程 (2)绝对转移 由于 Matlab没有提供绝对转移的指令,所以这样的功能可通过 f和 while的组合来完成。见例3。 例3:如果用户想对一个问题进行回答,历这个间题要求用户键健 入y或n两个字符之一。否则就认为翁入的字符有误,要求用户重新 输入,直至输入y成n为止。 程序 ey- ∥首先赋给中间变量key一个初值0 while(ikey=0)∥循环条件为ikey=0 t('Is the orrect? y/n?,'S) if (sl="y'ISl="n') ikey=1: end 在这一程序段中使用了带有S选项的 Input()函数,其意义是 要求用户输入一个字符串 如果不使用附加变量ikey,上面的程序段可修改成: while (1) Sl= Input(‘ Is the t?yn]?,S); 在例3中,if条件式内判断两个表达式是否相等时使用的是 符号,而不是=号,这和C语言的写法一致。 (3)复杂的条件结构
完之后,继续向下执行;若条件不成立,则跳出条件块而直接向下执 行。 例 2:求出满足 = m i i 1 >10000 的最小 m。 mysum=0; for m=1:10000 if (mysum>10000) break; end mysum=mysum+m; end 这里使用了 break 命令,其作用就是中止上一级的 for 语句循环 过程。 (2) 绝对转移 由于 Matlab 没有提供绝对转移的指令,所以这样的功能可通过 if 和 while 的组合来完成。见例 3。 例 3:如果用户想对一个问题进行回答,而这个问题要求用户键 入 y 或 n 两个字符之一。否则就认为输入的字符有误,要求用户重新 输入,直至输入 y 或 n 为止。 程序: ikey=0; //首先赋给中间变量 ikey 一个初值 0 while (ikey==0)//循环条件为 ikey==0 S1=input ( ‘Is the answer correct? [y/n]?’, ‘S’); if (S1= ‘y’|S1= ‘n’) ikey=1;end end 在这一程序段中使用了带有 ‘S’选项的 input()函数,其意义是 要求用户输入一个字符串。 如果不使用附加变量 ikey,上面的程序段可修改成: while(1) S1=input( ‘Is the answer correct?[y/n]?’, ‘S’); if (S1== ‘y’|S1== ‘n’)break;end end 在例 3 中,if 条件式内判断两个表达式是否相等时使用的是== 符号,而不是=号,这和 C 语言的写法一致。 (3) 复杂的条件结构