精华内容
下载资源
问答
  • 课题背景 形态学运算只针对二值图像二进制图像并依据数学形态学Mathermatical Morphogy集合论方法发展起来 的图像处理方法起源于岩相对岩石结构的定量描述工作在数字图像处理机器视觉领域中得到了广泛的应用 形成...
  • 6.1 PSpice的起源发展;6.2 PSpice的特点 1集成性高 电路图的制作分析设置完成仿真与观测结果印刷电路板设计可编程逻辑元件设计 2完整的Probe观测功能 OrCAD PSpice提供了一个Probe程序快速而精准地观察电路特性...
  • 文章目录JavaSE入门0之java起源发展历程前言1.Java的起源2.Java互联网3.java历史4.java语言特点5.java应用6.java相关名词解释 前言 我个人觉得,学习一门语言,一定得了解这门语言的起源发展历史,才能更好的...

    JavaSE入门0之java起源与发展历程

    前言

    我个人觉得,学习一门语言,一定得了解这门语言的起源与发展历史,才能更好的理解和学习这门语言,仅是我的个人拙见。

    1.Java的起源

    Java之父James Gosling(詹姆斯~高斯林)出生于加拿大,是一位计算机编程天才。在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统。

    1990年,语言最开始只是Sun公司在1990年12月开始研究的一个内部项目。Sun计算机公司的一个叫做帕特里克·诺顿的工程师被公司自己开发的C++C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT同时他也获得了研究公司的一个叫做**“Stealth计划”**的项目的机会。

    “Stealth计划”后来改名为“Green计划”,詹姆斯·高斯林]和麦克·舍林丹(Mike Sheridan)也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州市的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如电冰箱、微波炉)的程序设计,Sun公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C++语言,但是很多成员包括Sun的首席科学家比尔·乔伊,发现C++和可用的API在某些方面存在很大问题。

    工作小组使用的是嵌入式系统,可以用的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。

    根据可用的资金,乔伊决定开发一种集C语言Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议Sun公司的工程师应该在C++的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为C++ ++ --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的橡树命名。

    随着1990年代互联网的发展,sun公司看见oak在互联网上应用的前景,于是对oak进行改造,后来,这项工作就演变为Java。随着互联网的普及,尤其是网景开发的网页浏览器的面世,Java 成为全球流行的开发语言。

    PS:由于Oak商标被一家显卡公司制造商注册,Oak改名为Java,而java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-edY0ZRun-1575989058845)(C:\Users\Explore World!\AppData\Roaming\Typora\typora-user-images\image-20191208001008758.png)]

    2.Java和互联网

    1994年6月,在java团队经历了一场历时三天的头脑风暴后,团队决定再一次改变努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器,WebRunner,后来改名为HotJava

    1994年10月,HotJava和Java平台为公司高层进行演示。1994年,Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年3月23日SunWorld大会上进行的。升阳公司的科学指导约翰·盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的,宣布网景将在其浏览器中包含对Java的支持。1996年1月,Sun公司成立了Java业务集团,专门开发Java技术。

    在流行几年之后,Java在浏览器中的地位被逐步侵蚀。它在简单交互性动画方面的用途已经完全被Adobe公司的Flash排挤,2005年Java倾向只被用于雅虎游戏那样的更为复杂的应用程序。Java同时遭受到来自微软的反对,他们决定在新版本的Internet ExplorerWindows中不再附带Java平台。

    与此相反,在万维网的服务器端和手持设备上,Java变得更加流行。很多网站在后端使用JSP和其他的Java技术。

    在桌面系统上,独立的Java程序还是相对少见这是因为Java平台的运行开销较大,而许多人的电脑上没有安装Java,由于网络带宽在以前较小,下载Java曾经是个耗时的事情。但是随着计算机计算能力、网络带宽在10年中获取了很大的进步,同时虚拟机和编译器的质量得到了提高,许多应用程序得到了广泛的使用。

    3.java历史

    1995年5月23日,Java语言诞生

    1996月1月,JDK1.0诞生

    1997年2月18日,JDK1.1发布

    1999年6月,SUN公司发布Java三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)

    2000年5月8日,JDK1.3发布

    2000年5月29日,JDK1.4发布

    2001年9月24日,J2EE1.3发布

    2002年2月26日,J2SE1.4发布,此后Java的计算能力有了大幅提升

    2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0

    2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME;

    2006年12月,SUN公司发布JRE6.0

    2009年4月40日,oracle(甲骨文)收购sun公司

    2009年12月,SUN公司发布Java EE 6

    2010年11月,由于Oracle对Java社区的不友善,因此Apache扬言将退出JCP

    2011年7月28日,Oracle公司发布Java SE 7

    2014年3月18日,Oracle公司发表Java SE 8

    2017年9月21日,Oracle公司发表Java SE 9

    2018年3月21日,Oracle公司发表Java SE 10

    2018年9月25日,Java SE 11发布

    4.java语言特点

    1. 简单性:没有C语言头文件、指针运算、结构、操作符重载、虚基类等。
    2. 面向对象:将重点放在数据(对象)和对象的接口是上。
    3. 分布式:Java应用程序通过URL(Uniform Resource Locators,统一资源定位器)打开和访问网络上的对象。
    4. 健壮性:它的编译器能够检测其他语言仅在运行时才能检测出的问题。
    5. 安全性:java开发在安全方面投入了很大精力。
    6. 体系结构中立:生成一个中立的目标文件格式(.class)。
    7. 可移植性: write once,run anywhere(一次编写,到处运行)。
    8. 解释型:Java解释器可以在任何有解释器的机器上执行java字节码。
    9. 高性能 :Just in time(即时编译),字节码编译成本地机器码并缓存,提高效率。
    10. 多线程:多线程的使用可以带来更好的交互响应和实时行为。
    11. 动态性:就是在需要时将某些代码添加到正在运行的程序中。

    5.java应用

    1.桌面GUI应用程序: Java通过抽象窗口工具包(AWT),Swing和JavaFX等多种方式提供GUI开发。虽然AWT包含许多预先构建的组件,如菜单,按钮,列表以及众多第三方组件,但Swing(一个GUI小部件工具包)还提供某些高级组件,如树,表格,滚动窗格,选项卡式面板和列表。JavaFX是一组图形和媒体包,提供了Swing互操作性,3D图形功能和自包含的部署模型,可以快速编写Java小应用程序和应用程序的脚本。

    2.移动应用程序: Java Platform,Micro Edition(Java ME或J2ME)是一个跨平台框架,用于构建可在所有Java支持的设备(包括功能手机和智能手机)上运行的应用程序。此外,最受欢迎的移动操作系统之一的Android应用程序通常使用Android软件开发工具包(SDK)或其他环境在Java中编写脚本。

    3.嵌入式系统: 从微型芯片到专用计算机的嵌入式系统是执行专门任务的大型机电系统的组件。诸如SIM卡,蓝光光盘播放器,公用事业仪表和电视机等多种设备都使用嵌入式Java技术。据甲骨文公司称,100%的蓝光光盘播放器和1.25亿台电视设备都采用Java技术。

    4.Web应用程序: Java通过Servlets,Struts或JSP提供对Web应用程序的支持。编程语言提供的简单编程和更高的安全性使得大量政府应用程序可用于基于Java的健康,社会安全,教育和保险。Java也可以使用Broadleaf等开源电子商务平台开发电子商务Web应用程序。

    5.Web服务器和应用程序服务器: 今天的Java生态系统包含多个Java Web服务器和应用程序服务器。虽然Apache Tomcat,Simple,Jo !, Rimfaxe Web服务器(RWS)和Project Jigsaw占据了Web服务器空间,但WebLogic,WebSphere和Jboss EAP在商业应用服务器领域占据重要地位。

    6.企业应用程序: Java企业版(Java EE)是一种流行的平台,为脚本和运行企业软件(包括网络应用程序和Web服务)提供API和运行时环境。甲骨文宣称Java在97%的企业计算机上运行。Java中更高的性能保证和更快的计算能力导致像Murex这样的高频交易系统被编入脚本中。它也是各种银行应用程序的中枢,它们将Java从前端用户端运行到后端服务器端。

    7.科学应用: Java是许多软件开发人员用于编写涉及科学计算和数学运算的应用程序的选择。这些程序通常被认为是快速和安全的,具有更高的便携性和低维护性。像MATLAB这样的应用程序使用Java来交互用户界面和作为核心系统的一部分。

    6.java相关名词解释

    • ​ Java SE java的标准版,也是核心和基础
    • ​ Java ME 主要用于嵌入式开发
    • ​ JAVA EE 提供了企业级应用开发的完整解决方案.

    JDK(Java Develpment Kit):java开发工具包,已经发展到JDK13,这里主要使用JDK1.8(JavaSE 8),比较稳定.

    JRE(Java Runtime Environment):java运行环境,包括java虚拟机.库函数,运行java的应用程序和Applet所必须的东西.

    JVM(Java virtual Machine):java虚拟机,用于执行字节码,定义了指令集,寄存器集,结构栈,垃圾回收等.JVM负责解释字节码,边运行边解释,速度会有慢一点.

    JIT(just in time):一次解释完再运行特定平台上的机器码.

    ​ Java语言是夸平台(平台指的是操作系统),但JVM不是跨平台的,选择对应版本你的操作系统。

    ​ Java运行过程三部分:

    ​ 加载代码: class loader完成

    ​ 校验代码: bytecode verifier完成

    ​ Java语言是夸平台(平台指的是操作系统),但JVM不是跨平台的,选择对应版本你的操作系统。

    ​ Java运行过程三部分:

    ​ 加载代码: class loader完成

    ​ 校验代码: bytecode verifier完成

    ​ 执行代码: runtime interpreter完成

    展开全文
  • 遗传算法(一) 遗传算法的基本原理

    千次阅读 多人点赞 2020-02-03 22:25:13
    它是模仿自然界生物进化机制发展起来的随机全局搜索优化方法,借鉴了达尔文的进化论孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取积累有关搜索空间的知识,并自适应地...

    遗传算法(一)遗传算法的基本原理

    1.概述

    遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
    相关概念:(高中所学)
    基因型(genotype):性状染色体的内部表现;
    表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
    进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
    适应度(fitness):度量某个物种对于生存环境的适应程度。
    选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
    复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
    交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
    变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
    编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
    解码(decoding):基因型到表现型的映射。
    个体(individual):指染色体带有特征的实体;
    种群(population):个体的集合,该集合内个体数称为种群 的大小。

    2.遗传算法的步骤

    开始循环直至找到满意的解。

    1.评估每条染色体所对应个体的适应度。

    2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。

    3.抽取父母双方的染色体,进行交叉,产生子代。

    4.对子代的染色体进行变异。

    5.重复2,3,4步骤,直到新种群的产生。

    结束循环。
    在这里插入图片描述在这里插入图片描述

    3.遗传算法的具体过程

    为了让讲解更为简便,我们先来理解一下著名的组合优化问题「背包问题」。

    比如,你准备要去野游 1 个月,但是你只能背一个限重 30 公斤的背包。现在你有不同的必需物品,它们每一个都有自己的「生存点数」(具体在下表中已给出)。因此,你的目标是在有限的背包重量下,最大化你的「生存点数」。
    在这里插入图片描述
    3.1 初始化(编码)
    这里我们用遗传算法来解决这个背包问题。第一步是定义我们的总体。总体中包含了个体,每个个体都有一套自己的染色体。

    我们知道,染色体可表达为二进制数串,在这个问题中,1 代表接下来位置的基因存在,0 意味着丢失。(译者注:作者这里借用染色体、基因来解决前面的背包问题,所以特定位置上的基因代表了上方背包问题表格中的物品,比如第一个位置上是 Sleeping Bag,那么此时反映在染色体的『基因』位置就是该染色体的第一个『基因』。)

    在这里插入图片描述
    现在,我们将图中的 4 条染色体看作我们的总体初始值
    3.2 编码补充
    二进制编码
    二进制编码由二进制符号0和1所组成的二值符号集。
    格雷码
    格雷码编码是其连续的两个整数所对应的编码之间只有一个码位是不同的,其余码位完全相同。
    二进制码转为格雷码:异或运算:同则为0,异则为1。
    浮点编码法
    二进制编码虽然简单直观,但明显地。但是存在着连续函数离散化时的映射误差。个体长度较短时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但增加了解码的难度,使遗传算法的搜索空间急剧扩大。
    所谓浮点法,是指个体的每个基因值用某一范围内的一个浮点数来表示。编码长度等于决策变量的个数。 在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。
    符号编码法
    符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。

    3.3 适应度函数
    接下来,让我们来计算一下前两条染色体的适应度分数。对于 A1 染色体 [100110] 而言,有:
    在这里插入图片描述
    类似地,对于 A2 染色体 [001110] 来说,有:
    在这里插入图片描述
    对于这个问题,我们认为,当染色体包含更多生存分数时,也就意味着它的适应性更强。因此,由图可知,染色体 1 适应性强于染色体 2。

    3.4 选择
    现在,我们可以开始从总体中选择适合的染色体,来让它们互相『交配』,产生自己的下一代了。这个是进行选择操作的大致想法,但是这样将会导致染色体在几代之后相互差异减小,失去了多样性。因此,我们一般会进行「轮盘赌选择法」(Roulette Wheel Selection method)。

    想象有一个轮盘,现在我们将它分割成 m 个部分,这里的 m 代表我们总体中染色体的个数。每条染色体在轮盘上占有的区域面积将根据适应度分数成比例表达出来。在这里插入图片描述
    基于上图中的值,我们建立如下「轮盘」。
    在这里插入图片描述
    现在,这个轮盘开始旋转,我们将被图中固定的指针(fixed point)指到的那片区域选为第一个亲本。然后,对于第二个亲本,我们进行同样的操作。有时候我们也会在途中标注两个固定指针,如下图:
    在这里插入图片描述
    通过这种方法,我们可以在一轮中就获得两个亲本。我们将这种方法成为「随机普遍选择法」(Stochastic Universal Selection method)。

    3.5 交叉
    在上一个步骤中,我们已经选择出了可以产生后代的亲本染色体。那么用生物学的话说,所谓「交叉」,其实就是指的繁殖。现在我们来对染色体 1 和 4(在上一个步骤中选出来的)进行「交叉」,见下图:
    在这里插入图片描述
    这是交叉最基本的形式,我们称其为「单点交叉」。这里我们随机选择一个交叉点,然后,将交叉点前后的染色体部分进行染色体间的交叉对调,于是就产生了新的后代。

    如果你设置两个交叉点,那么这种方法被成为「多点交叉」,见下图:
    在这里插入图片描述
    3.6变异
    如果现在我们从生物学的角度来看这个问题,那么请问:由上述过程产生的后代是否有和其父母一样的性状呢?答案是否。在后代的生长过程中,它们体内的基因会发生一些变化,使得它们与父母不同。这个过程我们称为「变异」,它可以被定义为染色体上发生的随机变化,正是因为变异,种群中才会存在多样性。

    下图为变异的一个简单示例:
    在这里插入图片描述
    变异完成之后,我们就得到了新为个体,进化也就完成了,整个过程如下图:
    在这里插入图片描述
    在进行完一轮「遗传变异」之后,我们用适应度函数对这些新的后代进行验证,如果函数判定它们适应度足够,那么就会用它们从总体中替代掉那些适应度不够的染色体。这里有个问题,我们最终应该以什么标准来判断后代达到了最佳适应度水平呢?

    一般来说,有如下几个终止条件: 1. 在进行 X 次迭代之后,总体没有什么太大改变。 2. 我们事先为算法定义好了进化的次数。 3. 当我们的适应度函数已经达到了预先定义的值。

    展开全文
  • Matlab基于腐蚀膨胀的边缘检测

    千次阅读 2017-07-12 13:28:14
    形态学运算只针对二值图像(二进制图像),并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的图像处理方法,起源于岩相对岩石结构的定量描述工作,在数字图像处理机器视觉领域中

    Matlab基于腐蚀和膨胀的边缘检测

    文/天神

     http://blog.sina.com.cn/s/blog_4a93ccea0100d25q.html

    一.课题背景:

    形态学运算只针对二值图像(二进制图像),并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的图像处理方法,起源于岩相对岩石结构的定量描述工作,在数字图像处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图像分析方法和理论。数学形态学是图像处理和模式识领域的新方法,其基本思想是:用具有一定形态的结构元素去量度和提取图像中的对应形状,以达到图像分析和识别的目的。优势有以下几点:有效滤除噪声,保留图像中原有信息,算法易于用并行处理方法有效实现(包括硬件实现),基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法,提取的边缘比较平滑,提取的图像骨架也比较连续,断点少。

     

    二、课题相关原理:

    形态学基本运算:

    特殊领域运算形式——结构元素(Structure Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。运算结果是输出图像的相应像素。运算效果取决于结构元素大小内容以及逻辑运算性质。

    常见形态学运算有腐蚀(Erosion)和膨胀(Dilation)两种。

    集合论是数学形态学的基础。有集合、元素、子集、并集、补集、位移、映像(镜像对称)、差集等集合的基本概念。

    对象和结构元素的3种关系:『对象X(Object)、结构元素B(Structure Element)』

    B include in X 包含于 、B hit X 击中(不全包含) 、B miss X  击不中 (不包含)

    平移、对称集:Bx=Uy{x+y}  B^=Uy{-y}

    腐蚀:一种消除边界点,使边界向内部收缩的过程。利用它可以消除小而且无意义的物体。B对X腐蚀所产生的二值图像E是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么B将完全包含于X中。

    膨胀:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。利用它可以填补物体中的空洞。B对X膨胀所产生的二值图像D是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么它与X的交集非空。

    腐蚀和膨胀运算中存在对偶原理:X⊕B,它是所有满足以下条件的点X'的集合:在B中存在一点y,而且在X中存在一点x,使得x'=x+y。

    基本运算1.开运算(先腐蚀后膨胀的过程):利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不明显改变原来物体的面积。OPEN(X,B)

    2.闭运算(先膨胀后腐蚀的过程):利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不明显改变原来物体的面积。CLOSE(X,B)

    通常由于噪声的影响,图像在阈值化后所得到的边界通常都很不平滑,物体区域具有一些噪声孔,而背景区域上散布着一些小的噪声物体,连续的开和闭运算可以有效的改善这种情况,而有时,我们需要经过多次腐蚀之,后再加上相同次数的膨胀,才能产生比较好的处理效果。

    另外两种是 3.击中,击不中变换HMT(模板严格匹配) 以及 4.边缘和骨架(Boundary and Skeleton)

     

    三、腐蚀和膨胀的Matlab实现:

    腐蚀:删除对象边界某些像素。

    膨胀:给图像中的对象边界添加像素。

    在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。在二进制图像中,如果任何像素值为1,那么对应的输出像素值为1;而在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素的最小值。在二进制图像中,如果任何一个像素值为0,那么对应的输出像素值为0。

    结构元素的原点定义在对输入图像感兴趣的位置。对于图像边缘的像素,由结构元素定义的邻域将会有一部分位于图像边界之外。为了有效处理边界像素,进行形态学运算的函数通常都会给出超出图像、未指定数值的像素指定一个数值,这样就类似于函数给图像填充了额外的行和列。对于膨胀和腐蚀操作,它们对像素进行填充的值是不同的。

    对于二进制图像和灰度图像,膨胀和腐蚀操作使用的填充方法如下表:

    腐蚀和膨胀填充图像规则表

     

              

    规                      则

    腐蚀  超出图像边界的像素值定义为该数据类型允许的最大值,对于二进制图像,这些像素值设置为1;对于灰度图像,unit8类型的最小值也为255。
    膨胀  超出图像边界的像素值定义为该数据类型允许的最小值,对于二进制图像,这些像素值设置为0;对于灰度图像,unit8类型的最小值也为0。

     

     

    通过对膨胀操作使用最小值填充和对腐蚀操作使用最大值填充,可以有效地消除边界效应(输出图像靠近边界处的区域与图像其它部分不连续)。否则,如果腐蚀操作使用最小值进行填充,则进行腐蚀操作后,输出图像会围绕着一个黑色边框。

    结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。二维平面结构元素由一个数值为0或1的矩阵组成。结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。三维或非平面的结构元素使用0,1定义结构元素在x和y平面上的范围,第三维z定义高度。

    (1)任意大小和维数的结构元素B原点坐标的获取:

    >> origin = floor((size(nhood)+1)/2)  

    其中nhood 是指结构元素定义的邻域(STREL对象的属性nhood)

    (2)创建结构元素:(strel函数来创建任意大小和形状的STREL 对象,支持如线形line、钻石形diamond、圆盘形disk、球形ball等许多种常用的形状)

    >> se = strel ('diamond' ,3)

    se = 


    Flat STREL object containing 25 neighbors.
    Decomposition: 3 STREL objects containing a total of 13 neighbors

    Neighborhood:
         0     0     0     1     0     0     0
         0     0     1     1     1     0     0
         0     1     1     1     1     1     0
         1     1     1     1     1     1     1
         0     1     1     1     1     1     0
         0     0     1     1     1     0     0
         0     0     0     1     0     0     0

      se返回了结构元素的有关信息。

    (3) 结构元素的分解

    为了提高执行效率,stel函数可能会将结构元素拆为较小的块,这种技术称为结构元素的分解。例如要对一个11×11的正方形结构元素进行膨胀操作,可以首先对1×11的结构元素进行膨胀操作,然后再对11×1的结构元素进行膨胀,通过这样的分解,在理论上可以使执行速度提高6.5倍。

    对圆盘形和球形结构元素进行分解,其结构是近似的,而对于其他形状的分解,得到的分解结果是精确的。可以调用getsequence函数来查看分解所得的结构元素序列。

    >> seq=getsequence(sel)
     
    seq =
     
    4x1 array of STREL objects
     
    >> seq(1)
     
    ans =
     
    Flat STREL object containing 5 neighbors.

    Neighborhood:
         0     1     0
         1     1     1
         0     1     0

     
    >> seq(2)
     
    ans =
     
    Flat STREL object containing 4 neighbors.

    Neighborhood:
         0     1     0
         1     0     1
         0     1     0

     
    >> seq(3)
     
    ans =
     
    Flat STREL object containing 4 neighbors.

    Neighborhood:
         0     0     1     0     0
         0     0     0     0     0
         1     0     0     0     1
         0     0     0     0     0
         0     0     1     0     0

     
    >> seq(4)
     
    ans =
     
    Flat STREL object containing 4 neighbors.

    Neighborhood:
         0     1     0
         1     0     1
         0     1     0

     

    1.图像膨胀的Matlab实现:

    可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。举个实例如下:

    步骤1,首先创建一个包含矩形对象的二值图像矩阵。

    >> BW=zeros(9,10);

    >> BW(4:6,4:7) =1

    BW =

         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     0     1     1     1     1     0     0     0
         0     0     0     1     1     1     1     0     0     0
         0     0     0     1     1     1     1     0     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0

    步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。

    >> SE=strel('square',3)

    SE =
     
    Flat STREL object containing 9 neighbors.

    Neighborhood:
         1     1     1
         1     1     1
         1     1     1

    步骤3,将图像BW和结构元素SE传递给imdilate函数。

    >> BW2=imdilate(BW,SE)

    BW2 =

         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     1     1     1     1     1     1     0     0
         0     0     1     1     1     1     1     1     0     0
         0     0     1     1     1     1     1     1     0     0
         0     0     1     1     1     1     1     1     0     0
         0     0     1     1     1     1     1     1     0     0
         0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0

    步骤4,显示结果。

    >> imshow(BW,'notruesize')

    >> imshow(BW2,'notruesize')

    膨胀前后效果图:

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

    2.图像腐蚀的Matlab实现:

    可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。

    以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。

    步骤1,读取图像cameraman.tif (该图像是Matlab当前目录下自带的图片)

    >> BW1=imread('cameraman.tif');

    步骤2,创建一个任意形状的结构元素对象

    >> SE=strel('arbitrary',eye(5));

    步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。

    >> BW2=imerode(BW1,SE);

    步骤4,显示操作结果

    >> imshow(BW1)
    >> figure,imshow(BW2)

     

    图像cameraman.tif 腐蚀前后的效果对比:

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

     

    3.膨胀和腐蚀联合操作(图像开运算操作):

    下面以图像开启为例,说明如何综合使用imdilate和imerode这两个函数,实现图像处理操作。

    步骤1,创建结构元素:

    >> clear;close all
    >> SE = strel('rectangle',[40 30]);   %注意:结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.

    步骤2,使用结构元素腐蚀图像:    %将会删除所有直线,但也会缩减矩形

    >> BW1=imread('circbw.tif');
    >> BW2=imerode(BW1,SE);
    >> imshow(BW2)
    >> figure,imshow(BW1)

    步骤3,恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.

    >> BW3=imdilate(BW2,SE);
    >> figure,imshow(BW3)

    最终效果如下图:

    a.原始图像->b.腐蚀后的图像->c.膨胀后的图像

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

    4.基于膨胀与腐蚀的形态操作——骨架化和边缘检测

    (1)骨架化:

    某些应用中,针对一副图像,希望对图像中所有对象简化为线条,但不修改图像的基本结构,保留图像基本轮廓,这个过程就是所谓的骨架化。提供了专门的函数bwmorph,可以实现骨架化操作。

    >> clear;close all
    >> BW1=imread('circbw.tif');
    >> BW2=bwmorph(BW1,'skel',Inf);
    >> imshow(BW1)
    >> figure,imshow(BW2)

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

    (2)边缘检测

    对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。在一副图像中,如果图像某个像素满足以下两个条件:

    1.该像素状态为ON,

    2.该像素邻域中有一个或多个像素状态为OFF。

    则认为该像素为边缘像素。

    Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。

    以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。

    >> clear;close all
    >> BW1=imread('circbw.tif');
    >> BW2=bwperim(BW1);
    >> imshow(BW1)
    >> figure,imshow(BW2)
    >>

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

     

    基于腐蚀和膨胀的形态操作函数如下:

    bwhitmiss 图像逻辑"与"操作,该函数使用一个结构元素对图像进行腐蚀操作后,再使用第二个结构元素对图像进行腐蚀操作

    imbothat 从原始图像中减去经过形态关闭后的图像,该函数可用来寻找图像中的灰度槽

    imclose 闭合操作.首先对图像进行膨胀,然后再对膨胀后的图像进行腐蚀,两个操作使用同样的结构元素

    imopen 开启操作,首先对图像进行腐蚀,然后再对腐蚀后的图像进行膨胀,两个操作使用同样的结构元素

    imtophat 从原始图像中减去形态开启后的图像,可以用来增强图像的对比度

     

    边缘检测算子:Roberts(2×2)、Prewitt(3×3)、Sobel(3×3)、Isotropic Sobel (3×3)、log、candy、zerocross。Matlab提供了专门的边缘检测edge函数。(用法详请参见Matlab图像处理函数大全

     

    四、所需用到的图像基本操作

    1.图像类型转换:mat2gray(数据矩阵转灰度图像)、rgb2gray(彩色转灰度)、im2bw(将真彩色、索引色、灰度图转换成二值图)

    I=mat2gray(A,[amin amax])  %其中[amin amax] 是[0,1]间的任意值

    I=mat2gray(A)                %数据矩阵转换为可视化灰度图像

    I=rgb2gray(RGB)            %输入是真彩色,则输出图像类型可以是unit8或double

    newmap=rgb2gray(map)  %输入输出图像都是double型的。

    BW=im2bw(I,level)       %灰度图像二值化,level是归一化的阈值,取值范围在[0,1]之间

    BW=im2bw(X,map,level)  %索引色图像二值化(map为调色板)

    BW=im2bw(RGB,level)    %彩色图像二值化

     

    2.图像的块边缘操作:(对图像某一部分块进行操作,一次只处理一个图像像素)

    像素的边缘是个像素集,由该像素(中心像素)的相关位置确定。像素的边缘就是一个矩形块,当操作从图像矩阵的一个元素移动到另一个元素时,该矩形块也以相向的方向同时移动。

    通常,对于m×n的边缘来说,中心像素的计算方法:floor([(m+1 n+1)]/2)

    Matlab对图像边缘操作的过程如下:

    步骤1,选择像素,即读入所需要的图片像素。

    >>I=imread('tire.tif');

    步骤2,确定该像素的边缘块。

    >>f=inline('max(x(:))');

    步骤3,调用适当的函数对边缘中的元素进行操作

    >>I2=nlfilter(I,[3 3],f);    %对图像边缘进行滤波操作

    步骤4,查找对应于输出图像中心像素的每个像素点,重复(1)~(4)步骤。

    >>imshow(I);

    >>figure,imshow(I2);

    Matlab基于腐蚀和膨胀的边缘检测【毕业设计】Matlab基于腐蚀和膨胀的边缘检测【毕业设计】

     

    注意:本文是我完成本学期毕业设计所摘录的一些资料包含一些原理加个人思考总结的一些设计思路,不代表毕业设计的全部,希望对那些正在研究Matlab图像处理的朋友能够带来一些启示。

     

    展开全文
  • 该项目起源于探索可视化有界高度整数矩阵的特征值的分布。 此后,该项目发展到包括许多其他类别的矩阵。 名称固定,我们通常将这些图像的特征值称为波希米亚特征值。 可以找到Bohemian特征值项目上的幻灯片。 完整...
  • MATLAB 基础与通信系统仿真

    千次阅读 多人点赞 2020-07-31 21:39:27
    1.1 1 MATLAB起源 1.1 2 MATLAB 的特点 1.2 MATLAB 程序设计 1.2.1 MATLAB 工作环境 1.2.2 MATLAB 的帮助系统 1.2.3 MATL店的基本操作 1.2.4 MATLAB 图形处理数据可视化 1.2.5 M 文件编程 1.2.6 文件操作 1 3 ...


    说明:pdf→word后码字修改,时间能力有限,难免有误,读者发现可评论指出,及时更新,谢谢谅解!

    第 1 章 MATLAB 基础与通信系统仿真

    MATLAB 语言是一种广泛应用于工程计算及数值分析领域的新型高级语言 ,自 1984 年由美国 MathWorks 公司推向市场以来 ,历经二十多年的发展与竞争 ,现己成为国际公认 的最优秀的工程应用开发软件 。MATLAB 功能强大 、简单易学 、编程效率高 ,深受广大科 技工作者的欢迎 。在欧美各高等院校 ,MATLAB 已经成为线性代数、自动控制理论、数字 信号处理 、动态系统仿真 、图像处理等课程的基本教学工具 ,成为本科生 、硕士生及博士 生必须掌握的基本技能 。本章首先对 MATLAB 的基本用法及通信系统仿真做一简单介绍。

    1.1 MATLAB 简介

    MATLAB 软件系列产品是一套功能强大的数值运算和系统仿真软件 ,被誉为“ 巨人肩膀上的工具”。借助于 MATLAB,能够迅速地测试设计构想 ,综合评测系统性能 。

    1.1.1 MATLAB 的起源

    20 世纪 70 年代 ,时任美国新墨西哥大学计算 机科学系主任的 Cleve Moler 出于减轻学 生编程负担的动机 ,为学生设计了一组调用 L时PACK 和 EISPACK 矩阵软件工具包库程序 的“通俗易用” 的接口,即用FORTRAN 编写的萌芽状态的 MATLAB ( MATrix LABoratory , 矩阵实验室)。1984 年,由 Little 、Moler 、Steve Bangert 合作成立 MathWorks 公司,并把 MATLAB 正式推向市场 。从这时起 ,MATLAB 的内核采用 C 语言编写 ,而且除原有的数 值计算能力外 ,还新增了数据图视功能 。与大家常用的 FORTRAN 和 C 等高级语言相比 , MATLAB 的语法规则更简单 ,更贴近人的思维方式 ,被称为 “草稿纸式的语言”。它以超 群的风格与性能风靡全世界 ,成功地应用于各工程学科的研究领域 。目前,MATLAB 软件 版本每年都在不断更新之中 ,新版本兼容旧版本 ,旧版本的程序可以不加修改地在新版本 中运行。但新版本的程序不 一定能在旧版本中运行 ,这点读者需要注意 。

    1.1.2MATLAB 的特点

    为什么 MATLAB 如此备受青睐?就让我们来看 一下 MATLAB 有什么特点吧 。

    1. 数值计算和符号计算功能
    MATLAB 具备强大的数值计算和符号计算功能 。数值计算功能包括:矩阵运算 、多项式 和有理分式运算 、数据统计分析 、数值积分等 。它的数值计算速度快 ,精度高,收敛性好, 函数库功能强大 。此外,在解决数学 问题的过程中 ,往往需要继续大 量的符号计算和推导 , MATLAB的符号计算可以得到问题的解析 。强大 的数值计算功能和符号计算功能是 MATLAB 优于其他计算软件的决定因素之 一。
    2. 强大的 MATLAB 编程语言
    MATLAB 除了命令行的交互式操作以外 ,还可以以程序方式工作 。使用 MATLAB 可以 很容易地实现 C 或 FORTRAN 语言的几乎全部功能 ,包括 Windows 图形用户界面的设计 。
    3. 具有很好的图形功能
    MATLAB 可以轻而易举地绘制 二维、三维及四维图形 ,并可进行图形和坐标的标识 、视 角和光照设计 、色彩精细控制等 。利用图形用户界面 GUI 制作工具 ,可以制作用户菜单和控 件。使用者可以根据自己的 需求编写出满意的图形界面。
    4 . 可以直接处理声音和 图像文件
    MATLAB 支持的声音和图像文件格式很多 ,如 wav 、bmp ,gif, pcx 、jpeg 等文件。 在 MATLAB中只需要简单的命令 ,就可以将声音文件或图像文件读入系统中并对它 们进行 相应的处理 。而如果使用高级语言 ,需要程序员自 己对文件格式有一定的了解 ,然后再根据 文件格式进行相应的数据读取 。
    5. 具有功能强大的工具箱
    MATLAB 包括基本部分和各种可选的工具箱 。基本部分中有数百个内部函数 ,可以满足 一般应用的需要。其工具箱分为两大类 :功能性工具箱和学科性工具箱 。功能性工具箱主要 用来扩充其符号计算功能 、可视建模仿真功能及文字处理功能等 。学科性工具箱专业性比较 强,如控制系统工具箱 、信号处理工具箱、通信系统工具箱、神经网络工具箱 、最优化工具 箱、金融工具箱等 ,用户可 以直接利用这些工具箱进行相关领域 的科学研究。
    6. 使用方便 ,具有很好的扩展功能
    使用 MATLAB 语言编写的程序可以直接运行 ,无须编译 。通过 MATLAB Compiler 和 CIC++ Math Libraby ,用户还可以将 MATLAB 语言编写的 M 文件转变为独立于平台的 EXE 可执行文件 。
    MATLAB 的应用接 口程序 API 是 MATLAB 提供的十分重要的组件 ,由一系列接口指令
    组成。用户可在 FORTRAN 或 C 语言中 ,把 MATLAB 当作计算引擎使用。
    7. 强大的 Simulink 仿真工具
    Simulink 是 MATLAB 的又一个重要的分支产品,是一个结合了框图界面和交互仿真能 力的系统级建模 、仿真和分析工具。它以 MATLAB 的核心数学、图形和语言为基础 ,可以让用户毫不费力 的完成从算法开发 、仿真到模型验证的全过程 。Simulink lockset 提供了丰富 的专业模块库 ,广泛用于控制 、DSP、通信等系统仿真领域 。用户也可以利用己有的模块或 自己编写的 C 程序或 MATLAB 程序建立 自己的模块及模块库 。
    正是由于 以上特点,使 MATLAB 在短时间 内获得了广泛 的流行。现在从通信 、自动控 制、航空航天 、汽车工业 、工业设计 ,MATLAB 都凭借其强大 的功能获得用武之 地。广大学 生可 以使用 MATLAB 来帮助进行信号处理、通信原理 、自动控制等课程的学习:科技人员 可以使用 MATLAB 进行理论研究、算法开发 、产品原型 的设计与仿真等。下面就来介绍一下 MATLAB 的使用。

    1.2 MATLAB 程序设计

    “工欲善其事 ,必先利其器 ”。要熟练使用 MATLAB ,必须掌握 MATLAB 程序设计方法 。 在这一节中,主要介绍 MATLAB 的工作环境,MATLAB 的基本语法及用 MATLAB 进行图 形处理和数据可视化的方法 ,最后介绍 M文件编程。

    1.2.1 MATLAB 工作环境

    MATLAB 安装比较简单 ,与 Windows 下其他软件的安装大同小异,因此,就不再浪费 篇幅介绍 MATLAB 的安装。MATLAB 安装完成后 ,会自动在 Windows 桌面上生成一个快捷 方式,它是指向安装目录下\bin\win32\matlab.exe 的链接,双击它即可打开 MATLAB 集成环 境的基本窗口 ,如图 1-1 所示。
    在这里插入图片描述图 1- 1 MATLAB 集成环境窗口

    在 MATLAB 集成环境窗口中 ,可以看到 ,除了标题栏 、菜单栏 、工具条外,它还包含 三个窗口,分别是命令窗口 ( Command Window ) 、工作区变量窗口 ( Workspace ) 、历史命令窗口 (Command History ) 及一个项目启动菜单 ( Start )。

    1. 命令窗口
    命令窗口是 MATI.AB 提供的人机交互窗口 。任何 MATLAB 自带的命令及函数都可以在 此窗口中输入后立即执行 。其执行的最终结果也在此窗口中显示 。如输入 “ 100+300 ”,MATLAB 命令窗口显示如下 :
    在这里插入图片描述

    其中,第 1行是输入的命令 ,第2 3 行是MATLAB 执行命令后的输出结果 。ans 是MATLAB
    默认的输出结果变量名 。如果指定了输出变量名 ,则 ans 会被指定的变量名代替。 例如:
    在这里插入图片描述

    是不是就像使用计算器 一样简单?
    2. 工作区变量窗口
    工作区变量窗口显示当前工作区中定义的变 量及它们的值,例如 ,在命令窗口中执行完 刚才输入的两条命令后 ,工作区变量窗口中显示 的内容如图 1-2 所示。
    在这里插入图片描述
    图 1-2 MATLAB 的工作区变量窗口

    可以看到 ,刚才输入的两条命令生成的输出变量的值都显示在工作区变量窗口中 。由于 MATLAB 中的变量类型很多 ,有的变量代表的可能是一个矢量或是一个矩阵 ,这时在工作区 变量窗口中一行显示不下 ,如果想查看矢量或矩阵中所有元素的值 ,可在工作区变量窗口中 双击代表该矢量或矩阵的变量 ,MATLAB 会单独显示该变量中的所有元素 的值,如图 1-3 所 示。与图 1-2 相比,图 1-3 多了一个 “Array Editor,,窗口,类似于 Excel 表格 ,如果变量有多 个元素 ,该窗口将显示出变量所有元素的值 。由于 ans 变量只有一个元素 ,因此,窗口中也 只显示了一个值。查看完毕后 ,单击窗口右上角的叉号按钮 ,即可关闭。
    3. 历史命令窗口
    在历史命令窗口中 ,显示 MATLAB 最近执行过的相关命令 ,用户可以方便地在该窗口 中查阅己执行过的命令 ,在该窗口中双击某条命令 ,便可重新执行该命令 。
    4. 项目启动菜单
    项目启动菜单类似于 Window s 系统左下角的 “ 开始” 菜单 ,主要帮助用户快速启动 相关的内容 。
    MATLAB 的退出与普通应用自芋一样,值得一提的是,它有一个专有的快捷键 “Ctrl+Q”。
    在这里插入图片描述
    图 1-3 单独查看某个变量所有元素的值

    1.2.2 MATLAB 的帮助系统

    MATLAB 提供的命令和函数很多 ,在学习 MATLAB 的过程中,不可避免地要遇到 一些 不会使用的命令和函数 ,这时可以通过 MATLAB 提供的帮助系统来了解函数的使用方法 。 学会使用这些帮助方法 ,对于快速掌握 MATLAB 是必不可少的。下面介绍一下MATLAB 的帮助系统。
    1. 查看命令或函数帮助
    当己知命令或函数名 ,想了解该命令或函数 的具体应用方法是,可以在命令窗口中输入 help 帮助命令 ,其格式为 “help ×××飞 其中 ,×××代表要查询的命令或函数名 。例如 ,如果 想了解 sin 函数的应用方法 ,在命令窗口中输入命令 。
    在这里插入图片描述
    MATLAB 执行后,命令窗口中显示出如下内容 :
    在这里插入图片描述

    在以上的 sin 函数帮助信息中 ,首先介绍了 sin 函数是什么函数及它的功能 ,接着给出了与 sin 函数相关的其他函数名称,用户可以利用 help 命令查询这些相关函数 ,最后两行给出 了 sin 函数帮助信息的相关文档链接 ,打开该链接可以更加详细的了解 sin 函数的有关介绍。

    其他命令或函数的帮助信息查询 方法与 sin 函数类似,只要 MATLAB 自带有用户所查询 的命令或函数,MATLAB 都会给出相应的帮助信息 ,内容显示格式与 sin 函数的帮助信息格 式类似。因此,学会利用 help 命令是掌握 MATLAB 命令和函数使用方法的 必备技能。

    2. 联机帮助系统
    当知道相关的命令或函数名时 ,可以使用 help 命令,当对需要使用的相关命令或函数不 甚了解 ,甚至不知道需要利用 的命令或函数在 MATLAB 中的名字是什么时该怎么办 ? MATLAB 的联机帮助系统可以很好的解决这 一问题。
    在 MATLAB 集成环境中 ,选择菜单 “Help- Matlab Help ” 或者单击工具栏中 的 “ ?” 图标就可以启动 MATLAB 的联机帮助系统,其界面如图 1-4 所示。
    在这里插入图片描述
    图 1-4 MATLAB 的联机帮助系统

    可以看到 ,MATLAB 联机帮助系统界面主要包括两个主窗口 ,帮助导航窗口 ( HelpNavigator ) 和内容显示窗口 。帮助导航窗口主要包括内容 ( Contents) 、索引 ( lndexs ) 、查询(Search ) 、演示 ( Demρs) 四个标签项。单击相应的标签项可以切换到相应的子窗口 。内容 显示框用来为用户显示所查询的内容 。

    例如 ,假设要对某个数求它的正弦值 ,但不知道 MATLAB 中的相应的函数名,单击 Search 标签项 ,切换到查询子窗口 ,在文本框中输入 sin ,回车后 MATLAB 会列出所有包含 sin 字 符串的函数名 ,其中第一个正是要查询的 sin 函数,这时在右边的内容显示窗口显示了有关 sin 函数的说明及使用 sin 函数的例子。

    此外 ,演示子窗口也是 一个学习使用 MATLAB 的重要窗口 。它里面包含了许多利用 MATLAB 进行处理问题的演示。通过观看这些演示 ,可以很快了解 MATLAB ,高效地寻找 到相关问题的解决方法 。

    总之,熟练掌握 MATLAB 联机帮助系统的使用 ,可以大大提高 MATLAB 的应用水平。

    3. PDF 文件帮助系统
    为了方便用户打印 ,MATLAB 还提供了 PDF 格式的帮助文档 ,它们在安装文件夹 help\pdf_doc 目录下。如作者的MATLAB 安装目录为 D:\MATLAB7, PDF 帮助文档在目录 D:\MATLAB7\help\pdf_doc 下。

    4. MATLAB 网络资源
    MATLAB 的官方网站如下:
    http://www.rna 出works.com
    网站上提供了大量的 MATLAB 的相关资料及源代码 ,读者可充分利用它们来解决自己学习及科研时遇到的问题 。

    1.2.3 MATLAB 的基本操作

    MATLAB 功能强大,但在实际应用时,大部分都是一些最基本的操作 ,掌握了这些基本 操作,可以解决常见的普通问题 。而更复杂的编程,可以通过组合 一些基本的操作来实现 。
    1. 变量
    与其他高级语言如 C 语言和 FORTRAN 语言相比 ,MATLAB 的变量不需要事先声明类 型,用 MATLAB 进行数学计算 ,就像用计算器计算算术一样方便 。
    1 ) 变量与赋值
    MATLAB 中的变量命名以字母开头 ,后接字母 、数字或下画线的字符序列 ,最多 63 个 字符 ,区分字母的大小写 。赋值语句为

    变量表达式
    例如:
    x=5
    表示将 5 赋值给 x。
    MATLAB 内部有很多预定义变量和常数 ,用以表达特殊含义 。常用的有如下几种 。
    (1)变量 ans :指示当前未定义变 量名的答案。
    (2)常数 eps:表示浮点相对精度,其值是从 1.0 到下一个最大浮点数之间的差值 。该变 量值作为 一些 MATLAB 函数计算的相对浮点精度 ,按 IEEE 标准 ,eps=2-52,近似为 2.2204e–O 16。
    (3)常数 Inf:表示无穷大 。当输入或计算中有除以 0 时产生 Inf。
    (4)虚数单位i、j :表示复数虚部单位 ,相当于 J习。
    (5)NaN :表示不定型值 ,是由 αo 运算产生的。
    (6)常数 pi :表示圆周率π,其值为 3.141 592 653 589 7 。
    (7)nargin :函数的输入变量个数 。
    (8)nagout :函数的输出变量个数 。
    2 ) 变量的删除与修改
    clear 命令用于删除工作 空间中的变量,who 和 whos 显示驻留的变量名清单 。例如 ,输 入 x=l 和 y=2 后,分别输入 who 和 whos 命令 ,MATLAB 显示如下:
    在这里插入图片描述
    可见,whos 命令比 who 提供了更详细的关于变量的信息。
    3 ) 局部变量和全局变量
    局部变量是指那些每个函数体内自己定义的 ,不能从其他函数和 MATLAB 工作空间访 问的变量 。全局变量是指用关键字 “global ” 声明的变量 。全局变量名应尽量大写 ,并能反映它本身的含义。如果需要在工作空 间和几个函数中都能访问一个全局变量 ,必须在工作空间和这 几个函数中都声明该变量是全局的 。
    2. 矩阵及其运算
    MATLAB 具有强大的矩阵运算和数据处理功能 ,对矩阵的处理必须遵从代数规则 。
    1 ) 一般矩阵的生成
    对于一般的矩阵 MATLAB 的生成方法有多种 。最简单的方法是从键盘直接输入矩阵元 素。直接输入矩阵元素时应注意:各元素之间用空格或逗号隔开 ,用分号或回车结束矩阵行, 用中括号把矩阵所有元素括起来 。例如,在工作空间产生一个 3 ×3 矩阵 A 。输入如下 :
    》A=[l 2 3; 4 5 6; 7 8 9]

    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    若要显示整行或整列 ,则可以用 冒号(:)来表示 。冒号(:)代表矩阵中行(ROWS )或列
    (COLUMNS)的全部。例如 ,执行命令
    在这里插入图片描述
    就会显示第 2 列的全部 ,结果为
    在这里插入图片描述

    2 ) 特殊矩阵的生成
    ( 1) eye (m,n)或 eye (m)产生 mn 或 mm 的单位矩阵。例如 :
    在这里插入图片描述
    ( 2 ) zeros (m,n) 或 zeros (m) 产生 m刊 或 mm 的零矩阵。例如:
    在这里插入图片描述
    ( 3) ones (m,n) 或 ones (m) 产生 m
    n 或 mm 的全部元素为 1 的矩阵。例如 :
    在这里插入图片描述
    ( 4 ) randn (m,n) 或 randn (m) 产生 m
    n 或 m*m 的随机矩阵。矩阵中每一行 ,每一列元 素都服从均值为 0,方差为 l 的高斯分布 。例如 :
    在这里插入图片描述

    ( 5) rand(m,n) 或 rand (m)产生 mn 或 mm 的随机矩阵。矩阵中每一行,每一列元素都 服从[O, 1]上的均匀分布 。例如 :
    在这里插入图片描述
    randn 和 rand 函数是通信系统仿真中常用的函数 ,经常用它们来产生各种不同要求的随 机数,例如 ,产生 8 个噪声功率为 10 的高斯白噪声样值如下:
    在这里插入图片描述
    其中 ,sqrt函数是开方运算。

    3 ) 矩阵运算

    矩阵的运算有基本运算和函数运算两种类型 。基本运算包括矩阵的加、减、乘、除、乘 方、求转置 、求逆等 ,其主要特点是通过 MATLAB 提供的基本运算符+ 、-、*、/(\)、^等即可完成。函数运算主要是通过调用 MATLAB 系统内置的运算函数来求取矩阵的行列式(det(A)) ,求秩(rank(A)) ,求特征值和特征矢量 ( [V, D ]=eig(A)) ,求 Jordan 标准形(jordan(A) )和矩阵分解等 。需要用时可以参阅联机帮助和相 关参考书。例如:
    在这里插入图片描述

    说明:程序的第1 行定义了矩阵 A ,其中语言最后的 “,” 表示让 MATLAB 在执行后不 在命令窗口输出当前运行结果值 。在后面讲到的m 脚本文件编程时 ,因为有很多结果是中间 结果值,让 MATLAB 不显示这些中间结果值可提高程序的执行速度 。第2 行定义了矩阵 B。 第 3 行是计算矩阵 A 和 B 的和。最后的“%” 表示后面的字符是注释 ,MATLAB 在执行时会忽略掉本行%后面的内容 。在编写M 文件时,注释可以对程序的功能加深理解 。第 4 行是求矩阵 B 的转置矩阵。需要注意的是如果矩阵 B 是复数矩阵 ,则 B’求的是 B 的共辄转置矩 阵,转置矩阵 的命令是 B:。第 5 行是求矩阵 A 和 D 的乘积,它们之间的运算满足矩阵乘法 的要求。此外,MATLAB 还提供了两个维数相同矩阵对应元素乘除运算命令 ,分别是 “.*” 和 “./”,如第 6 行和第 7 行所示 。第 8 行是求矩阵 E 的行列式,第 9 行和第 10 行都是求矩 阵 E 的逆矩阵。其中,inv 函数是 MATLAB 提供的专 门求方阵的逆矩阵的函数 。以上命令的 执行结果如下:
    在这里插入图片描述

    1.2.4 MATLAB 图形处理和数据可视化

    作为一个功能强大 的工具软件 ,MATLAB 具有很强的图形处理功能,提供了大量的 二维、 三维图形函数 。由于系统采用面向对象的技术和丰富的矩阵运算 ,所以,在图形处理方面非常方便又高效 。

    1. plot 函数
      函数格式:plot (x,y),其中 x 和 y 为坐标矢量。
      函数功能:以矢量 x 、y 为轴,绘制曲线。
      例 1.1 在区间0=<x=<2pi 内,绘制正弦曲线 户sin(x) ,其程序为在这里插入图片描述
      说明 :程序的第 1 行表示以 0 为初始值 ,pi/100 为步长,2*pi 为结束值生成矢量 x。第2行表示计算矢量 x 的 sin 值。第3 行是画出以 x 为横坐标 ,y 为纵坐标绘制曲线 。程序执行后
      生成的图形如图 1-5 所示。
      在这里插入图片描述图 1-5 y=sin(x)曲线

    plot 函数还可以为 plot(x,yl ,x,y2, x,y3,···)形式,其功能是以公共 矢量 x 为 x 轴,分别以y1. y2. y3,为 y 轴,在同一幅图内绘制出 多条曲线。
    例 1.2 同时绘制正、余弦两条曲线 yl=sin(x)和 y2=cos(功,其程序为
    在这里插入图片描述
    程序运行结果如图 1-6 所示。
    在这里插入图片描述
    图 1-6 同时绘制sin(x)和 cos(x)曲线

    plot 可以以不同颜色与线形 表示不同的曲线 ,其格式为 plot(x,y l ,'cs’,),其中 c 表示颜 色,s 表示线形。
    例 1.3 用不同线形和颜色重新绘制例 1.2 图形,其程序为
    在这里插入图片描述

    其中,参数’go’和'b .’表示图形的颜色和线形 。g 表示绿色, 表示图形线形为圆圈 ;b 表示蓝 色,表示图形线形为点画线 。更多参数说明,读者可以查看MATLAB 帮助。程序运行结果, 如图 1-7 所示。
    在绘制图形的同时 ,可以对图形加上 一些说明,如图形名称 、图形某一部分的含义 、坐 标说明等 ,将这些操作称为添加图形标记 。其命令如下 :
    在这里插入图片描述
    在这里插入图片描述
    图 1-7 plot 函数的不同颜色和线形

    其中 ,title 用来说明图形的名称 ,xlabel 用来说明横坐标代表的参数含义 ,ylabel 说明纵坐标 代表的参数含义 ,text 是在图形的特定位置添加 注释 ,x(190)代表 x 矢量的第 190 个值,因此 本例中分别在坐标 (x(190),y1(190))和坐标(x(190),y2(190))处添加注释 。上述命令执行后 ,结果
    如图 1-8 所示。
    用户若对坐标系统不满意 ,可利用 axis 命令对其重新设定 。最常用的命令格式为 缸is([刀nin xmax ymin ymax]) ,分别设定 x 轴和 y 轴的最小值和最大值 。其他的命令格式 ,读 者请参考 MATLAB 帮助。
    MATLAB 绘出的图形默认是不显 示坐标网格 ,让图形显示坐标网格的命令是 grid on , 不显示坐标网格的命令是 grid off 。给图形加图例命令为 legend o 该命令把图例放置在图形空 白处,用户还可以通过鼠标移动图例 ,将其放到希望的位置 。其命令格式为 legend(’曲线 1 图例说明’J 曲线2 图例说明γ )。
    在这里插入图片描述
    图 1-8 图形添加说明

    例 1.4 在坐标范围 0运x 2π,一2 y 运2 内重新绘制例 1.3 图形,并显示坐标网格和图 例说明 。其程序为
    在这里插入图片描述

    说明:在本程序中第1行用到了 linespace 函数,它的作用是以第 1个参数和第 2 个参数为区间,生成含有第3 个参数元素的矢量 。本例中就是在[ O, 2*pi]生成 200 个数据元素的矢量。 程序的第 10 行是设定 x 轴范围为[0,2啊,y 轴范围为[ -2, 2] 。第 11 行是让 MATLAB 在图形 上显示坐标网格 ,最后一行加上图例说明 。程序运行结果如图 1-9 所示。
    2. subplot 函数
    subplot(m,n,p)命令将当前图形窗口分成 mxn 个绘图区 ,即每行 n 个,共 m 行,区号按行优先编号 ,且选定第 p 个区为当前绘图区 。
    在这里插入图片描述
    图 1-9 例 1.4 程序运行结果

    例 1.5 在同一个图形窗口中 ,同时绘制 y1=sinx,y2=cosx,y3=sin(2x), y4=(cos2x), 0=<x=<2pi程序为
    在这里插入图片描述
    说明:程序的第 3 行把整个绘图区分为 2×2 区域,且指定了当前绘图区为 1,第 8、13、18 行分别指定当前绘图区为 2、3、4。程序运行结果如图 1-10 所示。
    在这里插入图片描述
    图 1-10 例 1.5 程序运行结果

    3. 多图形窗口
    需要建立多个图形窗口 ,绘制并保持每 一个窗口的图形 ,可以使用 figure 命令 。每执行 一次 figure 命令,就创建一个新的图形窗口 ,该窗口自动为活动窗口 ,若需要还可以返回该 窗口的识别号码 ,称该号码为句柄 。句柄显示在图形窗口的标题栏中 ,即图形窗口标题。用 户可通过句柄激活或关闭某图形窗口 ,而 缸is、xlabel 、title 等许多命令也只对活动窗口有效 。
    例 1.6 用 figure 命令重新绘制例 1.5 中的 y1,y2,y3,y4。
    在这里插入图片描述
    说明:程序与例 1.5 的不同分别是在第 3, 8、13、18 行用 figure 命令代替了 subplot 命 令。程序的运行结果如图 1-11 所示。在这里由于排版的需要 ,把 4 个窗口显示在一起。程序 运行结束后 ,窗口 4 实际上是活动窗口 。
    在这里插入图片描述
    图1-11 例 1.6 程序运行结果

    4. hold 命令
    在使用 plot 函数画图时,原有的图形会被新的图形所代 替。若想保留原有的图形 ,并己 存在图形窗口中用 plot 命令继续添加新的图形内容 ,可使用图形保持命令 hold o 发出命令 hold on 后,再执行 plot 命令 ,在保持原有图形或曲线的基础上 ,添加新绘制的图形。

    例 1.7 hold 命令示例如下 :
    在这里插入图片描述
    说明:程序的执行结果与程序例 1.5 的结果基本相似 ,这里就不再给出 。读者可以尝试 去掉程序中第 5 行中的 hold on 命令 ,再次执行程序 ,可以看出前后两者的不同 。
    5. 对数坐标图形
    在通信系统仿真中,很多情况下需要绘制对数坐标图形 。例如 ,各种信道中误码率随信 噪比的变化曲线,这时,纵坐标 (误码率) 一般采用对数坐标 。MATLAB 也提供了绘制对数 坐标的函数 ,介绍如下 。
    (1) loglog(x,y) 双对数坐标 ,横坐标和纵坐标都采用 x,y 的对数。
    ( 2) semilogx(x,y):单对数坐标,横坐标采用 x 的对数。
    ( 3) semilogy(x,y ):单对数坐标 ,纵坐标采用 y 的对数。
    例 1.8 绘制 y=|1500×(sin(2x)+cos(x)|+1 的双对数坐标图 。程序为
    在这里插入图片描述
    程序执行结果如图 1-12 所示。
    在这里插入图片描述
    图 1-12 例 1.8 程序运行结果

    从图 1-12 可以看出 ,横坐标和纵坐标都采用了 几y 的对数值。
    例 1.9 分别以 x 轴为对数和以 y 轴为对数重新绘制上述曲线 。
    在这里插入图片描述
    在这里插入图片描述
    图 1-13 例 1.9 程序运行结果

    除 plot 等基本绘图命令外 ,MATLAB 系统还提供了许多其他特殊绘图函数 ,这里就不 再一一举例 ,更详细的信息用户可随时查阅在线帮助 ,其对应的 M-file 文件存放在系统
    \matlab\toolbox\matlab 目录下。

    1.2.5 M 文件编程

    通常 MATLAB 以指令驱动模式工作 ,即在 MATLAB 窗口下当用户输入单行指令时 , MATLAB 立即处理这条指令,并显示结果,这就是 MATLAB 命令行方式。在命令行操作时 , MATLAB 窗口只允许一次执行一行上的一个或几个语句。前面所举的例子都是基于这种方式的。
    在 MATLAB 窗口输入数据和命令进行计算时 ,当处理复杂问题和大量数据时是不方便 的。命令行方式程序可读性差 ,而且不能存储 ,对于复杂的问题,应编写成能存储的程序文 件,即 M文件。
    首先将 MATLAB 语句构成的程序存储成 以.m 为扩展名的文件 ,然后再执行该程序文件 ,
    这种工作模式称为程序文件模式 。程序文件不能在指令窗口下建立 ,因为,指令窗口只允许 一次执行一行上的一个或几个语句 。
    M 文件有两种形式 :脚本文件 ( Script File ) 和函数文件 ( Function File ) 。这两种文件的
    扩展名 ,均为 “. m ”。
    1. M 脚本文件
    对于复杂计算 ,采用脚本文件最为合适 。脚本文件的构成比较简单,只是一串按用户意 图排列而成的 (包括控制流向指令在内的) MATLAB 指令集合 。MATLAB 只是按文件所写 的指令执行。脚本文件运行后 ,所产生的所有变量都驻留在 MATLAB 基本工作空间 ( Base Workspace ) 中。只要用户不使用清除指令(Clear ) , MATLAB 指令窗口不关闭,这些变量 将一直保存在基本工作空间中 。
    M 文件的类型是普通的文本文件 ,可以使用系统认可的文本文件编辑器来建立 M 文件。
    其具体创建方法如下 :
    (1) 在 MATLAB 命令窗口选择菜单 “file→New →M-file ” (或者单击工具栏的口按钮〉, 如图 1-14 所示。这时系统会弹出系统自带的 M 文件编辑器 ,类似于记事本和写字板 ,如图
    1-15 所示,这时就可以在编辑器中输入相应的命令 。
    在这里插入图片描述
    国 1-14 新建 M-file
    在这里插入图片描述

    图 1-15 MATLAB 自带的M-file 编辑器

    ( 2 ) 编辑完成之后 ,单击工具栏上的 a按钮,这时系统会提示输入文件名 ,输入后 ,单击 “确定” 按钮即可保存编辑好的 M文件。
    ( 3 ) 保存完成后 ,单击工具栏上的姐按钮 ,即可运行刚才输入的 M 文件 。也可以在MATLAB 命令窗口中输入 M 文件的名字来运行 M 文件。
    2. 函数文件
    与脚本文件不同 ,函数文件犹如一个 “黑箱”,把一些数据送进并经加工处理 ,再把结果 送出来 。MATLAB 提供的函数指令大部分都是由函数文件定义的 。M 文件的特点如下 :
    (1) 从形式上看 ,与脚本文件不同 ,函数文件的第一行总是以 “function ” 引导的 “函数 申明行”。
    (2) 从运行上看 ,与脚本文件运行不同 ,每当函数文件运行 ,MATLAB 就会专门为它开辟一个临时工作空间 ,称为函数工作 空间 ( Function Workspace )。当执行文件最后 一条指令 时,就结束该函数文件的运行 ,同时,该临时函数空间及其所有的中间变量就立即被清除 。
    (3) 函数定义时 ,一般都定义了输入/输出(ν0 ) 变量的个数,称为“默认数目”。MATLAB允许使用比 “默认数目” 较少的输入/输出变量,实现对函数的调用 。 典型 M 文件的结构如下 :
    (1) 函数声明行:位于函数文件的首行 ,以关键字 function 开头,函数名及函数的输入
    输出变量都在这一行被定义 ,其格式为
    在这里插入图片描述
    其中,函数名的命名规则与变量名相同 。输入形参为函数的输入参数 ,输出形参为函数的输 出参数。当输出形参多于 1 个时,则应该用方括号括起来 。
    (2) 第一注释行 :紧随函数声明行之后以%为开头第 一注释行 。该行主要供 lookfor 关键词查询和 help 在线帮助使用 。
    (3) 在线帮助文本区 :第一注释行及其之后的连续以%开头的所有注释行构成整个在线 帮助文本 。
    (4) 编写和修改记录 :与在线帮助文本区相隔 一个 “空” 行,也以%开头 ,标志编写及修改该 M文件的作者和日期等。
    (5) 函数体:为清晰起见 ,它与前面 的注释 以 “空” 行相隔。
    (6) M文件的文件名必须是 “函数名.M” (不包括双引号)。
    例 1.10 通过 M-file 编辑器打开安装目录 F\toolbox\matlab\matfun\trace.m 文件,可以看到如下内容:
    在这里插入图片描述
    说明:第 1 行是函数的声明行,函数的输出变量为 t ,函数名为 trace ,输入变量是 a。第 2 行是第一注释行 ,第 3~7 行是在线文本帮助区 ,在MATLAB 命令行窗口中输入 help trace, 则第 2~7 行的内容就会 显示出来。第 9 10 行是该函数的编写和修改记录 。这个函数的函数 体只有1行,它的功能是计算输入参数矩阵 A 的迹,井把计算结果赋值给输出变量t
    其他 MATLAB 函数的形式与之相似 ,感兴趣的读者可以查看有关函数的实现 。

    3. 函数调用和参数传递
    1) 函数调用
    函数文件编制好后 ,就可调用函数进行计 算了。函数调用的一般格式为
    [输出参数 1,输出参数 2,]= 函数名(输入参数1,输入参数 2,)
    函数调用可以嵌套 ,一个函数可以调用别的函数 ,甚至调用它自己 (递归调用)。在前 面的例子中己经多次演示了函数调用 的方法,这里就不再单独举例。
    2 ) 局部变量和全局变量
    CI ) 局部变量存在于函数空间 内部的中间变量 ,产生于该函数 的运行过程中 ,其影响范 围也仅限于该函数本身 。
    ( 2 ) 通过 global 指令,MATLAB 允许几个不同的函数空间及基本工作空间共享同 一个变量,这种被共享的变量称为全局变量。
    在 MATLAB 中,函数文件的内部变量是局部的,与其他函数文件及 MATLAB 工作空间 相互隔离 。但是,如果在若干函数中 ,都把某一变量定义为全局变量 ,那么这些函数将共用 这一个变量。全局变量的作用域是整个 MATLAB 工作空间 ,即全程有效。所有的函数都可 以对它进行存取和修改 。因此,定义全局变量是函数间传递信息的一种手段 。
    例 1.11 全局变量应用示例。先建立函数文件 myfun.m ,该函数将计算输入的参数的二 次多项式和 。
    在这里插入图片描述
    在命令窗口中输入
    在这里插入图片描述

    4. MATLAB 的程序结构
    MATLAB 语言的程序结构与其他高级语言是一致的,分为顺序结构、循环结构、分支结构。
    (1) 顺序结构 一一 依次顺序执行程序的各条语句 。
    (2) 循环结构 一一 被重复执行的一组语旬,循环是计算机解决问 题的主要手段 。
    (3) 分支结构 一一 根据一定条件来执行的各条语句。 顺序结构前面的例子已经有了很多 ,这里就不再说明 。下面主要说明一下循环结构和分
    支结构的语法格式 。
    1) 循环结构 循环结构主要有以下几种 。
    (1) for-end 语句 语法为
    在这里插入图片描述
    其中 ,indx 代表循环变量 ,也可以用其他变量代替。后面紧跟的是循环初始值 ,循环步长 , 循环结束值 。在循环步长为 1 的情况下,也可以省略而代之以 :循环初始值:循环结束值 。 中间是可执行语句组成 的集合 ,在语旬的最后要加 end 代表 for 循环的结束。for-end 语句 是可以嵌套的 ,也就是说在 一个 for-end 语句中可以嵌套其他的 for-end 语句。下面来看一个例子 。
    例1.12 利用 for 循环求 y=sinx+sin2x+ ··· +sin100x, 0=<x 2π的值。
    在这里插入图片描述
    在这里插入图片描述

    上述程序比较简单 ,首先是赋值给 y=O ,然后生成矢量 x ,然后通过第 3 5 行的 for 循 环计算 y ,最后是输出相应的结果 。程序执行结果如图 1-16 所示。
    在这里插入图片描述
    图 1-16 例 1.12 程序运行结果

    (2) while-end 循环
    while 循环将循环体中的语句循环执行不定次数 。语法为
    在这里插入图片描述

    表达式一般是 由逻辑运算和关系运算及 一般运算组成的 ,以判断循环的进行和停止 :只 要表达式的值非 0,继续循环 :直到表达式值为 0,循环停止 。
    例 1.13 用 while 循环实现例 1.12 程序。
    在这里插入图片描述
    程序的执行结果与例 1.12 相同,这里就不再给出 。
    2) 分支结构
    分支结构的语句有 if 语句和 switch 语句。下面先来看江 语句。 江 语旬的格式有如下几种格式 。
    格式1
    在这里插入图片描述
    格式 2
    在这里插入图片描述
    格式 3
    在这里插入图片描述

    在格式 1 中,首先判断条件是否满足 ,如果满足则执行可执行语句组 ,否则结束 。在格 式 2 中,首先判断条件是否满足 ,如果满足则执行可执行语句组 1,若不满足则执行可执 行 语句组 2。格式 3 是格式 2 的进一步扩展,分别对判断是否满足条件 1,2,…m,然后执行相 应的可执行语句组 。若所有的条件都不满足 ,则执行可执行语句组 m+l 。可见,格式 3 实现 了一种多路选择,比较复杂。可替代下面要讲到的 switch-case-end 语句。
    例1.14 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数 。输出全部水仙花数 。程序代码为
    在这里插入图片描述
    说明:在程序中 ,首先是一个 for 循环 (第 1 行), 在循环体内 ,分别求出三位整数的 百位、十位和个位数字 (第 2~4 行), 其中,rem(x,y )函数是求 y 除 x 的余数。fix(x)是求 x 的整数部分,它们都是MA1LAB 内置的函数。第5~7 行用一个 if 语句判所求的三位整数是否是水仙花数 ,是则输出该数 。
    程序执行结果为
    在这里插入图片描述
    switch 语句根据变量或表达式 的取值不同 ,分别执行不同的语句。其格式为
    在这里插入图片描述
    说明:switch 语句首先判断表达式的值,如果等于值 l ,则执行可执行语句组 1,等于值2,则执行可执行语句组 2 ,如果与判断 的值都不相等,则执行可执行语句组 m+1 。
    例 1.15 switch-case 语句说明。在本例中,首先定义了一个函数 myfun1 ,它的功能是根 据不同的输入值 ,输出对应的输出值 。代码如下 :
    在这里插入图片描述
    然后另建 M文件 ,代码如下 :
    在这里插入图片描述
    该程序的功能就是分别给 x 赋不同的值,然后调用函数myfun1得到输出值 。运行结果如下:
    在这里插入图片描述
    从执行结果可以看出 ,myfun1函数根据输入的不同的 x 值,输出了相对应的结果 。
    3 ) break t吾句与 continue 语句
    在循环语句的执行过程中 ,需要中断循环可以使用 break 语句和 continue 语句。其中 , break 语句是终止循环 ,执行循环体后的语句。而continue 语句则是终止本次循环 ,本次循环 中的 continue 语句后的循环语句不再执行 ,而是执行新的循环 。break 与 continue 语句经常与 if 语句联合使用 。
    例 1.16 break 语句与 continue 语句示例 。
    在这里插入图片描述
    说明:程序中分别定义了 2 个循环体 ,第 1 个循环体 (第 1~7 行〉 判断循环变量是否 等于 3,是则跳出循环体 ,执行循环体下面的语句 ,而在第 2 个循环体 (第 9~15 行〉 中, 如果循环变量等于 3,则结束本次循环 ,继续执行下一次循环。程序的执行结果为
    在这里插入图片描述
    说明:从执行结果可以看到,循环体1只执行了 1 次,而循环体 2 则执行了 2 次。读者 可以区分两者的不同 。
    5. 用户参数交互输入
    在编制程序的过程中 ,有时需要在程序的运行过程中输入 一些参数,输出一些提示信息, 或者暂停程序的运行等 。MATLAB 对此提供了相应的函数 。
    1 ) input 函数
    input 函数用于向计算机输入一个参数 。它的调用格式为
    在这里插入图片描述
    默认情况下 ,input 函数输入的是数字 ,而如果加上选工页’s’ ,则允许用户输入一个字符串 。 例如 ,想输入一个人的姓名 ,可采用如下命令 。
    在这里插入图片描述
    例 1.17 求一元二次方程 ax^2+bx+c=0 的根。
    在这里插入图片描述
    程序的第 1~3 行分别是输入 a, b, c 的值,第 4 行是根据求根公式求方程的根 。第 5行是把得到的结果按照矢量的形式输出 。程序运行结果如下 :
    在这里插入图片描述
    其中,1, 3, 2 是输入的数字 。读者可以尝试输入其 他参数。
    2 ) pause 函数
    pause 函数暂停程序的执行。它的调用格式为
    在这里插入图片描述
    其中,n 是暂停执行的时间秒数 ,如果省略延迟时间 ,直接使用 pause ,则将暂停程序,直到 用户按任一键后程序继续执行。
    3 ) disp 函数
    disp 函数是向命令窗口输出提示信息 。它的调用格式为
    在这里插入图片描述
    其中,输出项可以为字符串或矩阵 。这个函数类似于 C 语言中的 printf 函数。 例如:
    在这里插入图片描述
    输出为
    在这里插入图片描述

    1.2.6 文件操作

    MATLAB 环境下的文件与其他系统 一样,也有两类文件组成 ,一是 M 文件,前面已经 进行了介绍 。另一类是数据文件 。系统除提供了文件的 一般管理功能外 ,还提供了对数据文 件进行操作的特殊功能函数 。
    1. 文件的打开与关闭
    MATLAB 提供了对数据文件建 立、打开、读、写及关闭等一系列函数 ,数据文件一般 存放在磁盘等介质上,用文件名标识 ,系统对文件名没有特殊要求 。文件数据格式有两种形 式:一是二进制格式文件;二是 ASCII 文本文件,系统对这两类文件提供了不同的读 /写功能 函数。
    1 ) fopen 函数
    在读/写文件之前 ,必须先用fopen 函数打开一个文件 ,并指定允许对该文件进行的操作。 文件操作结束后 ,应及时关闭文件 ,以免数据的丢失或误修改 。fopen 函数的调用格式为
    在这里插入图片描述
    其中,fid 是 fopen 函数打开的文件句柄 ,在对文件进行其他操作时要用到它 。filename 为文件名,permission 为文件格式 ,格式选项参见表 1-1。

    表 1-1 文件格式选项说明在这里插入图片描述
    例如,打开一个名为 test.dat 的数据文件并进行读操作 ,其命令格式为在这里插入图片描述
    上述打开格式均为二进制格式,如果想用 ASCII 文本格式 ,则必须在格式字符串中加上 字符 t,例如,用’r t’表示以ASCII 格式打开供读操作的数据文件 。

    2 ) fclose 函数
    文件在进行完读 、写等操作后 ,应及时关闭,以保证文件的安全可靠。关闭文件命令格式为
    在这里插入图片描述
    其中 ,fid 是用 fopen 打开的文件句柄 。此 表示关闭文件操作的返回代码 ,若关闭成功,返回
    0,否则返回 lo
    2. 文件的读/写操作
    文件的读/写操作主要包括二进制文件的读/写操作和 ASCII 文本文件的读/写操作。

    1 ) fread 函数
    fread 用来读取二进制数据文件。其调用格式为
    在这里插入图片描述
    其中 ,A 为数据矩阵 ,count 返回所读取的数据元素个数 。size 为可选工页,若不选用则读取整 个文件 内容,若选用则它的值可以是下列值,参见表 1-2。
    表 1-2 size 选项说明
    在这里插入图片描述
    precision 用于控制所读数据的精度格式 ,格式种类较多 ,这里就不再给出 ,读者可以查 阅 MATLAB 帮助 。默认格式为 uchar,即无符号字符格式 。例如:
    在这里插入图片描述
    以读数据方式打开数据文件 test.dat ,并按长整型数据格式读取文件的 前 1000 个数据放 入矩阵 A ,然后关闭文件 。
    2 ) fwrite 函数

    fwrite 函数以二进制格式向数据文件写数据 ,其调用格式为
    在这里插入图片描述
    上述语句将矩阵 A 中的数据写入文件 test.dat 中,数据格式为 32 位整型二进制格式 。
    例 1.18 建立一数据文件 test.dat ,用于存放矩阵 A 的数据。
    在这里插入图片描述
    说明:程序第 l行首先以写文件方式打开文件 test.dat ,第 2 行将矩阵 A 的数据以二进制 浮点数格式写入文件 test.dat 中,第 3 行关闭文件 。第 4 行以读文件方式重新打开 test.dat 文 件,第 5 行以浮点数格式读入 test.dat 的内容并赋值为矩阵 B,第 6 行是关闭文件。
    程序执行结果为
    在这里插入图片描述
    3 ) fscanf 函数
    fscanf 函数用来读取 ASCII 文本文件 ,其调用格式为
    在这里插入图片描述
    其中,A 为数据矩阵,用以存放读取的数据,count 返回所读取的数据元素个数。format 用以控 制读取的数据格式 ,的加上格式符组成 ,具体的格式符及含义读者请查 阅MATLAB 帮助。
    4 ) fprintf 函数

    fprintf 函数用来写 ASCII 数据文件 ,其调用格式为
    在这里插入图片描述
    其中,A 为要写入文件的数据矩阵 ,先按 format 格式化数据矩阵 A ,后写入进 fid 所指定的 文件。
    例 1.19 建立一数据文件 test I.四,用于用 ASCII 文本方式存放矩阵 A 的数据。
    在这里插入图片描述
    这个程序与例 1.18 相似,这里就不再说明 。
    3. 文件定位
    在文件读/写操作中,经常需要定位文件指针位置。MAτLAB 提供了文件指针定位函数 。
    1 ) fseek 函数
    fseek 函数定位文件位置指针 ,其调用格式为
    在这里插入图片描述
    其中,fid 为文件句柄 ,他et 表示位置指针相对移动的字节数 ,若为正整数表示向文件尾方 向移动,若为负整数表示向文件头方向移动 ,origin 表示位置指针移动的参照位置 ,它的取 值有三种可能,参见表 1-30

    表 1-3 origin选项说明
    在这里插入图片描述
    若定位成功 status 返回值为 0,否则返回值为-1
    2 ) ftell 函数

    ftell 函数返回文件指针的当前位置 。其调用格式为
    在这里插入图片描述
    返回值为从文件开始到指针当前位置的字节数 。若返回值为-1 表示获取文件当前位置 失败}
    例 1.20 下述程序说明了函数 fseek 和 ftell 的使用。
    在这里插入图片描述
    说明:程序第 1行建立一个矢量 x ,第 2 行以写方式打开文件 exp.dat ,第 3 行向文件中 写入矢量 x,第 4 行关闭文件 ,第 5 行以读方式打开文件 ,第 6 行把文件指针定位在 6,第 7 行读写当前文件指针指向的数据赋值给 x1 ,第8 行调用 负ell 函数报告当前文件指针位置 ,第 9 行读当前数据并赋值给 x2,第 10 行关闭文件。
    程序的执行结果为
    在这里插入图片描述
    以上简要介绍了 MATLAB 及其基本的使用与编程方法 ,更多的使用方法 ,读者可以参 考其他专门介绍 MATLAB 如何使用的书籍 。以上介绍的内容在后面的仿真中可以满足95% 以上的需要,因此,读者应熟练掌握 。

    1.3 通信系统仿真

    人们认识客观世界的方式多种多样 。在计算机没有出现之前,归纳起来主要可分为理论

    分析与实验验证两大类 。随着计算机的出现,利用计算机仿真来对未知的世界进行探索成为 越来越重要的手段 。举个简单的例子 ,对现代汽车而言 ,汽车的安全性相当依赖于防抱死制 动系统 (ABS) 的性能。在实际条件下 ,对 ABS 进行实车测试的代价是非常昂贵的 ,为了进 行极限情况下的测试 ,通常需要寒冷或炎热的环境 。在积雪覆盖的路面上进行 ABS 的测试, 就只能在冬季有雪的天气进行 ,这对于测试人员来说很难实现 ,而且会造成一定的人身安全 的威胁。并且,用真实汽车进行测试存在可 重复性差 、不能复现同一测试条件等缺点 。基于 上述问题 ,伴随着计算机仿真技术的发展 ,在生产过程中可利用仿真的方法对ABS 进行检验 。 通过对车辆与道路等的仿真 ,模拟道路实验的状况 ,指导 ABS 产品的设计开发 ,减少路试次 数,缩短出厂周期 ,降低产品费用与实验风险。可以说仿真的方法是ABS 开发、生产的有力 辅助工具 。因此,仿真是科学研究和工程建设中不可缺少的方法 。

    1.3.1 通信仿真的概念

    现代的通信系统越来越复杂 ,对这个系统做出的任何改变 ,如改变某个参数的设置或系 统结构等都可能影响整个系统的性能和稳定 。因此,在对原有的通信系统做出改进或建立 一 个新系统之前 ,通常需要对这个系统进行建模和仿真 ,通过仿真结果衡量方案的可行性 ,从 中选择最合理的系统配置和参数设置 ,然后再应用于实际系统中 。这个过程就是通信仿真 。
    仿真己成为深入理解通信系统特性的有价值的工具 ,一个开发得好的仿真与在实验室实 现一个系统很类似 ,可以很方便地对要研究的系统产生直观的图形 ,如时域波形、信号频谱、 眼图等。新通信系统的设计中几乎都包括 一些信号处理新算法和新硬件技术 。在设计的前期 阶段,为了验证这些新算法和新硬件技术 ,仿真提供了极佳的环境 。
    通信系统的仿真往往涉及较多的研究领域 ,包括通信原理 、数字信号处理 、概率论 、信 号检测与估计 、随机过程理论 、信号与系统理论等 。掌握通信原理是通信系 统仿真的关键 , 而数字信号处理是用于开发构成通信系统仿真模型的算法 ,现代通信系统的许多新技术都涉 及算法 ,如多天线系统中波束成形算法 、信道均衡中的算法等 。通信系统的性能指标通常以 概率形式表示 ,如比特差错概率。在许多情况下 ,仿真要处理的信号和噪声均是随机过程的 一个样本 ,而且,对于无线信道的描述也需要随机过程理论 。

    1.3.2 通信仿真的基本方法

    从本质上讲,仿真方法论是很难系统化的 ,但除最简单的情况外 ,所有仿真问题都要涉 及一些基本步骤 :
    (1) 将给定问题映射为仿 真模型。
    ( 2 ) 把整个问题分解为 一组子问题 。
    ( 3 ) 选择合适的建模 、仿真和估计方法 ,并将其用于解决这些子 问题。
    ( 4 ) 综合各子问题的解决结果以 提供对整个问题的解决方案 。
    对整个通信系统 的仿真是一个复杂的问题,往往需要把问题进行分层,不同层次的仿真, 其方法与目 的不同。可以把仿真分为四个层次 :系统级仿真 、子系统级仿真 、元件级仿真和 电路级仿真。越高层次的仿真 ,抽象越多,涉及的模型细节越少 :越低层次的仿真 ,越与实 际硬件相近,涉及的硬件细节和参数越多 。对于电路级仿真 ,人们更多的使用硬件原型来进

    酶 ’ 噩 MATLAB B础写圃窜翩而自猩s
    行验证和测试 ,在通信系统波形级仿真 ,很少涉及这一层次。通常情况下 ,人们用尽可能高 的抽象程度来仿真 ,因为,越高的抽象意味着越少的参数和越高效的仿真 。
    1. 仿真建模
    多数通信系统是可以模型化的 ,仿真模型和分析模型从概念上讲没有什么区别 ,但模型 复杂度不同。在分析方法中 ,通常使用简化的 、理想的模型,而在仿真中通常采用较复杂的 模型。无论是分析还是仿真 ,都需要加入对物理实体的 一定程度的近似处理使其便于表示 , 同时尽可能采用最精确的模型 。人们并不需要建立完美的模型 ,而是建立一个符合要求的模 型,即模型的近似处理能满足输出的允许误差 。
    如前所述 ,仿真是要分层次的 ,相对应的 ,建模也是要分层次的 。高层模型往往很少或 不依赖于具体的物理模型 。例如 ,对于滤波器 ,一个高层模型就是滤波器的传递函数 ,而不 考虑其内部的工作方式 ;而一个低层模型则是 电路模型,包含多个部件 ,应用于基尔霍夫定 律,用不同的微分方程代表每个部件 。
    一般地,可以把建模结构分为 三类:系统建模 、设备建模和随机过 程建模 。一个通信系 统,这里主要指通信链路 ,建模的最高形式描述就是用子系统框图表示出来 。系统模型是一 种拓扑结构 ,其仿真方框图与 真实系统越接近 ,整个系统的精确性就越 高。但出于计算效率 的考虑,强调尽可能采用 高程模型 。因此,通常是对简化了的模型图进行仿真 。
    2. 系统性能评估
    仿真的主要目的之一是进行系统性能评估。对于模ii; 直信系统,主要性能指标是输出信噪比: 而对于数字通信系统则是误比特率 也ER ) 或误码率或误帧率,信噪比 CSNR ) 也是数字通信系统 的一个重要性能指标。误码元率又称误符号率 ,是指错误接收的符号 (码元〉 数在传送总符号数 中所占的比例。误比特率又称为误信率,是指错误接收的比特数在传送比特总数中所占的比例。
    符号或比特差错概率也是描述系统错误率的 一个指标 ,符号差错概率可定义为
    在这里插入图片描述
    因为仿真能处理的符号数目是有限的 ,故只能对符号差错概率做近似计算 ,一般使用蒙 特卡罗方法 ,即让 N 个符号通过系统 ,并计算发生差错的个数 。如果通过系统的 N 个比特中 有 Ne 个差错,则符号差错计算概率估计为
    在这里插入图片描述
    一般情况下 ,蒙特卡罗估计是无偏的 ,N越小 ,估计的方差就越大 :N越大,估计的方 差就越小 。当 N→∞ 时,则估计值收敛于真实值 。通常在仿真精度与仿真运行时间之间存在 一个折中问题 。
    3. 通信仿真软件
    对系统仿真建模完成之后 ,下一步就可以通过仿真软件将模型转换成程序并且执 行程序。 最简单的工具是采用 C 语言等编程工具直接编写仿真程序 ,这种方法的优点是效率高,缺点则 是不够灵活 ,没有一个易于实现的人机交互界面 ,不便于对仿真结果进行分析 。为此,人们已 开发了多种软件包来仿 真通信系统 ,包括波形级仿真和网络层仿真 ,并得到了广泛的应用 。比较常用的仿真软件包括 M且工AB/Sim旧ink, OPNEf , NS2 等。这些软件具有各自不同的特点, 适用于不同层次的通信仿真,例如,物理层仿真通常采用 M且LAB/Simulink ,而网络层仿真 则适用采用 OPNET 、NS2 。关于OPNET、NS2 的介绍,读者可以参考其他书籍 。
    以上简单介绍了通信仿真的一些基本概念 ,应当指出的是 ,仿真与理论分析和实验验证 并不是孤立的 ,很多时候在与分析和实验二者联合使用时 ,仿真的功能才最为强大 。
    本书在以后的章节中将结合 MATLAB/Sunulink ,详细介绍通信仿真的方法与技巧 。

    小 结

    本章简单介绍了 MATLAB 的操作与程序设计的基本方法及通信仿真的基本概念 ,通过本章的学习,读者将对MATLAB 有一个入门性的了解 ,应能编写简单的 MATLAB 程序。对 通信仿真应有初步的认识 ,为今后的学习打下基础 。第 2 章中,将介绍 Simulink 的使用。

    展开全文
  • 概述 Matlab 语言是当今国际上科学界 (尤其是自动控制领域) 最具影响力也是 最有活力的软件它起源于矩阵运算并已经发展成一种高度集成的计算机语言 它提供了强大的科学运算灵活的程序设计流程高质量的图形可视化与...
  • 由马克斯·普朗克人类发展研究所()柏林自由大学(FreieUniversitätBerlin)监督。 层次坐标 独立于此存储库的其余部分的是加权图的实现,可以单独使用。 最初专门为非加权定向网络制定由Corominas-Murta等人...
  • 概述 Matlab语言是当今国际上科学界 (尤其是自动控制领域) 最具影响力也是 最有活力的软件它起源于矩阵运算并已经发展成一种高度集成的计算机语言 它提供了强大的科学运算灵活的程序设计流程高质量的图形可视化与...
  • 遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。 2 ...
  • 大量的含有不确定性的实际问题的出现,促使了随机积分的构建与发展,并在此基础上建立了随机微分方程的相关理论方法。 布朗运动指的是一种无相关性的随机行走,满足统计自相似性,即具有随机分形的特征,但其时间...
  • 它是模仿自然界生物进化机制发展起来的随机全局搜索优化方法,借鉴了达尔文的进化论孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取积累有关搜索空间的知识,并自适应地...
  • 蚁群算法matlab

    千次阅读 多人点赞 2018-09-12 16:49:55
    在蚁群算法的发展中,关键参数的设定有一定的准则,一般来讲遵循以下几条: 尽可能在全局上搜索最优解,保证解的最优性; 算法尽快收敛,以节省寻优时间; 尽量反应客观存在的规律,以保证这类仿生算法的...
  • 它是模仿自然界生物进化机制发展起来的随机全局搜索优化方法,借鉴了达尔文的进化论孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取积累有关搜索空间的知识,并自适应地...
  • matlab

    千次阅读 2015-01-23 09:22:27
    x=linspace(0,2*pi)在matlab中是什么意思 从0到2pi按线性分50个点,50是默认 http://anony3721.blog.163.com/blog/static/51197420111013105344894/ http://blog.sina.com.cn/s/blog_4c8287230100ol0p.html Matlab...
  • MATLAB编程入门

    2013-10-23 20:02:39
    MATLAB是当今科学界最具影响力、也是最具活力的软件,它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序...
  • MATLAB人脸识别算法

    2021-08-25 12:02:13
    同时随着计算机科学技术生物医学的发展使得利用生物特征识别成为了可能。在生物特征识别领域,由于人脸识别的操作快速简单,结果直观,准确可靠,不需要人的配合等优点已成为人们关注的焦点。主成分分析...
  • 哈密尔顿于 1859 年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈、近几十年来,由于计算机技术科学的飞速发展,大大地促进了图论研究应用,图论的理论方法已经渗透到物理、化学、...
  • 我对遗传算法非常感兴趣,2018年的时候用MATLAB复现了遗传算法进化蒙娜丽莎,这也是我知乎头像的来源。本文就来详细的介绍遗传算法的基本内容,以及如何使用遗传算法绘制“蒙娜丽莎”等让你心仪的图片。第一节 遗传...
  • 基于Matlab的OFDM系统仿真

    千次阅读 2020-12-30 19:43:45
    现代通信的发展是爆炸式的。从电报、电话到今天的移动电话、互联网,人们从中享受了前所未有的便利高效率。从有线到无线是一个飞跃,从完成单一的话音业务到完成视频、音频、图像数据相结合的综合业务功能更是一...
  • Matlab选修课课件

    2010-01-24 00:45:28
    Matlab是“Matrix Laboratory”的缩写,意为“矩阵实验室”,它起源于矩阵运算,并已经发展成一种高度集成的计算机语言,是当今国际上科学界最具影响力、也是最有活力的软件。它提供了强大的科学运算、灵活的程序...
  • 对图像分割的研究一直是图像技术研究中的热点焦点。图像分割是一个很关键的图像分析技术,是由图像处理进到图像分析的关键步骤.它的目的就是把图像中感兴趣的那部分分割出来供大家研究、处理分析,一直都是图像...
  • 基于MATLAB的语音信号处理【摘 要】 Matlab语音信号处理是指利用matlab软件对音频信号进行读取,并对音频信号进行采样分析及离散傅里叶变换,以方便对其在频域上进行调制滤波等相关的操作。本次实验在提取音频信号...
  • 在对医学图像分割问题的起源发展和研究现状进行简要综述的基础上,介绍了该领域当前的研究热点及论文的主要研究内容。 图像分割是图像处理中的一项关键技术,自20世纪70年代起一直受到人们的高度重视,至今已提出...
  • 近几十年来,由于计算机技术科学的飞速发展,大大地促进了图论研究应用,图论的理论方法已经渗透到物理、化学、通讯科学、建筑学、运筹学,生物遗传学、心理学、经济学、社会学等学科中。 3、什么是图与网络 ...
  • 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程 Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士...
  • 摘 要 图像信息是人类获取信息的重要来源及利用信息的重要手段,图像处理科学技术是科学研究、社会生产及人类生活中不可缺少的强有力工具。在信息社会中,数字图像处理科学在理论或实践...MATLAB强大的运算图形展...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 929
精华内容 371
关键字:

matlab的起源和发展

matlab 订阅