matlab仿真设计全

上传人:m**** 文档编号:586335912 上传时间:2024-09-04 格式:PPT 页数:345 大小:6.95MB
返回 下载 相关 举报
matlab仿真设计全_第1页
第1页 / 共345页
matlab仿真设计全_第2页
第2页 / 共345页
matlab仿真设计全_第3页
第3页 / 共345页
matlab仿真设计全_第4页
第4页 / 共345页
matlab仿真设计全_第5页
第5页 / 共345页
点击查看更多>>
资源描述

《matlab仿真设计全》由会员分享,可在线阅读,更多相关《matlab仿真设计全(345页珍藏版)》请在金锄头文库上搜索。

1、MATLAB程序设计授课教师:邹晓春 电子信息学院 Matlab programming 2024/9/42 Matlab programming课程的作用课程的作用课程的目的课程的目的课程的特点课程的特点课程的安排课程的安排授课宗旨授课宗旨 2024/9/4 3 Matlab programming课程的作用课程的作用 在在欧欧美美各各高高等等学学校校,MatlabMatlab成成为为线线性性代代数数、自自动动控控制制理理论论、数数字字信信号号处处理理、时时间间序序列列分分析析、动动态态系系统统仿仿真真、图图像像处处理理等等诸诸多多课课程程的的基基本本教教学学工工具具,成成为为本本科科生生、

2、硕硕士士生生和和博博士士生生的的必须掌握的基本技能。必须掌握的基本技能。 在在设设计计研研究究单单位位和和工工业业部部门门,MatlabMatlab已已被被广广泛泛地地用用于于研研究究和和解决各种具体的工程问题解决各种具体的工程问题。 可可以以预预见见,MatlabMatlab将将在在我我国国科科学学研研究究和和工工程程应应用用中中发发挥挥越越来越大的作用。来越大的作用。 2024/9/44 Matlab Programing 讲讲授授MATLABMATLAB语语言言基基础础入入门门知知识识,介介绍绍MATLABMATLAB产产品品的的体体系系、MATLABMATLAB桌桌面面工工具具的的使使

3、用用方方法法,重重点点介介绍绍MATLABMATLAB的的数数据据可可视视化化、数数值值计计算算的的基基本本步步骤骤以以及及如如何何使使用用MATLABMATLAB语语言言编编写写整整洁洁、高高效效、规规范范的的程程序序。并并涉涉及及到到一一些些具具体体的的专专业业应应用用工工具箱具箱(如:信号处理工具箱、图像处理工具箱等)(如:信号处理工具箱、图像处理工具箱等)。 通通过过本本课课程程的的学学习习,了了解解、熟熟悉悉、掌掌握握 MATLABMATLAB的的基基本本编编程程方方法法,并并具具有有初初步步的的利利用用计计算算机机处处理理、解解决决实实际际问问题题的的能能力力,为为进进一一步步学学

4、习习后后续续的的专专业业课课程程做做好准备。好准备。本课程的目的本课程的目的( Objectives of This CourseObjectives of This Course ) 本课程的特点本课程的特点( Features of This CourseFeatures of This Course ) 交叉性课程,是交叉性课程,是计算机技术、数学理论计算机技术、数学理论知识以及诸多知识以及诸多工程理论工程理论知识的综合。知识的综合。 实践性课程。实践性课程。 内容多,课时少,要求同学上课认真听讲,要充分利用上机实践消化、理解、内容多,课时少,要求同学上课认真听讲,要充分利用上机实践消化

5、、理解、 掌握课上讲解内容。掌握课上讲解内容。课程的目的和特点课程的目的和特点课程的安排课程的安排 2024/9/45 Matlab Programing课堂教学:共课堂教学:共3232学时;学时;教材教材MATLABMATLAB基础教程基础教程 孙蓬孙蓬 主编;清华大学出版社,主编;清华大学出版社,2012011 1年年主要参考书主要参考书MATLABMATLAB编编程程 美美 Stephen Stephen J.ChapmanJ.Chapman著著;邢邢树树军军 等等译译,科科学出版社,学出版社,20102010年年工工程程与与科科学学数数值值计计算算MATLABMATLAB实实现现 美美

6、 夏夏普普若若著著;唐唐玲玲艳艳 等等译,清华大学出版社,译,清华大学出版社,20092009年年高高等等应应用用数数学学问问题题的的MATLABMATLAB求求解解 薛薛定定宇宇等等著著,清清华华大大学学出出版版社,社,20042004年年 MATLABMATLAB程程序序设设计计与与应应用用 刘刘卫卫国国主主编编,高高等等教教育育出出版版社社,20062006 2024/9/46 Matlab Programing 讲授讲授MATLAB的通用功能。的通用功能。 寓教于例,由浅入深。寓教于例,由浅入深。 关关于于科科学学计计算算,着着重重强强调调理理论论概概念念、算算法法和和实实际际计计算算

7、三三者者 之间的关系。之间的关系。授课宗旨授课宗旨第1章Matlab概述概述1 Matlab1 Matlab概述概述 2024/9/48 Matlab Programing前言前言MatlabMatlab软件概述软件概述内容内容MatlabMatlab发展历史发展历史MatlabMatlab产产品品家家族族(Matlab (Matlab family family of of products)products)体系体系Matlab Matlab 语言的特点。语言的特点。目的目的全面了解全面了解 MatlabMatlab软件包软件包激发对激发对MatlabMatlab软件的学习兴趣。软件的学习

8、兴趣。 2024/9/49 Matlab Programing1.1 MATLAB1.1 MATLAB的历史及影响的历史及影响 7070年年代代中中期期,Cleve Cleve MolerMoler博博土土及及其其同同事事在在美美国国国国家家基基金金会会的的帮帮助助下下,开开发发了了LINPACKLINPACK和和EISPACKEISPACK的的FORTRANFORTRAN语语言言子子程序库,程序库,这两个程序库代表了当时矩阵运算的最高水平。这两个程序库代表了当时矩阵运算的最高水平。到到了了7070年年代代后后期期,身身为为美美国国新新墨墨西西哥哥州州大大学学计计算算机机系系系系主主任任的的C

9、Ieve CIeve MolerMoler,在在给给学学生生上上线线性性代代数数课课时时,为为了了让让学学生生能能使使用用这这两两个个子子程程序序库库,同同时时又又不不用用在在编编程程上上花花费费过过多多的的时时间间,开开始始着着手手用用FORTRANFORTRAN语语言言为为学学生生编编写写使使用用LINPACKLINPACK和和EISPACKEISPACK的的接接口口程程序序,他他将将这这个个程程序序取取名名为为MATLABMATLAB,其其名名称称是是由由MATrixMATrix和和 LABoratoryLABoratory(矩矩阵阵实实验验室室)两两个个单单词词的前三个字母所合成的前三

10、个字母所合成。在在19781978年年,MalabMalab就就面面世世了了。这这个个程程序序获获得得了了很很大大的的成成功功,受受到到了了学学生生的的广广泛泛欢欢迎迎。在在以以后后的的几几年年里里,MatlabMatlab在在多多所所大大学学里里作作为为教教学学辅辅助助软软件件使使用用,并并作作为为面面向向大大众众的的免免费费软软件广为流传。件广为流传。CleveMoler 2024/9/410 Matlab Programing 将将MATLABMATLAB商商品品化化的的不不是是Cleve Cleve MolerMoler, ,而而是是一一个个名名叫叫Jack Jack LittleLi

11、ttle的的 人人 。 当当 免免 费费 的的 MATLABMATLAB软软 件件 到到 StanfordStanford大大 学学 , Jack Jack LittleLittle正正在在该该校校主主修修控控制制,便便接接触触到到了了当当时时MATLABMATLAB,直直觉觉告告诉诉他他,这这是是一一个个具具有有巨巨大大发发展展潜潜力力的的软软件件。因因此此他他在在毕毕业业沒沒多多久久,就就开开始始用用C C语语言言重重新新编编写写了了MATLABMATLAB的的核核心心。在在MolerMoler的的协协助助下下,于于19841984年年成成立立MathWorksMathWorks公公司司,

12、首首次次推推出出MATLABMATLAB商商用用版版。在在其其商商用用版版推推出出的的初初期期,MATLABMATLAB就就以以其其优优秀秀的的品品质质(高高效效的的数数据据计计算算能能力力和和开开放放的的体体系系结结构构)占占据据了了大大部部分分数数学学计计算算软软件件的的市市场场,原原来来应应用用于于控控制制领领域域里里的的一一些些封封闭闭式式数数学学计计算算软软件件包包(如如英英国国的的UMISTUMIST、瑞瑞典典的的LUNDLUND和和SIMNONSIMNON、德德国国的的KEDDCKEDDC)就就纷纷纷纷被被淘淘汰汰或或在在MATLABMATLAB上上重建。重建。Jack Litt

13、le 2024/9/411 Matlab Programing Cleve Cleve MolerMoler至至今今仍仍是是该该公公司司的的首首席席科科学学家家,他他以以6060多多岁岁的的高高龄龄,还还常常常常亲亲自自进进行行撰撰写写程程序序的的工工作作,非非常常令令人人佩佩服服。如如果果你你有有数数值值运运算算方方面面的的高高水水平平问问题题,寄寄到到 MathWorks MathWorks 后后,大大部部份份还还是是会会由由 Cleve Cleve MolerMoler亲亲自自回回答答。在在19941994年年,PentiumPentium芯芯片片曾曾发发生生FdivFdiv的的bugb

14、ug,当当时时Cleve MolerCleve Moler是第一个以软件方式解决此是第一个以软件方式解决此bugbug的人,曾一时脍炙人口。的人,曾一时脍炙人口。 在在公公司司初初创创的的五五年年,Jack Jack LittleLittle非非常常辛辛苦苦,常常常常身身兼兼数数职职(董董事事长长、总总经经理理、推推销销、程程序序开开发发等等),但但公公司司一一直直稳稳定定发发展展,从从当当初初的的一一人人公公司司,到到19931993年年的的200200人人,到到20002000年年的的 500500余余人人,到到20052005年年公公司司员员工工达达到到了了13001300人人,不不但但

15、打打败败其其他他竞竞争争软软件件,而而且且前前景景一一片片欣欣欣欣向向荣荣。根根据据Jack Jack LittleLittle个个人人说说法法,MATLABMATLAB早早期期成成功功的的两两大大因因素素是是:选选用用了了C C语语言言及及选选定定PCPC为为主主要平台,这似乎和微软的成功有相互呼应之妙。要平台,这似乎和微软的成功有相互呼应之妙。 MathWorksMathWorks公公司司,目目前前仍仍然然是是私私人人企企业业,并并未未上上市市,这这和和Jack Jack LittleLittle个个人人理理念念有有关关,他他认认为为MATLABMATLAB的的设设计计方方向向应应该该一一

16、直直是是以以顾顾客客的的需需求求与与软软件件的的完完整整性性为为首首要要目目标标,而而不不是是以以盈盈利利为为主主要要目目的的,因因此此MATLABMATLAB一一直直是是在在稳稳定定中中求求进进步步,而而不不会会因因为为上上市市而而遭遭受受股股东东左左右右其其发发展展方方向向。这这也也是是为为什什么么MATLABMATLAB新新版版本本总总是是姗姗姗姗来来迟迟的的原原因因,因因为为他他们们不不会会因因为为市市场场的的需需求求而而推推出出不不成成熟熟的的产产品品。此此外外,由由于于Jack Jack LittleLittle保保守守的的个个性性,也也使使得得MathWorksMathWorks

17、不不曾曾跨跨足足MATLAB/SimulinkMATLAB/Simulink以外的行业,当前商场上纷纷扰扰的并购或分家,以外的行业,当前商场上纷纷扰扰的并购或分家,MathWorksMathWorks完全是绝缘体。完全是绝缘体。 2024/9/412 Matlab Programing 19921992年年,支支持持Windows Windows 3.x3.x的的MATLAB MATLAB 4.04.0版版本本推推出出,增增加加了了SimulinkSimulink,ControlControl,Neural NetworkNeural Network,Signal ProcessingSign

18、al Processing等专用工具箱。等专用工具箱。 19931993年年1111月月,MathWorksMathWorks公公司司推推出出了了Matlab Matlab 4.14.1,其其中中主主要要增增加加了了符符号号运运算算功功能能。当升级至当升级至Matlab 4.2cMatlab 4.2c,这一功能在用户中得到广泛应用。,这一功能在用户中得到广泛应用。 19971997年年,Matlab Matlab 5.05.0版版本本问问世世了了, ,实实现现了了真真正正的的3232位位运运算算,加加快快数数值值计计算算,图图形形表现有效。表现有效。 20012001年初,年初,MathWor

19、ksMathWorks公司推出了公司推出了Matlab 6.0Matlab 6.0(R12R12)。)。 20022002年年7 7月月,推推出出了了Matlab Matlab 6.5(R13)6.5(R13),在在这这一一版版本本中中SimulinkSimulink升升级级到到了了5.05.0,性性能能有有了了很很大大提提高高,另另一一大大特特点点是是推推出出了了JITJIT程程序序加加速速器器,MatlabMatlab的的计计算算速速度度有有了了明显的提高。明显的提高。 20052005年年9 9月月,推推出出了了MAILAB MAILAB 7.1(Release14 7.1(Releas

20、e14 SP3)SP3),在在这这一一版版本本中中SimulinkSimulink升升级级到到了了6.36.3,软软件件性性能能有有了了新新的的提提高高,用用户户界界面面更更加加友友好好。值值得得说说明明的的是是,Matlab Matlab V7.1V7.1版采用了更先进的数学程序库,即版采用了更先进的数学程序库,即“LAPACKLAPACK”和和“BLASBLAS”。目前,目前,MatlabMatlab软件支持多种系统平台,如常见的软件支持多种系统平台,如常见的WindowsNT/XPWindowsNT/XP、UNIXUNIX、LinuxLinux等。等。MatlabMatlab版本的发展版

21、本的发展 2024/9/413 Matlab Programing MATLABMATLAB就就是是这这样样经经过过了了近近3030年年的的专专门门打打造造、2020多多年年的的千千锤锤百百炼炼,它它以以高高性性能能的的数数组组运运算算(包包括括矩矩阵阵运运算算)为为基基础础,不不仅仅实实现现了了大大多多数数数数学学算算法法的的高高效效运运行行函函数数和和数数据据可可视视化化,而而且且提提供供了了非非常常高高效效的的计计算算机机高高级级编编程程语语言言,在在用用户户可可参参与与的的情情况况下下,各各种种专专业业领领域域的的工工具具箱箱不不断断开开发发和和完完善善,MATLABMATLAB取取得

22、得了了巨巨大大的的成成功功,已已广广泛泛应应用于用于科学研究、工程应用,用于数值计算分析、系统建模与仿真。科学研究、工程应用,用于数值计算分析、系统建模与仿真。 早早在在2020世世纪纪9090年年代代初初,欧欧美美等等发发达达国国家家的的大大学学就就将将MATLABMATLAB列列为为一一种种必必须须掌掌握握的的编程语言。近几年来,国内的很多大学也将编程语言。近几年来,国内的很多大学也将MATLABMATLAB列为了本科生必修课程。列为了本科生必修课程。 与与MapleMaple、MathematicaMathematica数数学学计计算算软软件件相相比比,MATLABMATLAB以以数数值

23、值计计算算见见长长,而而MapleMaple等等以以符符号号运运算算见见长长,能能给给出出解解析析解解和和任任意意精精度度解解,而而处处理理大大量量数数据据的的能能力力远远不不如如MATLABMATLAB。 MATLABMATLAB软软件件功功能能之之强强大大、应应用用之之广广泛泛,已已成成为为为为2121世世纪纪最最为为重重要要的的科科学学计计算算语语言言。可见学习掌握这一工具的重要性。可见学习掌握这一工具的重要性。 2024/9/414 Matlab Programing MATLABMATLAB产品由若干模块组成,不同的模块完成不同的功能,其中有:产品由若干模块组成,不同的模块完成不同的

24、功能,其中有: 实际上实际上MATLABMATLAB本身就是一个极其丰富的资源库,那么应该从哪一部分开始着手、学习本身就是一个极其丰富的资源库,那么应该从哪一部分开始着手、学习使用使用MATLABMATLAB呢?这就有必要了解这一软件产品的体系结构呢?这就有必要了解这一软件产品的体系结构 。MATLAB CompilerMATLAB Compiler这种编译器可以将这种编译器可以将MATLABMATLAB程序文程序文件编译生成标准的件编译生成标准的C/C+C/C+语言文件,而生成的标准语言文件,而生成的标准的的C/C+C/C+文件可以被任何一种文件可以被任何一种C/C+C/C+编译器编译生编译

25、器编译生成函数库或可执行文件,以提高程序的运行效率。成函数库或可执行文件,以提高程序的运行效率。1.2 MATLAB1.2 MATLAB产品的体系结构产品的体系结构 MATLABMATLABMATLAB ToolboxesMATLAB ToolboxesMATLAB CompilerMATLAB CompilerSimulinkSimulinkSimulink BlocksetsSimulink BlocksetsReal-Time Workshop Real-Time Workshop (RTW)(RTW)StateflowStateflowStateflow CoderStateflow

26、Coder由这些模块产品之间的关系可以图由这些模块产品之间的关系可以图1.11.1表示。表示。图1.1 MATLAB产品体系结构围绕着围绕着MATLABMATLAB这个计算核心,形成了诸多针对不同应这个计算核心,形成了诸多针对不同应用领域的算法程序包,被称为专用工具箱(用领域的算法程序包,被称为专用工具箱(ToolboxToolbox),),这些工具箱的列表以及每个工具箱的使用详见这些工具箱的列表以及每个工具箱的使用详见MATLABMATLAB在线帮助文档。在线帮助文档。MATLABMATLAB本身所提供的工具箱大概有本身所提供的工具箱大概有4040多个,另外还有其他公司或研究单位开发提供的工

27、具多个,另外还有其他公司或研究单位开发提供的工具箱,这些工具箱的总数已有箱,这些工具箱的总数已有100100多个,而且新的工具箱多个,而且新的工具箱还在不断增加。如果你有特别的应用领域,可以首先还在不断增加。如果你有特别的应用领域,可以首先到网上查找是否已有相关的工具箱,很可能已有人将到网上查找是否已有相关的工具箱,很可能已有人将你要做的应用程序作成工具箱了。你要做的应用程序作成工具箱了。SimulinkSimulink是窗口图形方式的、专门用于连续是窗口图形方式的、专门用于连续时间或离散时间的动态系统建模、分析和仿时间或离散时间的动态系统建模、分析和仿真的核心。真的核心。Real-Time

28、WorkshopReal-Time Workshop是一种实时代码生成工具,它能够根据是一种实时代码生成工具,它能够根据SimulinkSimulink模型生成程序源代码,并打包、编译所生成的源代码模型生成程序源代码,并打包、编译所生成的源代码生成实时应用程序。生成实时应用程序。 从现有的从现有的Simulink Simulink 和和StateflowStateflow自动生成自动生成C C语言程序代码的功能、语言程序代码的功能、定点运算模块集(定点运算模块集(Fixed-point BlocksetFixed-point Blockset)与)与C C语言程序代码到语言程序代码到VHDLV

29、HDL(Very High Speed Integrated Circuit Hardware Very High Speed Integrated Circuit Hardware Description LanguageDescription Language,一种标准的硬件电路设计语言,一种标准的硬件电路设计语言 )的自动转)的自动转换功能,可以看出,高级的系統仿真或低级的芯片算法设计,都可换功能,可以看出,高级的系統仿真或低级的芯片算法设计,都可用用MATLABMATLAB、SimulinkSimulink、StateflowStateflow及相关的工具箱来完成。及相关的工具箱来完成

30、。StateflowStateflow是基于有限状态机理论针对复是基于有限状态机理论针对复杂的事件驱动系统进行建模、仿真的工杂的事件驱动系统进行建模、仿真的工具。具。Stateflow CoderStateflow Coder是基于是基于StateflowStateflow状态图状态图生成高效、优化的程序代码。生成高效、优化的程序代码。围绕着围绕着SimulinkSimulink仿真核心所开发的应用程序包,仿真核心所开发的应用程序包,称为模块集(称为模块集(BlocksetsBlocksets),MATLAB,MATLAB产品提供许多产品提供许多专用模块集,如专用模块集,如Communicat

31、ion BlocksetCommunication Blockset、DSP DSP BlocksetBlockset、SimPowerSystem BlocksetSimPowerSystem Blockset、Signal Signal Processing BlocksetProcessing Blockset等,详见等,详见MATLABMATLAB在线帮助在线帮助文档。文档。MATLABMATLAB是是MATLABMATLAB产品家族的计算核心产品家族的计算核心与基础,是集高性能数值计算与数据与基础,是集高性能数值计算与数据可视化于一体的高效编程语言。可视化于一体的高效编程语言。 20

32、24/9/415 Matlab Programing1.3 MATLAB1.3 MATLAB编程语言的特点编程语言的特点 语语法法规规则则简简单单。尤尤其其内内定定的的编编程程规规则则,与与其其他他编编程程语语言言(如如C C、FortranFortran等等)相相比比更更接接近于常规数学表示。对于数组变量的使用,不需类型声明,无需事先申请内存空间。近于常规数学表示。对于数组变量的使用,不需类型声明,无需事先申请内存空间。MATLABMATLAB语言主要有以下几个特点:语言主要有以下几个特点: MATLAB基基本本的的语语言言环环境境提提供供了了数数以以千千计计的的计计算算函函数数,极极大大的

33、的提提高高了了用用户户的的编编程程效效率率。如如,一一个个fftfft函函数数即即可可完完成成对对指指定定数数据据的的快快速速傅傅里里叶叶变变换换,这这一一任任务务如如果果用用C C语语言言来来编编程程实现的话,至少要用几十条实现的话,至少要用几十条C C语言才能完成。语言才能完成。 因此,因此,MATLABMATLAB是一个简单易用、功能强大的高效编程语言。是一个简单易用、功能强大的高效编程语言。 平平台台无无关关性性(可可移移植植性性)。MATLABMATLAB软软件件可可以以运运行行在在很很多多不不同同的的计计算算机机系系统统平平台台上上,如如Windows Windows Me/NT/

34、2000/XPMe/NT/2000/XP、很很多多不不同同版版本本的的UNIXUNIX以以及及LinuxLinux。无无论论你你在在哪哪一一个个平平台台上上编编写写的的程程序序都都可可以以运运行行在在其其它它平平台台上上,对对于于MATLABMATLAB数数据据文文件件也也一一样样,是是平平台台无无关关的的。极极大大保保护护了了用用户户的的劳劳动动、方方便便了了用用户户。其其绘绘图图功功能能也也是是平平台台无无关关的的。无无论论任任何何系系统统平平台台,只只要要MATLABMATLAB能够运行,其图形功能命令就能正常运行。能够运行,其图形功能命令就能正常运行。 MATLAB是是一一种种脚脚本本

35、式式(scripted)的的解解释释型型语语言言。无无论论是是命命令令、函函数数或或变变量量,只只要要在在命令窗口的提示符下键入,并命令窗口的提示符下键入,并“回车(回车(EnterEnter)”,MATLABMATLAB都予以解释执行。都予以解释执行。 2024/9/416 Matlab Programing功能强大功能强大数值运算优势数值运算优势符号运算优势符号运算优势(Maple)(Maple)强大的强大的2D2D、3D3D数据可视化功能数据可视化功能许多具有算法自适应能力的功能函数许多具有算法自适应能力的功能函数 2024/9/417 Matlab Programing语言简单、内涵丰

36、富语言简单、内涵丰富语言及其书写形式非常接近于常规数学书写形式;语言及其书写形式非常接近于常规数学书写形式;其其操操作作和和功功能能函函数数指指令令就就是是常常用用的的计计算算机机和和数数学学书书上上的的一一些些简简单单英英文文单词表达的,如:单词表达的,如:helphelp、clearclear等;等;完备的帮助系统,易学易用。完备的帮助系统,易学易用。扩充能力、可开发能力较强扩充能力、可开发能力较强MATLABMATLAB完全成了一个开放的系统完全成了一个开放的系统用户可以开发自己的工具箱用户可以开发自己的工具箱可以方便地与可以方便地与FortranFortran、C C等语言接口等语言接

37、口 编程易、效率高编程易、效率高 MatlabMatlab以数组为基本计算单元以数组为基本计算单元具有大量的算法优化的功能函数具有大量的算法优化的功能函数第2章Matlab的桌面环境及入门知识概述的桌面环境及入门知识概述2 MATLAB2 MATLAB的桌面环境及入门知识的桌面环境及入门知识 2024/9/419 Matlab Programing启动与退出启动与退出MATLAB MATLAB 命令窗口及使用命令窗口及使用数值表示、变量、表达式数值表示、变量、表达式命令历史窗口命令历史窗口工作空间工作空间获取在线帮助获取在线帮助2.1 2.1 启动与退出启动与退出MATLAB MATLAB 2

38、024/9/420 Matlab Programing启动启动MATLAB直接用鼠标双击桌面上直接用鼠标双击桌面上MATLABR2012a图标图标或或Windows桌桌面面的的“开开始始”“所所有有程程序序”“MATLABR2012a” “MATLABR2012a”。退出退出MATLAB关闭关闭MATLAB桌面桌面在命令窗口执行在命令窗口执行quit或或exit命令命令MATLAB缺省桌面(见下页)缺省桌面(见下页) 2024/9/421 Matlab Programing菜单栏菜单栏工具栏工具栏文件编辑窗口文件编辑窗口工作空间工作空间历史命令历史命令窗口窗口Start 菜单菜单命令窗口命令窗

39、口命令提示符命令提示符2.1 2.1 启动与退出启动与退出MATLAB MATLAB 2.1 2.1 启动与退出启动与退出MATLAB MATLAB 2.2 2.2 命令窗口的使用命令窗口的使用激活命令窗口。激活命令窗口。“”与闪烁的光标一起表明系统就绪,等待输与闪烁的光标一起表明系统就绪,等待输入。入。命令窗口脱离命令窗口脱离MATLAB桌面。桌面。简单计算简单计算【例例2.2-1】计算计算(1)在)在MATLAB命令窗口输入命令窗口输入 以下内容:以下内容:(12+2*(7-4)/32(2)按)按【Enter】键,指令执行。键,指令执行。(3)返回的计算结果:)返回的计算结果:ans= 2

40、 2024/9/422 Matlab Programing2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/423 Matlab Programing说明说明l在命令窗口在命令窗口【Enter】键提交命令执行。键提交命令执行。lMatlab所所用用运运算算符符(如如+、-、等等)是是各各种种计计算算程序中常见的。程序中常见的。l计计算算结结果果中中的的“ans”是是英英文文“answer”的的一一种种缩缩写写,其其含含义义就就是是“运运算算答答案案”。ans是是Matlab的的一一个预定义变量。个预定义变量。2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/424 Matl

41、ab Programing简单计算简单计算【例例2.2-2】计算计算sin(4)sin(45*pi/180)lMatalb中正弦函数中正弦函数sin就是常见的正弦函数。就是常见的正弦函数。l它的参数值是以它的参数值是以“弧度弧度”为单位的。为单位的。lpi也是也是Matalb的预定义变量。的预定义变量。lpi=3.14159lMatlab对字母大小写是敏感的。对字母大小写是敏感的。sqrt(2*exp(4.92+0.5)+1)lMatalb中中 开开 平平 方方 sqrt(x),是是英英文文square root的缩写的缩写 。lMatalb中中 指指 数数 函函 数数exp(x),常常见见的

42、的表表达达方方式。式。ans= 0.7071ans= 21.2781【例例2.2-3】计算计算的值,其中的值,其中x=4.92。2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/425 Matlab Programing7“clc”清除窗口显示内容的命令。清除窗口显示内容的命令。y=2*sin(0.3*pi)/(1+sqrt(5)y=y= 0.5000 0.5000y=2*cos(0.3*pi)/(1+sqrt(5)y= 0.3633%命令行编辑命令行编辑l “”键键调调回回已已输输入入过命令。过命令。l修改。修改。【例例2.2-4】计算计算的值。的值。【例例2.2-5】计算计算的值

43、的值。2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/426 Matlab Programing【例例2.2-6】计算半径为计算半径为5.2m的圆的周长和面积。的圆的周长和面积。radius=5.2; %圆的半径圆的半径area=pi*5.22, circle_len=2*pi*5.2area = 84.9487circle_len = 32.6726l以上两例,命令行中用到了等以上两例,命令行中用到了等号号“=”。l计算结果不再赋给计算结果不再赋给“ans”,而,而是赋给用户指定的变量是赋给用户指定的变量y、area、circle_len。l无论是预定义变量还是用户自无论是预定义

44、变量还是用户自定义变量都被存储在系统的工定义变量都被存储在系统的工作空间内,即系统定义的一个作空间内,即系统定义的一个存储窗口变量的内存空间。存储窗口变量的内存空间。lWho、whos命令用来显示工命令用来显示工作空间的变量作空间的变量lclear命令用来清除工作空间的命令用来清除工作空间的变量。变量。2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/427 Matlab ProgramingwhowhosYour variables are:ans circle_len y area radius Name Size Bytes Class ans 1x1 8 double arr

45、ay area 1x1 8 double array circle_len 1x1 8 double array radius 1x1 8 double array y 1x1 8 double arrayGrand total is 5 elements using 40 bytes2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/428 Matlab ProgramingclearywhoYour variables are:ans circle_len area radius clearansareawhosYour variables are:Name Size Bytes

46、Classcircle_len 1x1 8 double arrayradius 1x1 8 double arrayGrand total is 2 elements using 16 bytes2.2 2.2 命令窗口的使用命令窗口的使用 2024/9/429 Matlab Programing数值显示格式设置数值显示格式设置缺省显示格式:简洁的短(缺省显示格式:简洁的短(short gshort g)格式)格式窗口命令及语法格式:窗口命令及语法格式:format format 显示格式关键字显示格式关键字 如:如:format long %15format long %15位数字显示位数

47、字显示常见通用命令常见通用命令命令命令含义含义clcclc清除命令窗口的显示内容清除命令窗口的显示内容clearclear清除清除MatlabMatlab工作空间中保存的变量工作空间中保存的变量whowho或或whoswhos显示显示MatlabMatlab工作空间中的变量信息工作空间中的变量信息dirdir显示当前工作目录的文件和子目录清单显示当前工作目录的文件和子目录清单cdcd 显示或设置当前工作目录显示或设置当前工作目录typetype 显示指定显示指定m m文件的内容文件的内容helphelp或或docdoc获取在线帮助获取在线帮助quitquit或或exitexit关闭关闭/ /推

48、出推出MATALBMATALB 2024/9/430 Matlab Programing工作空间工作空间2.3 2.3 工作空间工作空间2.3 2.3 工作空间工作空间 2024/9/431 Matlab Programing查看工作空间内存变量,可以由查看工作空间内存变量,可以由whowho、whos whos 。命名新变量。命名新变量。修改变量名修改变量名删除变量删除变量绘图绘图保存变量数据保存变量数据装入数据装入数据2.3 2.3 工作空间工作空间 2024/9/431 Matlab Programing查看工作空间内存变量,可以由查看工作空间内存变量,可以由whowho、whos wh

49、os 。2.3 2.3 工作空间工作空间 2024/9/431 Matlab Programing命名新变量。命名新变量。修改变量名修改变量名删除变量删除变量2.3 2.3 工作空间工作空间 2024/9/431 Matlab Programing绘图绘图2.3 2.3 工作空间工作空间 2024/9/431 Matlab Programing保存变量数据保存变量数据装入数据装入数据2.4 2.4 历史窗口历史窗口 2024/9/432 Matlab Programingn历史窗口:历史窗口:n首先首先记录每次启动时间记录每次启动时间n并并记记录录在在命命令令窗窗口口输输入入命命令令,此此次次

50、运运行行期期间间,输输入入的的所所有有命命令令被被记记录录为为一一组组,并并以以此此次次启启动动时时间为标志。间为标志。n使用历史窗口:使用历史窗口:n可以查看命令窗口输入过的命令或语句可以查看命令窗口输入过的命令或语句n可可以以选选择择一一条条或或多多条条命命令令执执行行拷拷贝贝、执执行行、创创建建M M文件等。文件等。 要要清清除除历历史史记记录录,可可以以选选择择EditEdit菜菜单单中中的的Clear Clear Command Command History History 命令命令2.4 2.4 历史窗口历史窗口 2024/9/432 Matlab Programing 2024

51、/9/433 Matlab Programing2.5 2.5 当前目录窗口和搜索路径当前目录窗口和搜索路径当前目录窗口:当前目录窗口:指指Matlab运行时的工作目录。运行时的工作目录。l只只有有在在当当前前目目录录和和搜搜索索路路径径下下的的文文件件、函函数数才才可可以以被被运行和调用。运行和调用。l如果没有特殊指明,数据文件也将存放在当前目录下;如果没有特殊指明,数据文件也将存放在当前目录下;l用用户户可可以以将将自自己己的的工工作作目目录录设设置置成成当当前前目目录录,从从而而使使得所有操作都在当前目录中进行。得所有操作都在当前目录中进行。 2024/9/434 Matlab Prog

52、raming搜搜索索路路径径:指指Matlab执执行行过过程程中中对对变变量量、函函数数和和文文件件进行搜索的路径。进行搜索的路径。l在在File菜菜单单中中选选择择Set Path命命令令或或在在命命令令窗窗口口输输入入pathtool命令,出现搜索路径设置对话框:命令,出现搜索路径设置对话框:!修改完搜索路径后,!修改完搜索路径后,需要进行保存。需要进行保存。 2024/9/434 Matlab Programing2.5 2.5 当前目录窗口和搜索路径当前目录窗口和搜索路径2.6 2.6 获取在线帮助获取在线帮助 2024/9/435 Matlab ProgramingMATLAB提供的

53、帮助信息有两类提供的帮助信息有两类简单纯文本帮助信息简单纯文本帮助信息helplookfor(条件比较宽松)例:(条件比较宽松)例:inverse窗口式综合帮助信息(文字、公式、图形)窗口式综合帮助信息(文字、公式、图形)dochelpwin【功能演示【功能演示-1-1】 2024/9/436 Matlab Programing求方程求方程的全部根。的全部根。p=2,0,-3,71,-9,13;建立多项式系数向量建立多项式系数向量x=roots(p);求根求根x=-3.49141.6863+2.6947i1.6863-2.6947i0.0594+0.4251i0.0594-0.4251i【功能

54、演示【功能演示-2-2】求解线性方程组】求解线性方程组 2024/9/437 Matlab Programinga=2,3,-1;8,2,3;45,3,9;建立系数矩阵建立系数矩阵ab=2;4;23;建立列向量建立列向量bx=inv(a)*bx=0.55310.2051-0.2784 2024/9/438 Matlab Programing符号计算符号计算symsxyz 建立符号变量建立符号变量x,y,z=solve(2*x+3*y-z-2,8*x+2*y+3*z-4,45*x+3*y+9*z-23)x = 151/273 y = 8/39 z = -76/273【功能演示【功能演示-3-3】

55、求解定积分】求解定积分 求解求解I=quad(x.*log(1+x),0,1)ans=0.250或或symsxnt(x*log(1+x),0,1)ans=1/4 2024/9/439 Matlab Programing【功能演示【功能演示-4-4】多项式曲线拟合】多项式曲线拟合考虑如下考虑如下x-y一组实验数据:一组实验数据:x=1,2,3,4,5,6,7,8,9,10y=1.2,3,4,4,5,4.7,5,5.2,6,7.2注:注:一次多项式拟合:一次多项式拟合:p1=polyfit(x,y,1)三次多项式拟合三次多项式拟合:p3=polyfit(x,y,3)plot原始数据、一次拟合曲线和

56、三次拟合曲线原始数据、一次拟合曲线和三次拟合曲线x2=1:0.1:10;y1=polyval(p1,x2)y3=polyval(p3,x2)plot(x,y,*,x2,y1,:,x2,y3) 2024/9/440 Matlab Programing 2024/9/441 Matlab Programing拟合曲线图拟合曲线图由图可见,三次拟合结果较好。由图可见,三次拟合结果较好。 2024/9/441 Matlab Programing复习复习安装、调试安装、调试Matlab环境环境熟悉熟悉Matlab开发环境开发环境第3章Matlab数据及其运算数据及其运算3 Matlab3 Matlab数

57、据及其运算数据及其运算 2024/9/445 Matlab Programing数值表示数值表示变量变量表达式表达式程序控制结构程序控制结构M M文件文件3.1 3.1 数值表示、变量及表达式数值表示、变量及表达式 2024/9/446 Matlab Programing数值的记述数值的记述 MatlabMatlab的的数数只只采采用用习习惯惯的的十十进进制制表表示示,可可以以带带小小数数点点和和负负号号; ;其缺省的数据类型为双精度浮点型(其缺省的数据类型为双精度浮点型(doubledouble)。)。 例如:例如:3 -10 0.001 1.3e10 1.256e-63 -10 0.001

58、 1.3e10 1.256e-6变量命令规则变量命令规则l变变量量名名、函函数数名名对对字字母母的的大大小小写写是是敏敏感感的的。如如myVarmyVar与与myvarmyvar表示两个不同的变量。表示两个不同的变量。l变量名变量名第一个字母必须是第一个字母必须是英文字母。英文字母。l变量名可以包含变量名可以包含英文字母、下划线和数字。英文字母、下划线和数字。l变量名变量名不能包含空格、标点。不能包含空格、标点。l变量名最多可包含变量名最多可包含6363个个字符(字符(6.56.5及以后的版本)。及以后的版本)。3.1 3.1 数值表示、变量及表达式数值表示、变量及表达式 2024/9/447

59、 Matlab ProgramingMatlabMatlab预定义的变量预定义的变量变量名量名意意义ans最近的计算结果的变量名最近的计算结果的变量名epsMATLAB定义的正的极小值定义的正的极小值=2.2204e-16pi圆周率圆周率inf值,无限大值,无限大i或或j虚数单元,虚数单元,sqrt(-1)NaN非数,非数,0/0、/说明说明l每当每当MATLABMATLAB启动完成,这些变量就被产生。启动完成,这些变量就被产生。lMATLABMATLAB中中,被被0 0除除不不会会引引起起程程序序中中断断,给给出出报报警警的的同同时时用用infinf或或NaNNaN给出结果。给出结果。l用用

60、户户只只能能临临时时覆覆盖盖这这些些预预定定义义变变量量的的值值,ClearClear或或重重启启MATLABMATLAB可可恢恢复其值。复其值。3.1 3.1 数值表示、变量及表达式数值表示、变量及表达式 运算符和表达式运算符和表达式运算运算数学表达式数学表达式MATLAB运算符运算符MATLAB表达式表达式加加a+b+a+b减减a-b-a-b乘乘axb*a*b除除a/b或或ab/或或a/b或或ab幂幂ab 2024/9/448 Matlab Programing说明说明lMatlabMatlab用用“ ”和和”/ /”分分别别表表示示“左左除除”和和“右右除除”。对对标标量量而而言言,两者

61、没有区别。对矩阵产生不同影响。两者没有区别。对矩阵产生不同影响。lMATLABMATLAB表达式的书写规则与表达式的书写规则与“手写方式手写方式”几乎完全相同。几乎完全相同。l表达式按与常规相同的优先级自左至右执行运算。表达式按与常规相同的优先级自左至右执行运算。l优先级:指数运算级别最高,乘除次之,加减最低。优先级:指数运算级别最高,乘除次之,加减最低。l括号改变运算的次序。括号改变运算的次序。3.1 3.1 数值表示、变量及表达式数值表示、变量及表达式 复数及其运算复数及其运算MATLAB中复数的表达:中复数的表达:z=a+bi,其中,其中a、b为实数。为实数。MATLAB把复数作为一个整

62、体,象计算实数一样计算复数把复数作为一个整体,象计算实数一样计算复数。 2024/9/449 Matlab Programing【例例3-1】复数复数z1=3+4i,z2=1+2i,z3=计算计算z1=3+4*i,z2=1+2*i,z3=exp(i*pi/6),z=z1*z2/z3z_real=real(z),z_image=imag(z),z_angle=angle(z),z_length=abs(z),MatlabMatlab数据及其运算数据及其运算 2024/9/450 Matlab ProgramingMatlabMatlab数数据据类类型型非非常常丰丰富富,除除数数值值型型、字字符符

63、型型等等基基本本数数据据类类型型外外,还还有有结结构构体体、单单元元等等更更为为复复杂杂的的数数据类型。据类型。 各各种种数数据据类类型型都都以以矩矩阵阵形形式式存存在在,矩矩阵阵是是MatlabMatlab最最基基本本的的数数据据对对象象,并并且且矩矩阵阵的的运运算算是是定定义义在在复复数数域上的。域上的。3.3.2 2 Matlab Matlab程序控制结构程序控制结构 2024/9/450 Matlab Programing顺序结构顺序结构分支结构分支结构循环结构循环结构其他语句其他语句3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab

64、Programingl 顺序结构顺序结构 按顺序执行程序中的各条语句按顺序执行程序中的各条语句 程序在整体上都是顺序结构程序在整体上都是顺序结构3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab Programingl 分支分支结构结构 lif-then-else if-then-else 语句语句lif if 语句语句1 1le else lse 语句语句2 2 le endndlif if 语句语句1 1lendend3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab Programingl

65、 分支分支结构结构 lif if 1 语句语句1 1le else if lse if 2 语句语句2 2 lelse if else if 3 语句语句3 3 lendend3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab Programingl 分支分支结构结构 ls switch-case witch-case 语句语句lswitch switch lc case ase 判断值判断值1 1 语句语句1 1 lcase case 判断值判断值2 2 语句语句2 2lotherwiseotherwise 语句语句n nlendendlif

66、 if 语句语句1 1lendend3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab Programingl 循环循环结构结构 lfor-end for-end 语句语句lf for or 循环控制变量循环控制变量= = 起始值:步长:终止值起始值:步长:终止值 循环体循环体le endndlwhilewhile-end -end 语句语句lwhilewhile 循环体循环体lendend3.2 3.2 MatlabMatlab程序控制结构程序控制结构 2024/9/450 Matlab Programingl 其他语句其他语句lbreak

67、break 和和 continue continue 语句语句lbreakbreak:跳出循环:跳出循环lcontinuecontinue:提前结束当前循环:提前结束当前循环lreturn return 语句:终止程序语句:终止程序ltry-catch try-catch 语句:异常处理语句:异常处理【功能演示【功能演示- -1 1】将百分制成绩转换为五级制输出将百分制成绩转换为五级制输出 2024/9/437 Matlab Programingclearn=input(inputn=);ifn=90r=Aelseifn=80r=Belseifn=70r=Celseifn=60r=Delser

68、=Eenda=2,3,-1;8,2,3;45,3,9;建立系数矩阵建立系数矩阵ab=2;4;23;建立列向量建立列向量bx=inv(a)*binputn=78r=C【功能演示【功能演示- -2 2】循环计算循环计算1+2+3+1+2+3+100+100 2024/9/437 Matlab Programingclearsum=0;fori=1:1:100sum=sum+i;endsumsum=50503.3 3.3 M M文件文件 2024/9/450 Matlab Programingl 函数文件函数文件l用来定义一个函数,需要制定输入参数和输出参数用来定义一个函数,需要制定输入参数和输出参

69、数l MATLAB MATLAB 的的 M M 函函数数是是由由 function function 语语句句引引导导的的,其基本格式如下:其基本格式如下:lfunction function 返返回回变变量量列列表表 = = 函函数数名名 ( (输输入入变变量量列列表表) ) l注释说明语句段注释说明语句段, , 由由 % % 引导引导 l输入、返回变量格式的检测输入、返回变量格式的检测l函数体语句函数体语句3.3 3.3 M M文件文件 2024/9/450 Matlab Programingl 2. 2.输入变量和返回变量的个数输入变量和返回变量的个数l这里输入和返回变量的实际个数分别由

70、这里输入和返回变量的实际个数分别由 nargin nargin 和和 nargout nargout 两个两个 MATLAB MATLAB 保留变量来给出,保留变量来给出,只要进入该函数,只要进入该函数,MATLAB MATLAB 就将自动生成这两个变就将自动生成这两个变量,不论您是否直接使用这两个变量。量,不论您是否直接使用这两个变量。l返回变量如果多于返回变量如果多于 1 1 个,则应该用方括号将个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。回变量之间用逗号来分割。3.3 3.3 M M文件文件 2024

71、/9/450 Matlab Programingl3.3.注释语句的使用注释语句的使用注释语句段的每行语句都应该由百分号注释语句段的每行语句都应该由百分号 % % 引导,引导,百分号后面的内容不执行,只起注释作用。用户采百分号后面的内容不执行,只起注释作用。用户采用用 help help 命令则可以显示出来注释语句段的内容。命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方我们将通过下面的例

72、子来演示函数编程的格式与方法。法。 2024/9/450 Matlab Programing第第 i i 行第行第 j j 列的元素值为列的元素值为 1/(i+j-1)1/(i+j-1)。即:。即:11,1/21/2,1/31/3,1/n1/n1/21/2,1/31/3,1/41/4,1/(n+1)1/(n+1)1/31/3,1/41/4,1/51/5,1/(n+2)1/(n+2)1/n1/n,1/(n+1)1/(n+1),1/(n+2)1/(n+2),1/(2n-1)1/(2n-1)【功能演示【功能演示- -3 3】生成一个生成一个 n x m n x m 阶的阶的 Hilbert Hilb

73、ert 矩阵矩阵 2024/9/450 Matlab Programing我们想在编写的函数中实现下面几点:我们想在编写的函数中实现下面几点:如果只给出一个输入参数,则会自动生成一个方阵,如果只给出一个输入参数,则会自动生成一个方阵,即令即令 m=nm=n在函数中给出合适的帮助信息,包括基本功能、调在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明用方式和参数说明检测输入和返回变量的个数,如果有错误则给出错检测输入和返回变量的个数,如果有错误则给出错误信息误信息 如果调用时不要求返回变量,则将显示结果矩阵。如果调用时不要求返回变量,则将显示结果矩阵。【功能演示【功能演示- -3 3】

74、生成一个生成一个 n x m n x m 阶的阶的 Hilbert Hilbert 矩阵矩阵 2024/9/450 Matlab Programing【功能演示【功能演示- -3 3】生成一个生成一个 n x m n x m 阶的阶的 Hilbert Hilbert 矩阵矩阵 A=myhilb(3,4)A =1.0000 0.5000 0.3333 0.25000.5000 0.3333 0.2500 0.20000.3333 0.2500 0.2000 0.1667 A=myhilb(4)A =1.0000 0.5000 0.3333 0.25000.5000 0.3333 0.2500 0

75、.20000.3333 0.2500 0.2000 0.16670.2500 0.2000 0.1667 0.1429 myhilb(4)1.0000 0.5000 0.3333 0.25000.5000 0.3333 0.2500 0.20000.3333 0.2500 0.2000 0.16670.2500 0.2000 0.1667 0.1429 2024/9/450 Matlab Programing【功能演示【功能演示- -4 4】编写一个输入半径编写一个输入半径, ,计算圆的面积计算圆的面积和球的体积和球的体积 的的M M文件文件. .Typeradius:3Typeradius:

76、13.5Theradiusis13.50000Theareaofacircleis572.55526Thevolumeofasphereis10305.99470建立建立编辑编辑保存保存调用调用复习复习 2024/9/450 Matlab ProgramingMatlabMatlab数据类型数据类型 各各种种数数据据类类型型都都以以矩矩阵阵形形式式存存在在,矩矩阵阵是是MatlabMatlab最最基基本本的的数数据据对对象象,并并且且矩矩阵阵的的运运算算是是定定义义在在复复数数域上的。域上的。 Matlab Matlab程序控制结构程序控制结构 顺序结构顺序结构 、分支结构、循环结构、分支结构

77、、循环结构 M M文件(函数文件)文件(函数文件) 建立建立、编辑、保存、调用、编辑、保存、调用 第4章Matlab矩阵矩阵(数组数组)的表示及运算的表示及运算4 Matlab4 Matlab矩阵矩阵( (数组数组) )的表示及运算的表示及运算 2024/9/452 Matlab Programing数组的概念数组的概念一维数组变量的创建一维数组变量的创建二维数组变量的创建二维数组变量的创建数组元素的标识与寻访数组元素的标识与寻访数组运算数组运算多维数组多维数组4.1 4.1 数组数组(array)(array)的概念的概念数组定义数组定义:按按行行(row)和和列列(column)顺顺序序排

78、排列列的的实实数数或或复复数数的有序集,被称为的有序集,被称为数组数组。数数组组中中的的任任何何一一个个数数都都被被称称为为这这个个数数组组的的元元素素,由由其其所所在在的的行行和和列列标标识识,这这个个标标识识也也称称为为数数组组元元素的素的下标或索引下标或索引。Matlab将将标量标量视为视为11的数组。的数组。对对m行、行、n列的列的2维数组维数组a:计为计为mn的数组的数组a;*行标识、列标识均从行标识、列标识均从1开始;开始;行标识从上到下递增;行标识从上到下递增;列标识从左到右递增。列标识从左到右递增。12345222232425332333435442434445 2024/9/

79、453 Matlab Programinga(3, 4)=34 row is firsta=4.1 4.1 数组数组(array)(array)的概念的概念 2024/9/454 Matlab Programing数组的分类数组的分类一维数组,一维数组,也称为向量也称为向量(vector)。行向量行向量(rowvector)、列向量、列向量(columnvector)。二维数组二维数组(矩阵矩阵matrix)。多维数组。多维数组。有有效效矩矩阵阵:每每行行元元素素的的个个数数必必须须相相同同,每每列列元元素素的个数也必须相同。的个数也必须相同。4.1 4.1 数组数组(array)(array

80、)的概念的概念 2024/9/455 Matlab Programing行向量行向量列向量列向量a(2,1)=3a(1,2)=2b(3)=3c(2)=24.2 4.2 创建一维数组变量创建一维数组变量 2024/9/456 Matlab Programing第一种方法:使用方括号第一种方法:使用方括号“”操作符操作符【例例4.2-1】创建数组创建数组(行向量行向量)a=13pi3+5ia=13pi3+5*i%ora=1,3,pi,3+5*ia=1.00003.00003.14163.0000+5.0000i所有的向量元素必须在操作符所有的向量元素必须在操作符“”之内;之内;向量元素间用空格或英

81、文的逗点向量元素间用空格或英文的逗点“,”分开。分开。第二种方法:使用冒号第二种方法:使用冒号“:”操作符操作符【例例4.2-2】创创建建以以110顺顺序序排排列列整整数数为为元元素素的的行行向向量量b。b=1:10b=123456789104.2 4.2 创建一维数组变量创建一维数组变量 2024/9/457 Matlab Programing【例例4.2-3】键入并执行键入并执行c=1:2:10和和d=1:2:9c=1:2:10c=13579d=1:2:9d=13579利用冒号利用冒号“:”操作符创建行向量的基本语法格式:操作符创建行向量的基本语法格式:x=Start:Increment:

82、EndStart表示新向量表示新向量x的第一个元素;的第一个元素;新向量新向量x的最后一个元素不能大于的最后一个元素不能大于End;Increment可可正正可可负负,若若负负,则则必必须须StartEnd;若若正,则必须正,则必须Starta=123;b=234;c=a;b;c1=ab;第二种方法:函数方法第二种方法:函数方法函函数数ones(生生成成全全1矩矩阵阵)、zeros (生生成成全全0矩矩阵阵) 、reshapeF“helpelmat”获得基本的矩阵生成和操作函数列表获得基本的矩阵生成和操作函数列表【例例4.3-4】创建全创建全1的的3x3数组。数组。ones(3)【例例4.3-

83、5】创建全创建全1的的3x4数组。数组。ones(3,4)4.3 4.3 创建二维数组变量创建二维数组变量 2024/9/464 Matlab Programing【例例4.3-6】reshape的使用演示的使用演示a=-4:4a=-4-3-2-101234b=reshape(a,3,3)b=-4-12-303-214F数数组组元元素素的的排排列列顺顺序序,从从上上到到下下按按列列排排列列,先排第一列,然后第二列,先排第一列,然后第二列,F要求数组的要求数组的元素总数不变。元素总数不变。4.4 4.4 数组元素的标识与数组元素的标识与寻访寻访 2024/9/465 Matlab Program

84、ing数组元素的标识数组元素的标识“全下标(全下标(index)”标识标识经典数学教科书采用经典数学教科书采用“全下标全下标”标识法:标识法:每一维对应一个下标。每一维对应一个下标。如如对对于于二二维维数数组组,用用“行行下下标标和和列列下下标标”标标识识数数组组的的元元素素,a(2,3)就表示二维数组就表示二维数组a的的“第第2行第行第3列列”的元素。的元素。对对于于一一维维数数组组,用用一一个个下下标标即即可可,b(2)表表示示一一维维数数组组b的的第第2个元素,无论个元素,无论b是行向量还是列向量。是行向量还是列向量。“单下标单下标”(linearindex)标识)标识所谓所谓“单下标单

85、下标”标识就是用一个下标来表明元素在数组的位置。标识就是用一个下标来表明元素在数组的位置。对对于于二二维维数数组组,“单单下下标标”编编号号:设设想想把把二二维维数数组组的的所所有有列列,按按先先后后顺顺序序首首尾尾相相接接排排成成“一一维维长长列列”,然然后后自自上上往往下对元素位置执行编号。下对元素位置执行编号。两种两种“下标下标”标识的变换:标识的变换:sub2ind、ind2sub4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/466 Matlab Programing【例例4.4-1】单下标的使用单下标的使用a=zeros(2,5);a(:)=-4:5a=-4

86、-2024-3-1135%注意数组的排列顺序。注意数组的排列顺序。4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/467 Matlab Programing元素与子数组的寻访与赋值元素与子数组的寻访与赋值【例例4.4-2】一维数组元素与子数组的寻访与赋值一维数组元素与子数组的寻访与赋值a=linspace(1,10,5)a=1.00003.25005.50007.750010.0000a(3)%寻访寻访a的第的第3个元素个元素ans=5.5000a(125)%寻访寻访a的第的第1、2、5个元素组成的子数组个元素组成的子数组ans=1.00003.250010.00004

87、.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/468 Matlab Programinga(1:3)%寻访前寻访前3个元素组成的子数组个元素组成的子数组ans=1.00003.25005.5000a(3:-1:1)%由前由前3个元素倒序构成的子数组个元素倒序构成的子数组ans=5.50003.25001.0000a(3:end)ans=5.50007.750010.0000a(3:end-1)ans=5.50007.7500%第第3个及其后所有元素构个及其后所有元素构成的子数组成的子数组%函数函数end作为参数使用,返回最后一个元素的下标作为参数使用,返回最后一个元素的

88、下标4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/469 Matlab Programinga(12355321)ans=1.00003.25005.500010.000010.00005.50003.25001.0000%数数组组元元素素可可以以被被任任意意重重复复访访问问,构构成成长长度度大大于于原原数数组组的的新新数数组。组。a(6)?Indexexceedsmatrixdimensions.M下标值超出了数组的维数,导致错误下标值超出了数组的维数,导致错误a(2.1)? Subscript indices must either be real positiv

89、e integers orlogicals.M下标值只能取正整数或逻辑值下标值只能取正整数或逻辑值4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/470 Matlab Programinga(3)=0%修改数组修改数组a的第的第3元素值为元素值为0a=1.00003.250007.750010.0000a(25)=11a=1.00001.000007.75001.0000可以修改指定数组元素的值可以修改指定数组元素的值一次可以修改多个数组元素的值一次可以修改多个数组元素的值要要修修改改的的数数组组元元素素的的个个数数应应与与送送入入数数组组的的元元素素个个数相同数相同4

90、.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/471 Matlab Programing【例例4.4-3】二维数组元素与子数组的寻访与赋值二维数组元素与子数组的寻访与赋值a_2=zeros(2,4)%创建创建2x4的全的全0数组数组a_2=00000000a_2(:)=1:8a_2=13572468a_2(258)%单下标方式寻访多个元素单下标方式寻访多个元素ans=258%注意元素的排列顺序注意元素的排列顺序4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/472 Matlab Programinga_2(258)=102030a_2=13207

91、104630a_2(:,23)=ones(2)%双下标方式寻访并修改双下标方式寻访并修改a_2=1117101130%二二维维数数组组可可以以“单单下下标标”方方式式或或“全全下下标标”方方式式访访问问、赋赋值;值;%“单单下下标标”方方式式赋赋值值时时,等等号号两两边边涉涉及及的的元元素素个个数数必必须须相相等;等;%“全全下下标标”方方式式赋赋值值时时,等等号号右右边边数数组组的的大大小小必必须须等等于于原原数组中涉及元素构成的子数组的大小。数组中涉及元素构成的子数组的大小。4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/473 Matlab Programinga

92、_2(:,end)ans=730a_2(:,end-1)ans=11a_2(:,end:-1:3)ans=71301a_2(end,:)ans=101130a_2(end,2:4)ans=1130a_2(46)=6:7a_2=1117106730a_2(end,2:end-1)Whatistheresult?4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/474 Matlab Programing【例例4.4-4】size、length函数函数a=ones(4,6)*6m=size(a)len=length(a)b=1:5;length(b)c=blength(c) s

93、ize函函数数返返回回变变量量的的大大小小,即即变量数组的行列数变量数组的行列数length函函数数返返回回变变量量数数组组的的最最大维数大维数4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/475 Matlab Programing双下标到单下标的转换双下标到单下标的转换【例例4.4-5】sub2ind函数函数-双下标转换为单下标双下标转换为单下标A=172418;222714;461320;A(:,:,2)=A-10A(2,1,2)sub2ind(size(A),2,1,2)A(14)4.4 4.4 数组元素的标识与寻访数组元素的标识与寻访 2024/9/476 M

94、atlab Programing单下标到双下标的转换单下标到双下标的转换【例例4.4-6】ind2sub函数函数-双下标转换为单下标双下标转换为单下标b=zeros(3);b(:)=1:9IND=3456I,J=ind2sub(size(b),IND)4.5 4.5 多多维数组维数组 2024/9/477 Matlab Programing多维数组的定义多维数组的定义在在MATLAB的的数据类型数据类型中,向量中,向量可视为一维数组,可视为一维数组,矩阵可视为矩阵可视为二二维数组维数组,对于维数对于维数(Dimensions)超过超过2的的数组均可视为数组均可视为多维数组多维数组(Multid

95、imesionalArrays,简称简称N-DArrays)。4.5 4.5 多多维数组维数组 2024/9/478 Matlab Programing将将两两个个二二维维(平平面面)数数组组叠叠在在一一起起,就就构构成成三三维维数组数组,第三第三维称为维称为页页(Page),如下如下图所示图所示:(3,4) (3,1) (3,2) (3,3)(2,4)(2,3)(2,2)(2,1)(1,4)(1,3)(1,2)(1,1)(1,1)(1,2)(1,3)(1,4)(2,1)(2,2)(2,3)(2,4)(3,1)(3,2)(3,3)(3,4)页列页行4.5 4.5 多多维数组维数组 2024/9

96、/479 Matlab Programing三三维维数数组组,可可对对应应至至一一个个X-Y-Z三三维维立立体体坐标坐标,如下,如下图所示图所示:Z(页页)Y(列列)X(行行)4.5 4.5 多多维数组维数组 2024/9/480 Matlab Programing三维数组元素的寻址:三维数组元素的寻址:可以可以(行、列、页行、列、页)来确定来确定。以以维维数数为为342的的三三维维数数组组为为例例,其其寻寻址址方方式式如如下下图所示图所示:n数数组组A是是三三维维数数组组,其其中中A(:,:,1)代代表表第第一一页页的的二二维维数数组组,A(:,:,2)代代表表第第二二页页的的二二维维数组数

97、组。4.5 4.5 多多维数组维数组 2024/9/4Matlab Programing104 多维数组多维数组的建立的建立建建立立一一个个简简单单的的多多维维数数组组,可可直直接接由由MATLAB命令视窗内输入(使用命令视窗内输入(使用“”操作符)操作符)例例:由两个相同大小二维数组创建三维数组由两个相同大小二维数组创建三维数组A(:,:,1)=1025;4187;3263;A(:,:,2)=3541;2621;4230A(:,:,1)=102541873263A(:,:,2)=3541262142304.5 4.5 多多维数组维数组 2024/9/480 Matlab Programing

98、执行命令:执行命令:whosA,得到如下结果:,得到如下结果:NameSizeBytesClassA3x4x2192doublearrayGrandtotalis24elementsusing192bytes4.6 4.6 数组数组运算运算 2024/9/481 Matlab Programing算术运算算术运算关系运算关系运算逻辑运算逻辑运算数据分析与统计数据分析与统计4.6.1 4.6.1 算术算术运算运算 2024/9/482 Matlab ProgramingMATLAB数组支持线性代数中所有的矩阵运算。数组支持线性代数中所有的矩阵运算。建立特有的数组运算符,如:建立特有的数组运算符,

99、如:“.*”、“./”等。等。 MATLAB数组运算符列表数组运算符列表运算运算运算符运算符含义说明含义说明加加+相应元素相加相应元素相加减减-相应元素相减相应元素相减乘乘*矩阵乘法矩阵乘法点乘点乘.*相应元素相乘相应元素相乘幂幂 矩阵幂运算矩阵幂运算点幂点幂.相应元素进行幂运算相应元素进行幂运算左除或右除左除或右除或或/矩阵左除或右除矩阵左除或右除左点除或右点除左点除或右点除.或或./A的元素被的元素被B的对应元素除的对应元素除4.6.1 4.6.1 算术运算算术运算 2024/9/483 Matlab Programing【例例4.6-1】数组加减法数组加减法a=zeros(2,3);a(

100、:)=1:6;b=a+2.5b=3.50005.50007.50004.50006.50008.5000c=b-ac=2.50002.50002.50002.50002.50002.50004.6.1 4.6.1 算术运算算术运算 2024/9/484 Matlab Programing【例例4.6-2】画出画出y=1/(x+1)的函数曲线,的函数曲线,x0,100。x=0:100;y=1./(x+1);plot(x,y);legend(y=1/(x+1);4.6.1 4.6.1 算术运算算术运算 2024/9/485 Matlab Programing【例例4.6-3】生成一个信号:生成一个

101、信号:x=sin(2*pi*t)+sin(4*pi*t)t=0:199./100;%采样时间点采样时间点%生成信号生成信号x=sin(2*pi*t)+sin(4*pi*t);plot(t,x);legend(x=sin(2*pi*t)+sin(4*pi*t);4.6.1 4.6.1 算术运算算术运算 2024/9/486 Matlab Programing4.6.1 4.6.1 算术运算算术运算 2024/9/487 Matlab Programing【例例4.6-4】点点幂幂“.”举例举例a=1:6a=123456b=reshape(a,2,3)b=135246a=a.2a=14916253

102、6b=b.2b=192541636 2024/9/488 Matlab Programing4.6.24.6.2 关系运算关系运算 Matlab提供了提供了6种关系运算符:种关系运算符:、=、=、=(不等于)(不等于)关系运算符的运算法则:关系运算符的运算法则:1、当两个标量进行比较时,直接比较两数大小。若关系成立,、当两个标量进行比较时,直接比较两数大小。若关系成立,结果为结果为1,否则为,否则为0。2、当两个维数相等的矩阵进行比较时,其相应位置的元素按、当两个维数相等的矩阵进行比较时,其相应位置的元素按标量关系进行比较,并给出结果,形成一个维数与原来相同标量关系进行比较,并给出结果,形成一

103、个维数与原来相同的的0、1矩阵。矩阵。3、当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行、当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行比较,结果形成一个与矩阵维数相等的比较,结果形成一个与矩阵维数相等的0、1矩阵。矩阵。 2024/9/489 Matlab Programing4.6.2 4.6.2 关系关系运算运算【例例4.6-5】建立建立5阶方阵阶方阵A,判断其元素能否被,判断其元素能否被3整除。整除。A=24,35,13,22,63;23,39,47,80,80;.90,41,80,29,10;45,57,85,62,21;37,19,31,88,76A=243513226

104、32339478080904180291045578562213719318876P=rem(A,3)=0%被被3除,求余除,求余P=1000101000100001100100000 2024/9/490 Matlab Programing4.6.34.6.3 逻辑运算逻辑运算 Matlab提供了提供了3种逻辑运算符:种逻辑运算符:&(与)、(与)、|(或)、(或)、(非)(非)逻辑运算符的运算法则:逻辑运算符的运算法则:1、在逻辑运算中,确认非零元素为真(、在逻辑运算中,确认非零元素为真(1),零元素为假(),零元素为假(0)。)。2、当两个维数相等的矩阵进行比较时,其相应位置的元素按、当

105、两个维数相等的矩阵进行比较时,其相应位置的元素按标量关系进行比较,并给出结果,形成一个维数与原来相同标量关系进行比较,并给出结果,形成一个维数与原来相同的的0、1矩阵;矩阵;3、当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行、当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行比较,结果形成一个与矩阵维数相等的比较,结果形成一个与矩阵维数相等的0、1矩阵;矩阵;4、算术运算优先级最高,逻辑运算优先级最低。、算术运算优先级最高,逻辑运算优先级最低。 2024/9/491 Matlab Programingx=0:pi/100:3*pi;y=sin(x);y1=(y=0).*y;%消去负半波

106、消去负半波【例【例4.6-6】在在0,3区区间,求间,求y=sinx的值。要求的值。要求消去负半波,即消去负半波,即(,2)区间内的函数值置零。区间内的函数值置零。 2024/9/492 Matlab Programing【例例4.6-7】建建立立矩矩阵阵A,找找出出在在10,20区区间间的的元元素素的的位置。位置。A=4,15,-45,10,6;56,0,17,-45,0;find(A=10&Ax=-43,72,9,16,23,47;y=max(x)%求向量求向量x中的最大值中的最大值y=72y,l=max(x)%求向量求向量x中的最大值及其该元素的位置中的最大值及其该元素的位置y=72l=

107、24.6.4 4.6.4 数据分析与统计数据分析与统计 2024/9/495 Matlab Programing2.求矩阵的最大值和最小值求矩阵的最大值和最小值求矩阵求矩阵A的最大值的函数有的最大值的函数有3种调用格式,分别是:种调用格式,分别是:(1)max(A):返返回回一一个个行行向向量量,向向量量的的第第i个个元元素素是是矩矩阵阵A的第的第i列上的最大值;列上的最大值;(2)Y,U=max(A):返返回回行行向向量量Y和和U,Y向向量量记记录录A的每列的最大值,的每列的最大值,U向量记录每列最大值的行号;向量记录每列最大值的行号;(3)max(A,dim):dim取取1或或2。dim取

108、取1时时,该该函函数数和和max(A)完完全全相相同同;dim取取2时时,该该函函数数返返回回一一个个列向量,其第列向量,其第i个元素是个元素是A矩阵的第矩阵的第i行上的最大值。行上的最大值。求最小值的函数是求最小值的函数是min,其用法和,其用法和max完全相同。完全相同。 2024/9/496 Matlab Programing【例例4.6-9】求矩阵的最大值求矩阵的最大值x=-43,72,9;16,23,47;y=max(x)%求矩阵求矩阵x中每列的最大值中每列的最大值y=167247y,l=max(x)%求矩阵求矩阵x中每列的最大值及其该元素的位置中每列的最大值及其该元素的位置y=16

109、7247l=212max(x,1),max(x,2)%求矩阵中每行的最大值求矩阵中每行的最大值4.6.4 4.6.4 数据分析与统计数据分析与统计 2024/9/497 Matlab Programing求和与求积求和与求积sum(X):返回向量返回向量X各元素的和。各元素的和。prod(X):返回向量返回向量X各元素的乘积。各元素的乘积。sum(A):返回一个行向量,其第返回一个行向量,其第i个元素是个元素是A的第的第i列的元素和。列的元素和。prod(A):返回一个行向量,其第返回一个行向量,其第i个元素是个元素是A的第的第i列的元素乘积。列的元素乘积。sum(A,dim):当当dim为为

110、1时时,该该函函数数等等同同于于sum(A);当当dim为为2时时,返返回一个列向量,其第回一个列向量,其第i个元素是个元素是A的第的第i行的各元素之和。行的各元素之和。prod(A,dim):当当dim为为1时时,该该函函数数等等同同于于prod(A);当当dim为为2时时,返回一个列向量,其第返回一个列向量,其第i个元素是个元素是A的第的第i行的各元素乘积。行的各元素乘积。4.6.4.6.4 4 数据分析与统计数据分析与统计 2024/9/498 Matlab Programing平均值与中值平均值与中值求求数数据据序序列列平平均均值值的的函函数数是是mean,求求数数据据序序列列中中值值

111、的的函函数数是是median。两个函数的调用格式为:两个函数的调用格式为:mean(X):返回向量返回向量X的算术平均值。的算术平均值。median(X):返回向量返回向量X的中值。的中值。mean(A):返回一个行向量,其第返回一个行向量,其第i个元素是个元素是A的第的第i列的算术平均值。列的算术平均值。median(A):返回一个行向量,其第:返回一个行向量,其第i个元素是个元素是A的第的第i列的中值。列的中值。mean(A,dim):当当dim为为1时时,该该函函数数等等同同于于mean(A);当当dim为为2时时,返回一个列向量,其第返回一个列向量,其第i个元素是个元素是A的第的第i行

112、的算术平均值。行的算术平均值。median(A,dim):当当dim为为1时时,该该函函数数等等同同于于median(A);当当dim为为2时,返回一个列向量,其第时,返回一个列向量,其第i个元素是个元素是A的第的第i行的中值。行的中值。4.7 4.7 字符串字符串(string、arrayofcharacters) 2024/9/499 Matlab Programing关于字符串关于字符串MATLAB处处理理字字符符(Characters)与与字字符符串串(Strings)的的相关指令相关指令大部分都放在下列目大部分都放在下列目录录之中:之中:MATLAB根目录根目录toolboxmatl

113、abstrfun其其中中的的strfun就就是是代代表表StringFunctions。若若要要查查询询与与字字符符和和字字符符串串相相关关的的指指令令,可可在在MATLAB下下输输入:入:helpstrfun或是或是helpstrings4.7.1 4.7.1 字符串字符串的的概念概念 2024/9/4100 Matlab Programing字字 符符 ( Characters) 可可 以以 构构 成成 一一 个个 字字 符符 串串(Strings),或,或字符数组字符数组(characterarray)。一一个字符串个字符串是被是被视为一个视为一个行行向量向量(rowvector)。字字

114、符符串串中中的的每每一一个个字字符符(含含空空格格),以以其其ASCII码码的的形形式式存存放放于于行行向向量量中中,是是该该字字符符串串变变量量的的一一个个元素元素(element)。4.7.1 4.7.1 字符串的概念字符串的概念Matlab用用单引号单引号来来界定界定一个一个字字符符串串。可可以以使使用用方方括括号号“”直直接接连连接接多多个个字字符符串串变变量量,得得到一到一个个新字新字符符串串变量。变量。【例例4.7-1】命名字符串变量命名字符串变量str1=IlikeMATLAB,;%建立字串建立字串变量变量str1str2=JavaScript,andPerl!;%建立字串建立字

115、串变量变量str2str3=str1str2%直接连接直接连接str1及及str2,以建立,以建立str3str3=IlikeMATLAB,JavaScript,andPerl! 2024/9/4101 Matlab Programing4.7.1 4.7.1 字符串的概念字符串的概念如如要要输输入入的的字字符符串串中中有有单单引引号号,则则由由两两个个连连续续的的单单引号来表示。引号来表示。若若要要计计算算字字符符串串变变量量的的长长度度(即即组组成成字字符符串串的的个个数数),可用,可用length指令指令。【例例4.7-2】含单引号字符串的输入含单引号字符串的输入sentence=Ive

116、gotadate!;length(sentence)%计算计算字字字符串字符串sentence的的长度长度 2024/9/4102 Matlab Programingans=164.7.1 4.7.1 字符串的概念字符串的概念double 指指令令: 查查看看字字符符串串变变量量的的存存储储內內容容(即即ASCII内码内码)char指令指令:将将ASCII內內码转换为码转换为字字符符串形式串形式【例例4.7-3】:字符串与字符串与ASCII码的相互转换码的相互转换sentence=Ivegotadate!;sentenceAscii=double(sentence)%查看查看sentence的

117、的ASCII码码sentence2=char(sentenceAscii)%将将ASCII码码恢恢复复成成字字符符串串形式形式 2024/9/4103 Matlab ProgramingsentenceAscii=7339118101321031111163297321009711610133sentence2=Ivegotadate!4.7.2 4.7.2 字字符符串的串的判断判断 2024/9/4104 Matlab Programingclass或或ischar指指令令:可可以以用用来来判判断断一一个个变变量量的的类类型型或它或它是否是否为字符串变量。为字符串变量。【例例4.7-4】:判

118、断一个变量是否为字符串变量判断一个变量是否为字符串变量。chinese=今日事,今日今日事,今日毕毕;out1=class(chinese)%out1的的值值是是“char”x=chinese+1;out2=ischar(x)%out2的的值值是是0,代表代表x不是字不是字符符串串变量变量4.7.3 4.7.3 一一个字符数组变量存储个字符数组变量存储多多行行字字符符串串 2024/9/4105 Matlab Programing第第 一一 种种 方方 法法 是是 使使 用用 二二 维维 字字 符符 数数 组组 ( TwoDimensionalCharacterArrays)必必须须先先确确认

119、认每每个个字字符符串串(即即每每一一行行)的的长长度度一一样样,否则就必须否则就必须在短字在短字符符串串结尾补齐结尾补齐空空格格【例例4.7-5】:多行字符串变量多行字符串变量departments=ee;cs;econ注意注意上述语句中上述语句中空空格字符格字符的使用的使用。departments=eecsecon4.7.3 4.7.3 一一个字符数组变量存储个字符数组变量存储多多行行字字符符串串 2024/9/4106 Matlab Programing用用char指令存储多字符串指令存储多字符串得到得到结果结果和和上例的一样上例的一样;从从二二维维字字符符数数组组访访问问字字符符串串时时

120、,切切记记要要使使用用deblank指指令来清除字符串令来清除字符串尾部的空尾部的空格字符格字符【例例4.7-6】:使用使用deblank命令清除字符串命令清除字符串尾部空尾部空格格.departments=char(ee,cs,econ)%注注意意空空格格及及,的使用的使用departments=char(ee,cs,econ);dept1=departments(1,:);%(1,:)代表第一代表第一行行的的全部全部元素元素dept2=deblank(dept1);%使用使用deblank指令清除指令清除尾部的尾部的空格字符空格字符len1=length(dept1) %显示变量显示变量d

121、ept1的的长度长度=4len2=length(dept2)%显示变量显示变量dept2的的长度长度=24.7.4 4.7.4 字字符符串的串的操作操作 2024/9/4107 Matlab Programingstrcmp指指令令:用于比较字符串的用于比较字符串的內容的內容的异同异同不相等不相等返回返回0,相等相等返回返回1【例例4.7-7】:字符串比较字符串比较str1=today;str2=tomorrow;str3=today;out1=strcmp(str1,str2)%比较比较字字符符串串str1和和str2out1=0%表示表示字字符符串串str1和和str2不同不同out2=s

122、trcmp(str1,str3)%比较比较字字符符串串str1和和str3out2=1%表示表示字字符符串串str1和和str2相同相同4.8 4.8 空数组(空数组(emptyarray) 2024/9/4108 Matlab Programing有一维是有一维是0的数组即为空数组的数组即为空数组空数组不占据存储空间空数组不占据存储空间最简单的空数组:最简单的空数组:0x0的矩阵的矩阵复杂的空数组:复杂的空数组:0x5or10x0例如:例如:a=;b=ones(0,5);察看空数组:察看空数组:a,b,c%orwhosabc空数组并非全空数组并非全0数组数组4.8 4.8 空数组空数组(em

123、ptyarray) 2024/9/4109 Matlab Programing数组维数的减小数组维数的减小删除数组的某列和行删除数组的某列和行a=magic(4),a(:,2)=删除删除(2-D、3-D)数组的单个元素数组的单个元素使用使用“全下标全下标”方式,不能删除单个元素方式,不能删除单个元素a(1,2)=%系统会警告信息系统会警告信息使用使用“单下标单下标”可以删除单个元素可以删除单个元素a(2:4)=%数组数组a将变为向量将变为向量使用使用“”同样可以减小字符数组的维数同样可以减小字符数组的维数4.9 4.9 元胞数组(元胞数组(cellarray)元胞数组(单元数组)的概念元胞数组

124、(单元数组)的概念特特殊殊的的数数据据类类型型,在在一一个个数数组组中中存存放放各各种种不不同同类类型型的的数据数据每个单元相当于一个每个单元相当于一个“盒子盒子”“盒子盒子”可可存储各种存储各种不同不同类型类型的的MATLAB数据数据元胞数组例子:元胞数组例子:Cell1,1TaiwanTaibeiCell1,2MainlandBeijingCell1,31234test 2024/9/4110 Matlab Programing4.9.1 4.9.1 元胞数组的创建元胞数组的创建 2024/9/4111 Matlab Programing创建方法创建方法赋值语句赋值语句cell函数函数赋值

125、语句创建元胞数组赋值语句创建元胞数组元胞索引元胞索引(cellindexing)方式方式格式:格式:a(1,2)=元胞内容索引元胞内容索引(contentindexing)方式方式格式:格式:a1,2=or直接用大括直接用大括号号一次把所有元素括起一次把所有元素括起来来b=JamesBond,12;34;56;pi,ones(5)4.9.1 4.9.1 元胞数组的创建元胞数组的创建 2024/9/4112 Matlab ProgramingCellindexing方式创建元胞数组方式创建元胞数组a(1,1)=143;058;729;a(1,2)=AnneSmith;a(2,1)=3+7i;a(

126、2,2)=-pi:pi/10:pi;“”表示空元胞数组表示空元胞数组Contentindexing方式创建元胞数组方式创建元胞数组b1,1=JamesBond;b1,2=12;34;56;b2,1=pi;b2,2=zeros(5);4.9.1 4.9.1 元胞数组的创建元胞数组的创建 2024/9/4113 Matlab Programing元胞数组的连接元胞数组的连接Exam:连接元胞数组连接元胞数组a、b,生成元胞数组,生成元胞数组c。clearcc=ab%orc=a;bc=3x3doubleAnneSmithJamesBond3x2double3.0000+7.0000i1x21doub

127、le3.14165x5doublec=a;bResult?4.9.1 4.9.1 元胞数组的创建元胞数组的创建 2024/9/4114 Matlab Programingcell函数创建元胞数组函数创建元胞数组b=cell(2,3)b=whosbNameSizeBytesClassb2x324cellarray注意:每个注意:每个cell占有占有4个字节的空间个字节的空间b(1,3)=1:3;%orb1,3=1:3;4.9.2 4.9.2 显示元胞数组的内容显示元胞数组的内容 2024/9/4115 Matlab Programingcelldisp显示元胞数组的全部内容显示元胞数组的全部内容

128、aa=3x3doubleAnneSmith3.0000+7.0000i1x21doublecelldisp(a)%显示全部内容显示全部内容cellplot(a)%图形方式显示元胞数组的结构图形方式显示元胞数组的结构4.9.2 4.9.2 显示元胞数组的内容显示元胞数组的内容 2024/9/4116 Matlab Programing使用内容下标索引显示指定元胞的数据使用内容下标索引显示指定元胞的数据格式:格式:var_namerow_index,column_index或或var_name:Example:a1,2a:%一次显示一次显示a的全部数据的全部数据4.9.3 4.9.3 读取元胞数组

129、中的内容读取元胞数组中的内容 2024/9/4117 Matlab Programing直接取用直接取用元胞数组元胞数组的的整个元胞(单元)整个元胞(单元)取用取用元胞数组某元胞元胞数组某元胞內的內的数据单位数据单位一次一次读取读取或刪除多或刪除多个元胞个元胞4.9.3 4.9.3 读取元胞数组中的内容读取元胞数组中的内容 2024/9/4118 Matlab ProgramingExam:读读取取上上述述b元元胞胞数数组组的的第第1行行、第第2列列元元胞胞的的内内容容b,d=b1,2d=123456b=JamesBond3x2double3.14165x5double4.9.3 4.9.3

130、读取元胞数组中的内容读取元胞数组中的内容 2024/9/4119 Matlab ProgramingExam:读取读取b1,2的第的第3行、第行、第1列的数据。列的数据。e=b1,2(3,1)e=5读取元胞数组元胞内部分数据:读取元胞数组元胞内部分数据:元胞数组内容索引,再加上一般数组的索引,元胞数组内容索引,再加上一般数组的索引,即即:var_namerow_ind,col_ind(r_ind,c_ind)4.9.3 4.9.3 读取元胞数组中的内容读取元胞数组中的内容 2024/9/4120 Matlab ProgramingExam:读取元胞数组读取元胞数组a第第1行的所有元胞。行的所有

131、元胞。f=a(1,:)f=3x3doubleAnneSmithExam:删除元胞数组删除元胞数组a第第1行的所有元胞。行的所有元胞。a(1,:)=a=3.0000+7.0000i1x21doubleNote:这这里里使使用用的的是是元元胞胞索索引引(cellindexing),而而不不是是内内容索引(容索引(contentindexing)第第5章章结构与结构数组结构与结构数组5 5结构与结构数组结构与结构数组 2024/9/4122 Matlab Programing结构与结构数组的概念结构与结构数组的概念结构数组变量的创建结构数组变量的创建访问结构数组变量的内容访问结构数组变量的内容5.1

132、 5.1 结构与结构数组的概念结构与结构数组的概念 2024/9/4123 Matlab Programing结构结构(structure)由字段(或域,由字段(或域,fields)组成)组成每个字段可以是任一种每个字段可以是任一种Matlab数据类型的数据或变量数据类型的数据或变量与与C语言的结构类型相似语言的结构类型相似结构数组结构数组(structurearray)多个结构构成结构数组多个结构构成结构数组(structurearray)结构数组的元素就是一个结构结构数组的元素就是一个结构5.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4124 Matlab Progr

133、aming方法一:直接键入方法一:直接键入Exam:创建一个关于学生信息的结构数组,每个结构包含学创建一个关于学生信息的结构数组,每个结构包含学生姓名生姓名(name)、学号、学号(id)、成绩、成绩(scores)。clearstudent%清除清除student变量变量student.name=张三张三;%加入加入name字段字段student.id=mr871912;%加入加入id字段字段student.scores=58,75,62;%加入加入scores字段字段student%显示结构变量的数据显示结构变量的数据student=name:张三张三id:mr871912scores:5

134、8,75,62此时,此时,Matlab视视student为为一一个个1x1结构数组结构数组5.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4125 Matlab Programing第二个学生的信息建立第二个学生的信息建立student(2).name=张宁张宁;%加入加入name字段字段student(2).id=mr871913;%加入加入id字段字段student(2).scores=68,85,92;%加入加入scores字段字段student%显示变量信息显示变量信息student=1x2structarraywithfields:nameidscores5.2

135、5.2 结构数组变量的创建结构数组变量的创建 2024/9/4126 Matlab Programing此时,此时,student变量已成为一个变量已成为一个1x2的结构数组的结构数组只只是是简简单单输输入入变变量量名名student的的话话,Matlab不不再再显显示示其所有的数据信息,只是给出结构其所有的数据信息,只是给出结构如何显示结构数组变量如何显示结构数组变量student的数据?的数据?student(1)或或student(1).name5.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4127 Matlab Programing方法二:方法二:struc函数函

136、数格式格式Structure Array_var_name = struct(field1, value1, field2,value2,.)field1、field2、是是结构的字段名结构的字段名,value1、value2、则则是是相应字段相应字段所包含的所包含的数据数据。5.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4128 Matlab ProgramingExam:使用使用struct创建结构数组变量创建结构数组变量clearstudentstudent=struct(name,张听说张听说,scores,5060);student(2)=struct(name

137、,张廷安张廷安,scores,6070);student(1),student(2)%显示显示student(1),student(2)ans=name:张听说张听说scores:5060ans=name:张廷安张廷安scores:60705.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4129 Matlab ProgramingExam:使使用用struct创创建建结结构构数数组组变变量量(一一次次建建立立多多个个元素)元素)clearstudentstudent=struct(name,张张听听说说,张张廷廷安安,scores,5060,6070);student(1)

138、,student(2)%显示显示student(1),ans=name:张听说张听说scores:5060ans=name:张廷安张廷安scores:60705.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4130 Matlab Programing结构数组嵌套(结构数组嵌套(nested)结构数组中结构的字段还可以是结构。结构数组中结构的字段还可以是结构。student=struct(name,张张听听说说,张张廷廷安安,scores,5560,6580);student(2).course(1).title=WebProgramming;student(2).cours

139、e(1).credits=2;student(2).course(2).title=NumericalMethod;student(2).course(2).credits=3;student(2).courseans=1x2structarraywithfields:titlecredits5.2 5.2 结构数组变量的创建结构数组变量的创建 2024/9/4131 Matlab Programing结构数组嵌套(结构数组嵌套(nested)student结构数组变量的结构层次:结构数组变量的结构层次:studentnamescorescoursetiltecredits5.3 5.3 访问

140、结构数组变量的内容访问结构数组变量的内容 2024/9/4132 Matlab Programing格式:格式:struc_array_varname.field_nameExam:student_name=student(1).namestudent_name=张听说张听说修改结构数组变量的字段值:修改结构数组变量的字段值:student(1).name=Newton;student(1).name%Result?5.3 5.3 访问结构数组变量的内容访问结构数组变量的内容 2024/9/4133 Matlab Programingcat函数函数:排列结构数组某字段的值排列结构数组某字段的值

141、格式:格式:cat(dim,structurefield)dim=1,竖排;竖排;dim=2,横排横排Exam:cat(1,student.scores)ans=55606580cat(2,student.scores)ans=556065805.3 5.3 访问结构数组变量的内容访问结构数组变量的内容 2024/9/4134 Matlab Programing计算平均值(使用计算平均值(使用mean函数)函数)计算每次考试的平均值计算每次考试的平均值average1=mean(cat(1,student.scores)average1=6070思考:如何计算每个学生成绩的平均值思考:如何计算

142、每个学生成绩的平均值?第第6章章数据可视化数据可视化6 6 数据可视化数据可视化 2024/9/4136 Matlab Programing2-D2-D数据可视化数据可视化3-D3-D数据可视化数据可视化图像文件操作图像文件操作6.16.1 2-D 2-D数据可视化数据可视化 2024/9/4137 Matlab Programing世世界界顶顶级级的的数数值值计计算算工工具具软软件件MATLAB具具有有极极其其强强大的大的数据可视化数据可视化功能,功能,可制作具有出版质量图形。可制作具有出版质量图形。在前面的课程中,已经使用了在前面的课程中,已经使用了数据可视化命令数据可视化命令plot。详

143、细介绍详细介绍MATLAB这一部分的内容可以写这一部分的内容可以写一本书。一本书。我我们们只只能能介介绍绍MATLAB数数据据可可视视化化的的基基础础,2-D数数据据可视化、可视化、3-D数据可视化初步。数据可视化初步。二二维维图图形形是是将将平平面面坐坐标标上上的的数数据据点点连连接接起起来来的的平平面面图图形形。可可以以采采用用直直角角坐坐标标系系、对对数数坐坐标标、极极坐坐标标等等形形式式。数数据据点点可可以以用用向向量量或或矩矩阵阵形形式式给给出出,类类型型可可以以是是实型或复型。实型或复型。 2024/9/4138 Matlab Programing 2024/9/4139 Matl

144、ab Programing6.1.1 6.1.1 二维曲线绘图的基本操作二维曲线绘图的基本操作 2024/9/4140 Matlab Programingplotplot指令的基本调用格式指令的基本调用格式 (1)plot(x)x为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线x为为实实数数二二维维数数组组时时,则则按按列列绘绘制制每每列列元元素素值值相相对对其其下下标标的的曲曲线线,曲曲线线数数等等于于x数组的列数。数组的列数。x为为复复数数二二维维数数组组时时,则则按按列列分分别别以以数数组组的的实实部部和和虚虚部部为为横横、

145、纵纵坐坐标标绘绘制制多多条曲线条曲线(2)plot(x,y)x、y为同维数组时,绘制以为同维数组时,绘制以x、y元素为横纵坐标的曲线元素为横纵坐标的曲线x为为向向量量,y为为二二维维数数组组、且且其其列列数数或或行行数数等等于于x的的元元素素数数时时,绘绘制制多多条条不不同同颜色的曲线颜色的曲线x为二维数组,为二维数组,y为向量时,情况与上相同,只是为向量时,情况与上相同,只是y仍为纵坐标。仍为纵坐标。(3)plot(x1,y1,x2,y2,)绘绘制制以以x1为为横横坐坐标标、y1为为纵纵坐坐标标的的曲曲线线1,以以x2为为横横坐坐标标、y2为为纵纵坐坐标标的的曲曲线线2,等等。,等等。其中其

146、中x为横坐标,为横坐标,y为纵坐标,绘制为纵坐标,绘制y=f(x)函数曲线。函数曲线。例例6.1-16.1-1使用直角坐标系使用直角坐标系 2024/9/4141 Matlab Programing在在00,2 2 区间内,绘制曲线区间内,绘制曲线x=0:pi/100:2*pi;y=2*exp(-0.5*x).*sin(2*pi*x);plot(x,y)例例6.1-2 6.1-2 使用参数方程绘制曲线使用参数方程绘制曲线 2024/9/4142 Matlab Programing绘制曲线绘制曲线t=-pi:pi/100:pi;x=t.*cos(3*t);y=t.*sin(t).2;plot(x

147、,y)例例6.1-3 6.1-3 绘制复杂曲线绘制复杂曲线 2024/9/4143 Matlab Programing用图形表示连续调制波形用图形表示连续调制波形 及其包络线及其包络线。t=(0:pi/100:pi);%长度为长度为101的时间采样列向量的时间采样列向量y1=sin(t)*1,-1;%包络线函数值,是(包络线函数值,是(101x2)的矩阵)的矩阵y2=sin(t).*sin(9*t);%长度为长度为101的调制波列向量的调制波列向量t3=pi*(0:9)/9;y3=sin(t3).*sin(9*t3);plot(t,y1,r:,t,y2,b,t3,y3,bo)axis(0,pi

148、,-1,1)%控制轴的范围控制轴的范围多次叠绘、双纵坐标和多子图多次叠绘、双纵坐标和多子图 2024/9/4144 Matlab Programing多次叠绘多次叠绘多多次次调调用用plot命命令令在在一一幅幅图图上上绘绘制制多多条条曲曲线线,需需要要hold指令的配合。指令的配合。holdon保保持持当当前前坐坐标标轴轴和和图图形形,并并可可以以接接受受下下一一次绘制。次绘制。holdoff取取消消当当前前坐坐标标轴轴和和图图形形保保持持,这这种种状状态态下下,调调用用plot绘绘制制完完全全新新的的图图形形,不不保保留留以以前前的的坐坐标标格格式式、曲线。曲线。例例 6.1-4 6.1-4

149、 重绘曲线重绘曲线 2024/9/4145 Matlab Programing重绘波形重绘波形及其包络线及其包络线。t=(0:pi/100:pi);%长度为长度为101的时间采样列向量的时间采样列向量y1=sin(t)*1,-1;%包络线函数值,是(包络线函数值,是(101x2)的矩阵)的矩阵y2=sin(t).*sin(9*t);%长度为长度为101的调制波列向量的调制波列向量t3=pi*(0:9)/9;y3=sin(t3).*sin(9*t3);plot(t,y1,r:)holdonplot(t,y2,b)plot(t3,y3,bo)axis(0,pi,-1,1)%控制轴的范围控制轴的范围

150、holdoff例例6.1-5 6.1-5 利用利用holdhold绘制离散信号的波绘制离散信号的波形。形。 2024/9/4146 Matlab Programingt=2*pi*(0:20)/20;y=cos(t).*exp(-0.4*t);stem(t,y,g);holdon;stairs(t,y,r);holdoff双纵坐标:双纵坐标:plotyyplotyy指令指令 2024/9/4147 Matlab Programingplotyyplotyy指令调用格式:指令调用格式:plotyy(x1, y1, x2, y2)plotyy(x1, y1, x2, y2)x1-y1曲线曲线y轴在

151、左,轴在左,x2-y2曲线曲线y轴在右。轴在右。例例6.1-66.1-6:x=0:0.01:20;y1=200*exp(-0.05*x).*sin(x);y2=0.8*exp(-0.5*x).*sin(10*x);plotyy(x,y1,x,y2);plotyy(x,y1,x,y2);多子图多子图 2024/9/4148 Matlab ProgramingMATLAB允允许许在在同同一一图图形形窗窗口口布布置置几几幅幅独独立立的的子子图图。具具体指令:体指令:subplot(m,n,k)使(使(mxn)幅子图中第)幅子图中第k个子图成为当前图个子图成为当前图subplot(postion,le

152、ft,bottom,width,height)在指定的位置上开辟子图,并成为当前图在指定的位置上开辟子图,并成为当前图说明:说明:subplot(m,n,k)的的含含义义:图图形形窗窗口口包包含含(mxn)个个子子图图,k为为要要指指定定的的当当前前子子图图的的编编号号。其其编编号号原原则则:左左上上方方为为第第1子子图图,然然后后向向右右向向下下依依次次排排序序。该该指令按缺省值分割子图区域。指令按缺省值分割子图区域。subplot(postion,left,bottom,width,height)用用于于手手工工指指定定子子图图位位置置,指指定定位位置置的的四四元元组组采采用用归归一一化化

153、的的标标称称单单位位,即即认认为为整整个个图图形形窗窗口口绘绘图图区区域域的的高高、宽的取值范围都是宽的取值范围都是0,1,而左下角为(,而左下角为(0,0)坐标。)坐标。产生的子图彼此独立。所有的绘图指令均可以在子图中使用。产生的子图彼此独立。所有的绘图指令均可以在子图中使用。例例6.1-7 6.1-7 演示演示subplotsubplot指令对图形窗的分割指令对图形窗的分割 2024/9/4149 Matlab Programingt=(pi*(0:1000)/1000);y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);subplot(2,2,1)

154、,plot(t,y1);axis(0,pi,-1,1)subplot(2,2,2),plot(t,y2);axis(0,pi,-1,1)subplot(position,0.2,0.05,0.6,0.45)plot(t,y12,b-,t,y1,-y1,r:);绘制图形的辅助操作绘制图形的辅助操作 曲线线形控制符曲线线形控制符 曲线颜色控制符曲线颜色控制符 符号 - : -.-含义 实线 虚线 点划线 双划线 2024/9/4150 Matlab Programing符号 b g rcmykw含义兰绿红青品红黄黑白曲线的色彩、线型和数据点形曲线的色彩、线型和数据点形 2024/9/4151 Ma

155、tlab Programing曲曲线线的的线线形形控控制制符符、颜颜色色控控制制符符、数数据据点点形形控控制制符符可可以组合使用以组合使用其先后次序不影响绘图结果其先后次序不影响绘图结果也可以单独使用。也可以单独使用。 例例6.1-8 6.1-8 绘制图形的辅助操作绘制图形的辅助操作 2024/9/4152 Matlab ProgramingSpecify Line propertiest=(0:15)*2*pi/15;y=sin(t);subplot(3,2,1),plot(t,y);title(Linsstyleisdefault)subplot(3,2,2),plot(t,y,o);ti

156、tle(Linsstyleiso)subplot(3,2,3),plot(t,y,k:);title(Linsstyleisk:)subplot(3,2,4),plot(t,y,k:*);title(Linsstyleisk:*)subplot(3,2,5),plot(t,y,m-d);title(Linsstyleism-d)subplot(3,2,6),plot(t,y,r-p);title(Linsstyleisr-p) 2024/9/4153 Matlab Programing坐标、刻度和分格线控制坐标、刻度和分格线控制 2024/9/4154 Matlab Programing例例

157、6.1-9 6.1-9 控制控制 2024/9/4155 Matlab Programing绘制椭圆,长轴为绘制椭圆,长轴为3.253.25,短轴为,短轴为1.151.15t=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t);%y为长轴,为长轴,x为短轴为短轴subplot(2,2,1);plot(x,y);axisofftitle(axisoff);subplot(2,2,2);plot(x,y);axisimage;title(axisimage);subplot(2,2,3);plot(x,y);axisequal;title(axisEqual);s

158、ubplot(2,2,4);plot(x,y);axissquare;title(axisSquare); 2024/9/4156 Matlab Programing刻度刻度、分格线和坐标框分格线和坐标框 2024/9/4157 Matlab Programing分格线与分格线与gridgrid指令指令 gridon画出分格线画出分格线gridoff不画分格线不画分格线MATLAB的的缺缺省省设设置置是是不不画画分分格格线线;分分格格线线的的疏疏密密取取决决于于坐坐标标刻度(改变坐标刻度,可改变分格线的疏密)。刻度(改变坐标刻度,可改变分格线的疏密)。坐标框坐标框boxon控制加边框线控制加边

159、框线boxoff控制不加边框线控制不加边框线刻度设置刻度设置指令及格式:指令及格式:set(gca,xtick,xs,ytick,ys)xs、ys可可以以使使任任何何合合法法的的实实数数向向量量,用用于于分分别别设设置置x、y轴轴的的刻刻度。度。例例6.1-106.1-10 绘制绘制y=1-exp(-y=1-exp(-0.3*t).*cos(0.7*t) 0.3*t).*cos(0.7*t) 2024/9/4158 Matlab Programingt=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);tt=t(find(abs(y-1)0.05);ts

160、=max(tt);plot(t,y,r-);gridon;axis(0,6*pi,0.6,max(y);title(y=1-exp(-alpha*t)*cos(omega*t);holdon;plot(ts,0.95,bo);holdoff;set(gca,xtick,2*pi,4*pi,6*pi,ytick,0.95,1,1.05,max(y);gridon; 2024/9/4159 Matlab Programing6.1.2 6.1.2 图形标识图形标识 2024/9/4160 Matlab Programing图形标识包括图形标识包括:图名(图名(title)坐标轴名(坐标轴名(xla

161、bel、ylabel)图形文本注释(图形文本注释(text)图例(图例(legend)简捷使用格式简捷使用格式 title(s)%s为字符串变量或常量为字符串变量或常量xlabel(s)ylabel(s)legend(s)text(x,y,s)%指定坐标(指定坐标(x,y)处加注文字)处加注文字6.1.2 6.1.2 图形标识图形标识 2024/9/4161 Matlab Programing精细指令形式精细指令形式 字体样式设置:字体样式设置:fontnameargargfontsizeargstring其其中中,String为为要要输输出出的的字字符符串串,其其前前面面的的均均为为属属性性

162、控制,使用方法见下表。控制,使用方法见下表。6.1.2 6.1.2 图形标识图形标识 2024/9/4162 Matlab Programing例例6.1-11 6.1-11 在正弦曲线上标注特殊值在正弦曲线上标注特殊值 2024/9/4163 Matlab Programingt=(0:100)/100*2*pi;y=sin(t);plot(t,y)text(3*pi/4,sin(3*pi/4),fontsize16leftarrowsin(t)=.707)text(pi,sin(pi),fontsize16leftarrowsin(t)=0)text(5*pi/4,sin(5*pi/4),

163、fontsize16sin(t)=-.707rightarrow,.HorizontalAlignment,right)其其中中,HorizontalAlignment, right设设置置图图形标识为水平右对齐形标识为水平右对齐例例6.1-126.1-12 2024/9/4164 Matlab Programingt=0:900;plot(t,0.25*exp(-0.005*t)title(fontsize16itAealphat);text(300,.25*exp(-0.005*300),.fontsize14leftarrow0.25ite-0.005ittatitt=300);6.1.

164、3 6.1.3 特殊图形特殊图形 2024/9/4165 Matlab Programing直方图直方图( (柱形图柱形图)bar)bar垂直直方图垂直直方图累计式累计式分组式分组式水平直方图水平直方图累计式累计式分组式分组式例例6.1-136.1-13 2024/9/4166 Matlab Programingx=-2.9:0.2:2.9;bar(x,exp(-x.*x),r)例例6.1-146.1-14 2024/9/4167 Matlab Programing北京市从业人员统计北京市从业人员统计1990年年1995年年2000年年第一产业第一产业90.770.673.9(万人)(万人)第

165、二产业第二产业281.6271214.6第三产业第三产业254.8323.7326.5执行以下语句:执行以下语句:year=199019952000;people=90.7 281.6 254.8; 70.6 271 323.7; 73.9 214.6326.5;bar(year,people,stack);legend(fontsize6第第一一产产业业,fontsize6第第二二产产业业,fontsize6第三产业第三产业); 累计式直方图累计式直方图 2024/9/4168 Matlab Programing 2024/9/4169 Matlab Programingbar(year,p

166、eople,group);%分组式直方图分组式直方图legend(fontsize6第第 一一 产产 业业 , fontsize6第第 二二 产产 业业 ,fontsize6第三产业第三产业); 2024/9/4170 Matlab Programingbarh(year,people,group);%分组式直方图分组式直方图legend(fontsize6first,fontsize6second,fontsize6third); 2024/9/4171 Matlab Programingbarh(year,people,stack);%累积式直方图累积式直方图legend(fontsize

167、6first,fontsize6second,fontsize6third);饼图指令饼图指令piepie 2024/9/4172 Matlab Programing饼饼图图指指令令pie用用来来表表示示各各元元素素占占总总和和的的百百分分数数。该该指指令令第第二二输输入入变变量量是是与与第第一一变变量量同同长长的的0-1向向量量,1使使对对应应扇扇块块突突出。出。a=1,1.6,1.2,0.8,2.1;subplot(1,2,1),pie(a,10100),legend(1,2,3,4,5)subplot(1,2,2),b=int8(a=min(a)pie3(a,b)colormap(coo

168、l) 2024/9/4173 Matlab Programing离散杆图离散杆图stem stem 2024/9/4174 Matlab Programing余弦波的采样信号图余弦波的采样信号图t=linspace(-2*pi,2*pi,20);h=stem(t,cos(t);例例6.1-15 6.1-15 分别以条形图、填充图、阶分别以条形图、填充图、阶梯图和杆图形式绘图梯图和杆图形式绘图 2024/9/4175 Matlab Programingx=0:0.35:7;y=2*exp(-0.5*x);subplot(221);bar(x,y,g);title(bar(x,y,g);axis(

169、0,7,0,2);subplot(222);fill(x,y,r);title(fill(x,y,r);axis(0,7,0,2);subplot(223);stairs(x,y,b);title(stairs(x,y,b);axis(0,7,0,2);subplot(224);stem(x,y,k);title(stem(x,y,k);axis(0,7,0,2);例例6.1-16 6.1-16 极坐标图极坐标图 2024/9/4176 Matlab Programingpolar函数用来绘制极坐标图,其调用格式为:函数用来绘制极坐标图,其调用格式为:polar(theta,rho,选项选项)

170、例:绘制例:绘制=sin(2)cos(2)的图形的图形theta=0:0.01:2*pi;rho=sin(2*theta).*cos(2*theta);polar(theta,rho,k);6.2 6.2 3-D3-D数据可视化之三维绘图的基本操数据可视化之三维绘图的基本操作作 2024/9/4177 Matlab Programing三维线图指令三维线图指令plot3三三维维绘绘图图指指令令中中,plot3最最易易于于理理解解,它它的的使使用用格格式式与与plot十分相似,只是对应第十分相似,只是对应第3维空间的参量。维空间的参量。t=(0:0.02:2)*pi;x=sin(t);y=cos

171、(t);z=cos(2*t);plot3(x,y,z,b-,x,y,z,bd);view(-82,58);boxonlegend(链链,宝石宝石)三维线图绘制结果三维线图绘制结果 2024/9/4178 Matlab Programing三维网线图(三维网线图(meshmesh)和曲面图)和曲面图(surfsurf) 2024/9/4179 Matlab Programing画画函函数数z=f(x,y)所所代代表表的的三三维维空空间间曲曲面面,需需要要做做以以下下的数据准备工作:的数据准备工作:确定自变量的取值范围和取值间隔。确定自变量的取值范围和取值间隔。x=x1:dx:x2;y=y1:dy

172、:y2;构成构成x-y平面上的自变量采样平面上的自变量采样“格点格点”矩阵。矩阵。利用利用MATLAB指令指令meshgrid产生产生“格点格点”矩阵矩阵xa,ya=meshgrid(x,y);计计算算函函数数在在自自变变量量采采样样“格格点点”上上的的函函数数值值,即即z=f(x,y)。网线图、曲面图绘制。网线图、曲面图绘制。举例举例 2024/9/4180 Matlab Programing绘制函数绘制函数z=x2+y2的曲面的曲面x=-4:4;y=x;x,y=meshgrid(x,y);%生成生成x-y坐标坐标“格点格点”矩阵矩阵z=x.2+y.2;%计算格点上的函数值计算格点上的函数值

173、subplot(1,2,1),mesh(x,y,z);%三维网格图三维网格图subplot(1,2,2),surf(x,y,z);%三维曲面图三维曲面图colormap(hot); 2024/9/4181 Matlab Programing函数函数z=x2+y2z=x2+y2的曲面的绘制结果的曲面的绘制结果6.3 6.3 图像文件操作图像文件操作视视化化 2024/9/4182 Matlab Programing图像文件的读写与图像显示图像文件的读写与图像显示图像特征提取图像特征提取6.3.1 6.3.1 图像文件的读写与图像显示图像文件的读写与图像显示 2024/9/4183 Matlab

174、Programingimread指令指令读取图像文件(读取图像文件(BMP,GIF,PNG,JPEG,andTIFF)imshow指令指令显示图像显示图像imwrite指令指令保存图像保存图像例:读取图像文件例:读取图像文件img1=imread(mudan.jpg);%Loadimagedataimg2=imread(eight.tif);whosimg1img2 2024/9/4184 Matlab ProgramingNameSizeBytesClassimg1750x553x31244250uint8arrayimg2242x30874536uint8array显示图像:显示图像:im

175、show(img1);%Displayimage 2024/9/4185 Matlab Programing 2024/9/4186 Matlab Programing简单图像处理简单图像处理lighter=2*img1;subplot(1,2,1);imshow(img1);title(Original);%Displayimagesubplot(1,2,2);imshow(lighter);title(Lighter);%Displayimage 2024/9/4187 Matlab Programing图像处理前后的比较图像处理前后的比较 2024/9/4188 Matlab Progr

176、aming保存图像保存图像imwrite(lighter,mysaved.jpg)查看保存结果查看保存结果dirmysaved.*mysaved.jpg 2024/9/4189 Matlab Programing彩色图像转换为灰度图像彩色图像转换为灰度图像black=rgb2gray(img1);imshow(black)图像的缩放图像的缩放zoomon6.3.2 6.3.2 图像特征提取图像特征提取 2024/9/4190 Matlab Programingimag_edge1=edge(img2,sobel);%sobel边缘提取算法边缘提取算法subplot(121),imshow(im

177、ag_edge1)imag_edge2=edge(img2,canny);%canny边缘提取算法边缘提取算法subplot(122),imshow(imag_edge2)第7章Matlab程序执行程序执行7 Matlab7 Matlab程序执行程序执行 2024/9/4192 Matlab ProgramingMatlabMatlab命令的执行方式命令的执行方式MatlabMatlab程序控制程序控制MatlabMatlab函数文件函数文件程序调试程序调试MatlabMatlab矩阵分析与处理矩阵分析与处理7.1 Matlab7.1 Matlab命令的执行方式命令的执行方式 2024/9/4

178、193 Matlab Programing交互式命令执行方式(命令窗口)交互式命令执行方式(命令窗口)逐逐条条输输入入,逐逐条条执执行行,操操作作简简单单、直直观观,但但速速度度慢慢,执执行过程不能保留。行过程不能保留。M M文件的程序执行方式文件的程序执行方式将将命命令令编编成成程程序序存存储储在在一一个个文文件件中中(M文文件件),依依次次运运行行文件中的命令,可以重复进行。文件中的命令,可以重复进行。MatlabMatlab程程序序设设计计有有传传统统高高级级语语言言的的特特征征,又又有有自自己己独独特特的的特特点点,可可以以利利用用数数据据结结构构的的特特点点,使使程程序序结结构构简单

179、,编程效率高。简单,编程效率高。M M文件的分类文件的分类 2024/9/4194 Matlab Programing用用MatlabMatlab语言编写的程序,称为语言编写的程序,称为M M文件。文件。是由若干是由若干Matlab命令组合在一起构成的,它可命令组合在一起构成的,它可 以完成某些操作,也可以实现某种算法。以完成某些操作,也可以实现某种算法。 M M文件根据调用方式的不同分为两类:文件根据调用方式的不同分为两类:命令文件(命令文件(Script File) 函数文件(函数文件(Function File)它们的扩展名都是它们的扩展名都是.m.m命令文件和函数文件的区别命令文件和函

180、数文件的区别 2024/9/4195 Matlab Programing命命令令文文件件没没有有输输入入参参数数,也也不不返返回回输输出出参参数数;函函数数文文件可以带输入参数,也可以返回输出参数件可以带输入参数,也可以返回输出参数。命命令令文文件件对对工工作作空空间间中中的的变变量量进进行行操操作作,文文件件中中所所有有命命令令的的执执行行结结果果也也返返回回工工作作空空间间中中;函函数数文文件件中中定定义义的的变变量量为为局局部部变变量量,当当函函数数文文件件执执行行完完毕毕时时,这这些些变变量量也也被清除。被清除。命命令令文文件件可可以以直直接接运运行行;函函数数文文件件不不能能直直接接

181、运运行行,要要以以函数调用的方式来调用它。函数调用的方式来调用它。例例7.1-1 7.1-1 建立文件将变量建立文件将变量a a、b b的值互的值互换换。 2024/9/4196 Matlab Programing命令文件:命令文件:clear;clear;a = 1:10;a = 1:10;b = 11,12,13,14;15,16,17,18;b = 11,12,13,14;15,16,17,18;c = a; a = b; b = c;c = a; a = b; b = c;a ab b将文件保存为将文件保存为exchexch,并在命令窗口执行。,并在命令窗口执行。执行结果:执行结果:a

182、=1112131415161718b=12345678910函数文件函数文件 2024/9/4197 Matlab Programingfexch.mfexch.mfunction a,b = exch(a,b)function a,b = exch(a,b)c = a; a = b; b = c;c = a; a = b; b = c;然后在命令窗口调用该函数文件:然后在命令窗口调用该函数文件:clear;clear;x = 1:10;x = 1:10;y = 11,12,13,14;15,16,17,18;y = 11,12,13,14;15,16,17,18;x,y = fexch(x,

183、y)x,y = fexch(x,y)输出结果为:输出结果为:a=1112131415161718b=12345678910函函数数参参数数a a,b b,c c未未保保留留在在工工作作空空间间中中,x x,y y保保留留在在工工作作空空间间中。中。M M文件的建立与打开文件的建立与打开 2024/9/4198 Matlab ProgramingM M文文件件是是一一个个文文本本文文件件,可可以以用用任任何何编编辑辑程程序序来来建建立立和和编编辑,一般最常用的是使用辑,一般最常用的是使用MatlabMatlab提供的文本编辑器。提供的文本编辑器。该编辑器是一个集编辑和调试于一体的工作环境。该编辑

184、器是一个集编辑和调试于一体的工作环境。7.2 7.2 程序控制结构程序控制结构 2024/9/4199 Matlab Programing顺序结构顺序结构选择结构选择结构循环结构循环结构任何复杂的程序都可以由这任何复杂的程序都可以由这3 3种基本结构构成。种基本结构构成。7.2.1 7.2.1 顺序结构顺序结构 2024/9/4200 Matlab Programing顺顺序序结结构构是是指指按按照照程程序序中中语语句句的的排排列列顺顺序序依依次次执执行行,直到程序的最后一个语句。(最简单的一种程序)直到程序的最后一个语句。(最简单的一种程序)1 1、数据的输入、数据的输入从键盘输入数据,则可

185、以使用从键盘输入数据,则可以使用input函数来进行,调用格式为:函数来进行,调用格式为:A = input(提示信息,选项);(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入数据。其中提示信息为一个字符串,用于提示用户输入数据。例如:从键盘输入例如:从键盘输入A矩阵,可以采用下面的命令来完成矩阵,可以采用下面的命令来完成A = input(输入输入A矩阵矩阵);如如果果在在input函函数数调调用用时时采采用用s选选项项,则则允允许许用用户户输输入入一一个个字字符符串。串。 例:例:xm = input(Whats your name?,s);7.2.1 7.2.1 顺序结构顺

186、序结构 2024/9/4201 Matlab Programing2 2、数据的输出、数据的输出命令窗口输出函数主要有命令窗口输出函数主要有disp函数,其调用格式为:函数,其调用格式为:disp(输出项)输出项)其中输出项既可以为字符串,也可以为矩阵。例如:其中输出项既可以为字符串,也可以为矩阵。例如:A = Hello, Tom; disp(A)输出为:输出为:Hello, Tom又如:又如:A = 1,2,3;4,5,6;7,8,9; disp(A)输出为:输出为: 1 2 3 4 5 6 7 8 9 %disp函数输出格式更紧凑函数输出格式更紧凑7.2.1 7.2.1 顺序结构顺序结构

187、 2024/9/4202 Matlab Programing例例7 7.2-1 .2-1 求一元二次方程求一元二次方程 的根。的根。由于由于Matlab能进行复数运算,所以不需要判断方程的判别式,能进行复数运算,所以不需要判断方程的判别式,可直接根据求根公式求根。可直接根据求根公式求根。程序如下:程序如下:a=input(a=?);b=input(b=?);c=input(c=?);d=b*b-4*a*c;x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);disp(x1=,num2str(x(1),x2=,num2str(x(2);程序输出为:程序输出为:a=?4b=

188、?78c=?54x1=-0.7188,x2=-18.78127.2.1 7.2.1 顺序结构顺序结构 2024/9/4203 Matlab Programing3 3、程序的暂停、程序的暂停程序执行过程中暂停,可用程序执行过程中暂停,可用pause函数,其调用格式为:函数,其调用格式为:pause(延迟描述)(延迟描述)如如果果省省略略延延迟迟时时间间,直直接接使使用用pause,则则将将暂暂停停程程序序,直到用户按任一键后程序继续执行。直到用户按任一键后程序继续执行。若要强行中止程序的运行可按若要强行中止程序的运行可按Ctrl+C键。键。7.2.2 7.2.2 选择结构选择结构 2024/9

189、/4204 Matlab Programing选择结构是根据给定的条件成立或不成立,分别执行不选择结构是根据给定的条件成立或不成立,分别执行不同的语句。同的语句。Matlab用于实现选择结构的语句有用于实现选择结构的语句有if语句语句,switch语句语句和和try语句语句。1. if语句语句在在Matlab中,中,if语句有语句有3种格式种格式。(1)单分支单分支if语句语句语句格式:语句格式:if 条件条件 语句组语句组end例如:当例如:当x是整数矩阵时,输出是整数矩阵时,输出x的值的值if fix(x)=x disp(x);end7.2.2 7.2.2 选择结构选择结构 2024/9/

190、4205 Matlab Programing(2)双分支双分支if语句语句语句格式:语句格式:if 条件条件 语句组语句组 1else 语句组语句组 2end当当条条件件成成立立时时,执执行行语语句句组组1,否否则则执执行行语语句句组组2,然然后后再执行再执行if语句的后续语句。语句的后续语句。7.2.2 7.2.2 选择结构选择结构 2024/9/4206 Matlab Programing(3)多分支多分支if语句语句语句格式:语句格式:if if 条件条件1 1 语句组语句组 1 1elseif elseif 条件条件2 2 语句组语句组 2 2elseif elseif 条件条件m m

191、 语句组语句组 m melseelse 语句组语句组n nendend例例7.2-3 7.2-3 大小写字母的置换大小写字母的置换 2024/9/4207 Matlab Programing输输入入一一个个字字符符,若若为为大大写写字字母母,则则输输出出其其对对应应的的小小写写字字母母;若若为为小小写写字字母母,则则输输出出其其对对应应的的大大写写字字母母;若若为为数数字字字字符符则则输出其对应的数值,若为其他字符则原样输出。输出其对应的数值,若为其他字符则原样输出。程序如下:程序如下:c = input(c = input(请输入一个字符请输入一个字符,s s););if c =if c =

192、A A & c= & c=elseif c=a a & c= & c=elseif c=0 0 & c= & c=9 9 disp(abs(c)-abs( disp(abs(c)-abs(0 0););elseelse disp(c); disp(c);endendsetstr函数可以得到函数可以得到ASC码码7.2.2 7.2.2 选择结构选择结构 2024/9/4208 Matlab Programing2、switch语句语句switch语语句句根根据据表表达达式式的的取取值值不不同同,分分别别执执行行不不同同的的语语句句,其语句格式其语句格式:switch switch 表达式表达式c

193、ase case 表达式表达式1 1 语句组语句组1 1case case 表达式表达式2 2 语句组语句组2 2case case 表达式表达式m m 语句组语句组m motherwiseotherwise 语句组语句组 n nendendswitch子子句句后后面面的的表表达达式式应应为为一一个个标标量量或或一一个个字字符符串串;case子子句句后后面面的的表表达达式式不不仅仅可可以以为为一一个标量或一个字符串,还可以为一个元胞矩阵。个标量或一个字符串,还可以为一个元胞矩阵。例例7.2-4 7.2-4 2024/9/4209 Matlab Programing某商场对顾客所购买的商品实行打

194、折销售,标准如下:某商场对顾客所购买的商品实行打折销售,标准如下:price200 price200 没有折扣没有折扣200=price500 3%200=price500 3%折扣折扣500=price1000 500=price1000 5%5%折扣折扣1000=price2500 1000=price2500 8%8%折扣折扣2500=price5000 2500=price5000 10%10%折扣折扣5000=price 14%5000mtimesInner matrix dimensions mustagree.7.2.3 7.2.3 循环结构循环结构 2024/9/4213 Ma

195、tlab Programing循循环环是是指指按按照照给给定定的的条条件件,重重复复执执行行指指定定的的语语句句,Matlab提供了两种实现循环结构的语句:提供了两种实现循环结构的语句:for语句和语句和while语句。语句。1、for语句语句for语句的格式为:语句的格式为:for循环变量循环变量=表达式表达式1:表达式:表达式2:表达式:表达式3循环体语句循环体语句end其其中中表表达达式式1的的值值为为循循环环变变量量的的初初值值,表表达达式式2的的值值为为步步长长,表表达达式式3的的值值为为循循环环变变量量的的终终值值。步步长长为为1时时,表表达达式式2可可以以省略。省略。例例7.2-

196、67.2-6 2024/9/4214 Matlab Programing已知已知,当当n=100时,求时,求y的值。的值。程序如下:程序如下:y=0;n=100;fori=1:ny=y+1/i/i;endy输出结果为:输出结果为:y=1.6350利用利用Matlab的特点,常用向量运算来代的特点,常用向量运算来代替循环操作,程序可以如下替循环操作,程序可以如下:n=100;i=1:n;f=1./i.2;y=sum(f)7.2.3 7.2.3 循环结构循环结构 2024/9/4215 Matlab Programing2、while语句语句while语句的一般格式为:语句的一般格式为:while

197、条件条件循环体语句循环体语句end其执行过程为:其执行过程为:若若条条件件成成立立,则则执执行行循循环环体体语语句句,执执行行后后再再判判断断条条件件是是否成立,如果不成立则跳出循环。否成立,如果不成立则跳出循环。例例7.2-7 7.2-7 2024/9/4216 Matlab Programing从从键键盘盘输输入入若若干干个个数数,当当输输入入0时时结结束束输输入入,求求这这些些数数的的平均值和它们的和。平均值和它们的和。sum = 0;n = 0;x = input(Enter a number(end in 0):);while(x=0) sum = sum+x; n = n+1; x

198、 = input(Enter a number(end in 0):);endif(n0) sum mean = sum/nend输出结果为:输出结果为:Enteranumber(endin0):67Enteranumber(endin0):89Enteranumber(endin0):93Enteranumber(endin0):70Enteranumber(endin0):0sum=319mean=79.75007.2.3 7.2.3 循环结构循环结构 2024/9/4217 Matlab Programing3、break语句和语句和continur语句语句它们一般与它们一般与if语句配

199、合使用。语句配合使用。break语句用于终止循环的执行。语句用于终止循环的执行。当当在在循循环环体体内内执执行行到到该该语语句句时时,程程序序将将跳跳出出循循环环,继继续续执执行行循环语句的下一语句。循环语句的下一语句。continue语句控制跳过循环体中的某些语句。语句控制跳过循环体中的某些语句。当当在在循循环环体体内内执执行行到到该该语语句句时时,程程序序将将跳跳过过循循环环体体中中所所有有剩剩下的语句,继续下一次循环。下的语句,继续下一次循环。例例7.2-8 7.2-8 求求100,200100,200之间第一个能被之间第一个能被2121整整除的整数。除的整数。 2024/9/4218

200、Matlab Programing程序如下:程序如下:forn=100:200ifrem(n,21)=0;continueendbreakendn程序输出结果为:程序输出结果为:n=1057.3 7.3 函数文件函数文件 2024/9/4219 Matlab Programing函数文件简介函数文件简介函数调用函数调用函数参数的可调性函数参数的可调性全局变量与局部变量全局变量与局部变量7.3.1 7.3.1 函数文件函数文件 2024/9/4220 Matlab Programing 函函数数文文件件是是另另一一种种形形式式的的M文文件件,每每一一个个函函数数文文件件都都定定义义一一个函数。个

201、函数。Matlab提供的标准函数大部分是由函数文件定义的。提供的标准函数大部分是由函数文件定义的。函数文件的基本结构函数文件的基本结构函数文件由函数文件由function语句引导,其基本结构为:语句引导,其基本结构为:function输出形参表输出形参表=函数名(输入形参表)函数名(输入形参表)注释说明部分注释说明部分函数体语句函数体语句其其中中,以以function开开头头的的一一行行为为引引导导行行,表表示示该该M文文件件是是一一个个函函数文件。当输出形参多于一个时,应该用方括号括起来。数文件。当输出形参多于一个时,应该用方括号括起来。说明:说明: 2024/9/4221 Matlab P

202、rograming1.关于函数文件名关于函数文件名函数文件名通常由函数名再加上扩展名函数文件名通常由函数名再加上扩展名.m组成。组成。当函数文件名与函数名不同时,当函数文件名与函数名不同时,Matlab将忽略函数名而确将忽略函数名而确认文件名因此调用时使用函数文件名。认文件名因此调用时使用函数文件名。2.关于注释说明部分关于注释说明部分注释说明包括注释说明包括3部分:部分:紧随引导行之后以紧随引导行之后以%开头的第一注释行开头的第一注释行。这这一一行行一一般般包包括括大大写写的的函函数数文文件件名名和和函函数数功功能能简简要要描描述述,供供lookfor关键词查询和关键词查询和help在线帮助

203、时使用。在线帮助时使用。第一注释行及之后连续的注释行。第一注释行及之后连续的注释行。通通常常包包括括函函数数输输入入/输输出出参参数数的的含含义义及及调调用用格格式式说说明明等等信信息,构成全部在线帮助文本。息,构成全部在线帮助文本。说明:说明: 2024/9/4222 Matlab Programing与在线帮助文本相隔一空行的注释行。与在线帮助文本相隔一空行的注释行。包括函数文件编写和修改的信息,如作者和版本等。包括函数文件编写和修改的信息,如作者和版本等。3、关于、关于return语句语句如果在函数文件中插入了如果在函数文件中插入了return语句,则执行到该语句就结束函数语句,则执行到

204、该语句就结束函数的执行,流程转至调用该函数的位置。通常也不使用的执行,流程转至调用该函数的位置。通常也不使用return语句。语句。例例7.3-1编写函数文件,求半径为编写函数文件,求半径为r的圆的面积和周长。的圆的面积和周长。函数文件如下:函数文件如下:functions,p=fcircle(r)%FCIRCLEcalculatetheareaandperimeterofacircleofradiir%r圆半径圆半径%s圆面积圆面积%p圆周长圆周长%2006年年2月月30日编日编s=pi*r*r;p=2*pi*r;说明:说明: 2024/9/4223 Matlab Programing将以上

205、函数文件以文件名将以上函数文件以文件名fcircle.m保存,然后在命令窗口调用。保存,然后在命令窗口调用。s,p=fcircle(10)输出结果是:输出结果是:s=314.1593p=62.8319采用采用help命令或命令或lookfor命令可以显示出注释说明部分的内容。命令可以显示出注释说明部分的内容。helpfcircle屏幕显示屏幕显示FCIRCLEcalculatetheareaandperimeterofacircleofradiirr圆半径圆半径s圆面积圆面积p圆周长圆周长7.3.2 7.3.2 函数调用函数调用 2024/9/4224 Matlab Programing函数调

206、用的一般格式是:函数调用的一般格式是:输出实参表输出实参表=函数名函数名(输入实参表)输入实参表)注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同。注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同。例例7.3-2利用函数文件,实现直角坐标利用函数文件,实现直角坐标(x,y)与极坐标与极坐标(,)之间的转换。之间的转换。函数文件:函数文件:tran.m:functionrho,theta=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用调用tran.m的命令文件的命令文件main1.m:x=input(pleaseinputx=:

207、);y=input(pleaseinputy=:);rho,the=tran(x,y);rhothe函数的嵌套调用函数的嵌套调用 2024/9/4225 Matlab Programing在在Matlab中中,函函数数可可以以嵌嵌套套调调用用,即即一一个个函函数数可可以以调调用用别别的的函函数数。一一个函数调用自身称为函数的递归调用。个函数调用自身称为函数的递归调用。例例7.3-3利用函数的递归调用,求利用函数的递归调用,求n!。n!本身就是以递归的形式定义的:!本身就是以递归的形式定义的:显然,求显然,求n!需要求!需要求(n-1)!,这时可采用递归调用。,这时可采用递归调用。函数如下:函数

208、如下:functionf=factor(n)ifn后后输输入入变变量量名名,检检查查变变量量的的值值。可可以以分分析析判判断断程程序序的的正正确确性。性。选择选择Debug菜单中的菜单中的Continue命令,程序继续运行,在断点处又暂停,再检查命令,程序继续运行,在断点处又暂停,再检查变量的值,一直到发现问题为止。变量的值,一直到发现问题为止。切换工作空间,结束对程序的调试。打开编辑窗口中的切换工作空间,结束对程序的调试。打开编辑窗口中的Stack下拉列表框,从下拉列表框,从中选择中选择Base,即将工作空间切换到主工作空间。然后选择,即将工作空间切换到主工作空间。然后选择Debug菜单中的

209、菜单中的SetClearBreakpoint命令清楚已设置的断点,在选择命令清楚已设置的断点,在选择Continue命令,去除白色命令,去除白色箭头,完成调试。箭头,完成调试。7.5 7.5 Matlab矩阵分析与处理矩阵分析与处理 2024/9/4233 Matlab Programing7.5.1特殊矩阵特殊矩阵常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵等,这类特殊常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵等,这类特殊矩阵在应用中具有通用性。矩阵在应用中具有通用性。1、通用的特殊矩阵、通用的特殊矩阵常用的产生通用特殊矩阵的函数有:常用的产生通用特殊矩阵的函数有:zeros:产生全:产生全0矩阵

210、(零矩阵)。矩阵(零矩阵)。ones:产生全产生全1矩阵(幺矩阵)。矩阵(幺矩阵)。eye:产生单位矩阵。产生单位矩阵。rand:产生:产生01间均匀分布的随机矩阵。间均匀分布的随机矩阵。randn:产生均值为:产生均值为0,方差为,方差为1的标准正态分布随机矩阵。的标准正态分布随机矩阵。产生产生(0,1)区间均匀分布随机矩阵使用区间均匀分布随机矩阵使用rand函数函数产生均值为产生均值为0,方差为,方差为1的标准正态分布随机矩阵使用的标准正态分布随机矩阵使用randn函数函数例例7.5-1 7.5-1 建立随机矩阵:建立随机矩阵: 2024/9/4234 Matlab Programing在

211、区间在区间20,50内均匀分布的内均匀分布的5阶随机矩阵。阶随机矩阵。均值为均值为0.6,方差为,方差为0.1的的5阶正态分布随机矩阵。阶正态分布随机矩阵。命令如下:命令如下:x=20+(50-20)*rand(5)x=48.503942.862938.463032.171221.736726.934233.694043.758148.064130.586038.205320.555147.654447.507144.395034.579544.642242.146232.308120.295846.739033.341125.288046.809524.1667y=0.6+sqrt(0.1)

212、*randn(5)7.5.1 7.5.1 特殊矩阵特殊矩阵 2024/9/4235 Matlab Programing2、对角阵与三角阵、对角阵与三角阵只有对角线上有非零元素的矩阵称为对角矩阵,在研究矩阵时有时只有对角线上有非零元素的矩阵称为对角矩阵,在研究矩阵时有时需要将矩阵的对角线上的元素提取出来形成一个列向量,有时也需要用一个需要将矩阵的对角线上的元素提取出来形成一个列向量,有时也需要用一个向量构造一个对角阵。向量构造一个对角阵。(1)提取矩阵的对角线元素函数:)提取矩阵的对角线元素函数:diag例如:例如:A=1,2,3;4,5,6;D=diag(A)D=15diag函数还有一种形式:

213、函数还有一种形式:diag(A,k)提取第提取第k条对角线的元素。条对角线的元素。例如:例如:D1=diag(A,1)D=267.5.1 7.5.1 特殊矩阵特殊矩阵 2024/9/4236 Matlab Programing(2)构造对角矩阵构造对角矩阵如果如果V是一个是一个m个元素的向量,个元素的向量,diag(V)将产生一个将产生一个mm对角矩阵,对角矩阵,其主对角线元素即向量其主对角线元素即向量V为的元素。为的元素。例如:例如:diag(1,2,-1,4)ans=1000020000-100004例如:例如:diag(1:3,-1)ans=0000100002000030例例7.5-2

214、 7.5-2 2024/9/4237 Matlab Programing建立一个建立一个55矩阵矩阵A,然后将,然后将A的第一行元素乘以的第一行元素乘以1,第二行,第二行乘以乘以2,第五行乘以第五行乘以5。解:解:用一个对角矩阵左乘一个矩阵时,相当于用对角阵的第一个元素乘用一个对角矩阵左乘一个矩阵时,相当于用对角阵的第一个元素乘以该矩阵的第一行,依次类推。以该矩阵的第一行,依次类推。命令如下:命令如下:A=ones(5);D=diag(1:5);D*Aans=11111222223333344444555557.5.2 7.5.2 矩阵求逆与线性方程组求解矩阵求逆与线性方程组求解 2024/9

215、/4238 Matlab Programing1矩阵的逆矩阵的逆对于一个方阵对于一个方阵A,如果存在一个与其同阶的方阵,如果存在一个与其同阶的方阵B,使得:,使得:(I为单位矩阵)为单位矩阵)则称则称B为为A的逆矩阵,当然,的逆矩阵,当然,A也是也是B的逆矩阵。求方阵的逆矩阵。求方阵A的逆矩阵可调用函数的逆矩阵可调用函数inv(A)。例例7.5-3求方阵求方阵A的逆矩阵,且验证。的逆矩阵,且验证。A=1,-1,1;5,-4,3;2,1,1;B=inv(A);A*Bans=1.000000-0.00001.00000-0.000001.00007.5.2 7.5.2 矩阵求逆与线性方程组求解矩阵

216、求逆与线性方程组求解 2024/9/4239 Matlab Programing将包含将包含n个未知数,由个未知数,由n个方程构成的线性方程组表示为:个方程构成的线性方程组表示为:其矩阵表示形式为:其矩阵表示形式为:其中:其中:因此:因此:例例7.5-4 7.5-4 用求逆矩阵用求逆矩阵A的方法解线性方程的方法解线性方程组组 2024/9/4240 Matlab Programing命令如下:命令如下:A=1,2,3;1,4,9;1,8,27;b=5,-2,6;x=inv(A)*b%x=Abx=23.0000-14.50003.6667也可以运用左除运算符求解。也可以运用左除运算符求解。7.5

217、.3 7.5.3 矩阵行列式值矩阵行列式值 2024/9/4241 Matlab Programing把一个方程看做一个行列式,并按行列式的规则求值,称把一个方程看做一个行列式,并按行列式的规则求值,称为行列式的值。在为行列式的值。在Matlab中,使用函数中,使用函数det(A)得到。得到。例如:例如:A=rand(5)A=0.95010.76210.61540.40570.05790.23110.45650.79190.93550.35290.60680.01850.92180.91690.81320.48600.82140.73820.41030.00990.89130.44470.17

218、630.89360.1389B=det(A)B=-0.0071第8章Matlab数值计算数值计算8 8Matlab数值计算数值计算 2024/9/4243 Matlab Programing多项式多项式(polynomial)(polynomial) 函数的数值导数函数的数值导数数值积分数值积分元素排序元素排序数据插值数据插值曲线拟合曲线拟合8.1 8.1 多项式多项式(polynomial) 2024/9/4244 Matlab Programing多项式的多项式的MATLAB表达表达多项式由一个行向量表示多项式由一个行向量表示该向量元素是该多项式的系数该向量元素是该多项式的系数且按降幂次序

219、排列且按降幂次序排列如:多项式如:多项式x412x325x116由行向量:由行向量:p=1-12025116表示。表示。注意,必须包括具有零系数的项。注意,必须包括具有零系数的项。求解多项式的根?求解多项式的根?roots指令指令8.1 8.1 多项式多项式(polynomial) 2024/9/4245 Matlab Programing举例:求解多项式举例:求解多项式x412x325x116的根的根p=1-12025116p=1-12025116r=roots(p)r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672iMATLAB按惯例规定,多项式是行向

220、量,根是列向量按惯例规定,多项式是行向量,根是列向量8.1 8.1 多项式多项式(polynomial) 2024/9/4246 Matlab Programing已知多项式的根,求解多项式已知多项式的根,求解多项式?能!能!使用使用poly指令指令举例:由上例所得的根求其多项式举例:由上例所得的根求其多项式pp=poly(r)pp=1.0000-12.0000-0.000025.0000116.0000即:即:x412x325x1168.1 8.1 多项式多项式(polynomial) 2024/9/4247 Matlab Programing多项式的乘法多项式的乘法(conv指令指令)举例

221、:多项式举例:多项式a(x)=x32x23x4和和b(x)=x34x29x16的乘积。的乘积。a=1234;b=14916;c=conv(a,b)c=162050758464两个以上的多项式的乘法需要重复使用两个以上的多项式的乘法需要重复使用conv.8.1 8.1 多项式多项式(polynomial) 2024/9/4248 Matlab Programing多项式加法多项式加法:MATLAB没有提供进行加法运算的函数。没有提供进行加法运算的函数。如如果果两两个个多多项项式式向向量量大大小小相相同同,标标准准的的数数组组加加法法有有效效。把把多多项项式式a(x)与上面给出的与上面给出的b(x

222、)相加。相加。d=a+bd=261220结果结果:d(x)=2x36x212x20当当两两个个多多项项式式阶阶次次不不同同,低低阶阶的的多多项项式式必必须须用用首首零零填填补补,使使其其与高阶多项式有同样的阶次。与高阶多项式有同样的阶次。考虑上面多项式考虑上面多项式c和和d相加:相加:e=c+000de=162052819684结果结果:d(x)=x6+6x5+20x4+52x3+81x2+96x+848.1 8.1 多项式多项式(polynomial) 2024/9/4249 Matlab Programing问题:编写一个多项式加法运算的函数文件问题:编写一个多项式加法运算的函数文件明确需

223、求明确需求定定义义一一个个函函数数,需需要要有有两两个个输输入入参参数数(比比如如:p1、p2),一一个个输输出出参数参数p_out。p1、p2表示两个待计算的多项式表示两个待计算的多项式p_out表示两个多项式的求和结果表示两个多项式的求和结果函数的内部处理函数的内部处理如如p1、p2两参数大小相等,则直接相加两参数大小相等,则直接相加:p_out=p1+p2如如p1、p2两参数大小不等:两参数大小不等:Iflength(p1)length(p2)oP2前面要补前面要补0元素,使元素,使p1、p2两参数大小相等两参数大小相等否则否则oP1前面要补前面要补0元素,使元素,使p1、p2两参数大小

224、相等两参数大小相等8.1 8.1 多项式多项式(polynomial) 2024/9/4250 Matlab Programing函数文件的编写函数文件的编写functionp_out=poly_sum(p1,p2)%calculatethesumoftwopolynomialsiflength(p1)=length(p2)p_out=p1+p2;elseiflength(p1)length(p2)p2=zeros(1,length(p1)-length(p2),p2;p_out=p1+p2;elsep1=zeros(1,length(p2)-length(p1),p1;p_out=p1+p2

225、;end8.1 8.1 多项式多项式(polynomial) 2024/9/4251 Matlab Programing多项式的除法多项式的除法(deconv)举例说明:举例说明:c(x)=x66x520x450x375x284x64除以除以b(x)=x34x29x16c=162050758464;b=14916;q,r=deconv(c,b)q=1234r=00000008.1 8.1 多项式多项式(polynomial) 2024/9/4252 Matlab Programing多项式的导数多项式的导数(polyder)举例:求举例:求b(x)=x34x29x16的导数。的导数。b=149

226、16;d=polyder(b)d=389结果为:结果为:3x28x9另外两种形式为:另外两种形式为:p=polyder(P,Q):求:求P*Q的导函数的导函数p,q=polyder(P,Q):求:求P/Q的导函数,导数分子存入的导函数,导数分子存入p,分母存入分母存入q8.1 8.1 多项式多项式(polynomial) 2024/9/4253 Matlab Programing多项式的估值多项式的估值(polyval)举举例例:绘绘制制p(x)=x34x27x10在在-1,3段段上上的的曲曲线。线。x=linspace(-1,3);%choose100datapointsbetween-1a

227、nd3.p=14-7-10;v=polyval(p,x);plot(x,v);title(x3+4x2-7x-10);xlabel(x)8.1 8.1 多项式多项式(polynomial) 2024/9/4254 Matlab Programingp(x)=x34x27x10在在-1,3段上的曲线段上的曲线:8.2 8.2 函数的数值导数函数的数值导数 2024/9/4255 Matlab Programing导数定义为导数定义为:则则y=f(x)的导数可近似为:的导数可近似为:这里这里h0它是它是y的有限差分除以的有限差分除以x的有限差分。的有限差分。n MATLAB中中没没有有直直接接提提

228、供供数数值值导导数数的的函函数数,只只有有计计算算向向前前差差分的函数分的函数diff,其调用格式为:,其调用格式为:DX=diff(X)计算向量计算向量X的向前差分的向前差分DX=diff(X,n)计算向量计算向量X的的n阶向前差分阶向前差分例例8.2-18.2-1 2024/9/4256 Matlab Programing设设x由由0,2间均匀分布的间均匀分布的10个点组成,求个点组成,求sinx的的1-3阶差分。阶差分。命令如下:命令如下:X=linspace(0,2*pi,10);Y=sin(X);DY=diff(Y)D2Y=diff(Y,2)D3Y=diff(Y,3)DY=0.642

229、80.3420-0.1188-0.5240-0.6840-0.5240-0.11880.34200.6428D2Y=-0.3008-0.4608-0.4052-0.16000.16000.40520.46080.3008D3Y=-0.16000.05560.24520.32010.24520.0556-0.16008.2 8.2 函数的数值导数函数的数值导数 2024/9/4257 Matlab Programing例例8.2-2:设设在在-3,3区间内以区间内以0.01为步长求数值导数。并画出导函数图像。为步长求数值导数。并画出导函数图像。程序如下程序如下:f=inline(sqrt(x.3

230、+2*x.2-x+12)+(x+5).(1/6)+5*x+2);%内联函数内联函数x=-3:0.01:3;dx=diff(f(x,3.01)/0.01;%根据定义式求导数根据定义式求导数plot(x,dx)8.3 8.3 数值积分数值积分 2024/9/4258 Matlab Programing一元函数的数值积分一元函数的数值积分常用积分指令:常用积分指令:quad和和quadl。一般说来,一般说来,quadl比比quad更有效。更有效。具体调用格式如下:具体调用格式如下:q=quadl(fun,a,b)q=quadl(fun,a,b,tol)q=quadl(fun,a,b,tol,trac

231、e)q,fcnt=quadl(fun,a,b,.)输入量输入量fun为被积函数的句柄。为被积函数的句柄。输入量输入量a,b分别是积分的下限、和上限,都必须是确定的数值分别是积分的下限、和上限,都必须是确定的数值;前前3个输入参数是调用积分指令所必须的,其他可以缺省个输入参数是调用积分指令所必须的,其他可以缺省;输入量输入量tol是一个标量,控制绝对误差是一个标量,控制绝对误差;输入量输入量trace为非为非0值时,将随积分的进程逐点画出被积分函数值时,将随积分的进程逐点画出被积分函数;输出参数输出参数fcnt返回函数的执行次数。返回函数的执行次数。Note:quad的调用格式与的调用格式与qu

232、adl相同相同8.3 8.3 数值积分数值积分 2024/9/4259 Matlab Programing举例:求定积分举例:求定积分MATLAB指令指令quad和和quadl求积分求积分fun=inline(exp(-x.*x),x);%数数组组乘乘符符号号.*的的采采用用是必须的是必须的Isim=quad(fun,0,1),I8=quadl(fun,0,1)Isim=0.7468I8=0.74688.3 8.3 数值积分数值积分 2024/9/4260 Matlab Programing举例:求解定积分举例:求解定积分用用quad指令求积分指令求积分ff=inline(sqrt(log(1

233、./x),x);Isim=quad(ff,0,1)Warning:Dividebyzero.Ininlineevalat13Ininline.subsrefat25Inquadat63Isim=0.88628.4 8.4 元素排序元素排序 2024/9/4261 Matlab ProgramingMatlab中对向量中对向量X排序的函数是排序的函数是sort(X),函数返回一个对函数返回一个对X中的元素按升序排列的新向量。中的元素按升序排列的新向量。sort函数也可以对矩阵函数也可以对矩阵A的各列(或行)重新排序,其调的各列(或行)重新排序,其调用格式为:用格式为:Y,I=sort(A,dim

234、)dim=1,按列排序;按列排序;dim=2,按行排序,按行排序,Y是排序后的矩阵,是排序后的矩阵,I记录记录Y中的元素在中的元素在A中的位置。中的位置。例:对下列矩阵做各种排序例:对下列矩阵做各种排序。 2024/9/4262 Matlab Programing命令如下:命令如下:A=1,-8,5;4,12,6;13,7,-13;sort(A)ans=1-8-1347513126-sort(-A,2)%对对A的每行按降序排列的每行按降序排列ans=51-81264137-138.5 8.5 数据插值数据插值 2024/9/4263 Matlab Programing在工程测量和科学实验中,所

235、得到的数据通常是离散的,要得到在工程测量和科学实验中,所得到的数据通常是离散的,要得到这些离散点以外的其他点的数值,就需要根据已知的数据进行插值。这些离散点以外的其他点的数值,就需要根据已知的数据进行插值。插值函数一般由线性函数、多项式、样条函数或这些函数的分段函插值函数一般由线性函数、多项式、样条函数或这些函数的分段函数充当。数充当。一维数据插值:被插值函数有一个单变量。一维数据插值:被插值函数有一个单变量。采用的方法有:线性方法、最近方法、三次样条和三次插值。采用的方法有:线性方法、最近方法、三次样条和三次插值。在在Matlab中实现这些插值的函数是中实现这些插值的函数是interp1,其

236、调用格式如下:,其调用格式如下:Y1=interp1(X,Y,X1,method)函数根据函数根据X,Y的值,计算函数在的值,计算函数在X1处的值。处的值。X,Y是两个等长的已知向量,分别描述采样点和样本值;是两个等长的已知向量,分别描述采样点和样本值;X1是一个向量或标量,描述欲插值的点;是一个向量或标量,描述欲插值的点;Y1是一个与是一个与X1等长的插值结果。等长的插值结果。method是插值方法,允许的取值为:是插值方法,允许的取值为:8.5 8.5 数据插值数据插值(1)linear:线线性性插插值值。默默认认的的插插值值方方式式。它它是是把把插插值值点点靠靠近近的的两两个数据点用直线

237、连接,然后在直线上选取对应插值点的数据。个数据点用直线连接,然后在直线上选取对应插值点的数据。(2)nearest:最最近近点点插插值值。根根据据已已知知插插值值点点与与已已知知数数据据点点的的远远近近程度进行插值。插值点优先选择较近的数据点进行插值。程度进行插值。插值点优先选择较近的数据点进行插值。(3)cubic:3次次多多项项式式插插值值。根根据据已已知知数数据据求求出出一一个个3次次多多项项式式,然后根据该多项式进行插值。然后根据该多项式进行插值。(4)spline:3次次样样条条插插值值。指指在在每每个个分分段段内内构构造造一一个个3次次多多项项式式,使其满足插值条件外,在各节点处具

238、有光滑的条件。使其满足插值条件外,在各节点处具有光滑的条件。例:给出概率积分数据表如下,用不同的插值方法计算例:给出概率积分数据表如下,用不同的插值方法计算f(0.472)。x0.460.470.480.49f(x)0.48465550.49375420.50274980.5116683 2024/9/4264 Matlab Programing 2024/9/4265 Matlab Programing命令如下:命令如下:x=0.46:0.01:0.49;f=0.4846555,0.4937542,0.5027498,0.5116683;formatlonginterp1(x,f,0.472

239、)ans=0.49555332000000interp1(x,f,0.472,nearest)ans=0.49375420000000interp1(x,f,0.472,spline)ans=0.49556073600000interp1(x,f,0.472,cubic)ans=0.49556111971206其其中中,3次次样样条条和和3次次多多项项式式的的插插值值结结果果优优于于最最近近点点插插值值方方法法和和线线性性插插值值方方法法,但但插插值值方方法法的的好好坏坏依依赖赖于于被被插插值值函函数数,没没有有一种对所有函数都是最好的插值方法。一种对所有函数都是最好的插值方法。8.6 8.6

240、 曲线拟合曲线拟合 2024/9/4266 Matlab Programing数值插值要求逼近函数在采样点与被逼近函数相等,但由于测量数值插值要求逼近函数在采样点与被逼近函数相等,但由于测量误差,所获得的数据不一定准确,如果强求逼近显然不够合理。误差,所获得的数据不一定准确,如果强求逼近显然不够合理。曲线拟合不要求逼近函数通过各采样点,但要尽量的接近这些点,使曲线拟合不要求逼近函数通过各采样点,但要尽量的接近这些点,使误差在某种意义上达到最小。误差在某种意义上达到最小。曲线拟合的实现:曲线拟合的实现:在在matlab中,用中,用polyfit函数来求得最小二乘拟合多项式的系数,再用函数来求得最

241、小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出点上的函数近似值。函数按所得的多项式计算所给出点上的函数近似值。polyfit函数的调用格式为:函数的调用格式为:P,S=polyfit(X,Y,m)函数根据采样点函数根据采样点X和采样点函数值和采样点函数值Y,产生一个,产生一个m次多项式次多项式P及其在采样及其在采样点的误差向量点的误差向量S。其中。其中X、Y是两个等长的向量,是两个等长的向量,P是一个长度为是一个长度为m+1的的向量,向量,P的元素是多项式系数。的元素是多项式系数。polyval函数的功能是按多项式的系数计算函数的功能是按多项式的系数计算x点多项式的值。

242、点多项式的值。 2024/9/4267 Matlab Programing例例8.6-1:用一个三次多项式在区间:用一个三次多项式在区间0,2内逼近函数内逼近函数sinx。在给定区间内,均匀的选择在给定区间内,均匀的选择20个采样点,并计算采样点的函数值个采样点,并计算采样点的函数值然后利用然后利用3次多项式逼近。次多项式逼近。命令如下:命令如下:x=linspace(0,2*pi,20);y=sin(x);p=polyfit(x,y,3)y1=polyval(p,x)plot(x,y,:o,x,y1,-*)legend(sin(x),fit)第9章Matlab数字信号处理数字信号处理9 9M

243、atlab数字信号处理数字信号处理 2024/9/4243 Matlab Programing信号的产生信号的产生信号的运算信号的运算差分方程与差分方程与Z Z变换变换快速傅里叶变换快速傅里叶变换数字滤波器的设计数字滤波器的设计使用中的一些技巧使用中的一些技巧1、单位采样序列单位采样序列 x=zeros(1,n); x=zeros(1,n); x(k)=1; x(k)=1;9 9. .1 1 信号的产生信号的产生2、单位阶跃序列、单位阶跃序列 x=ones(1,n);3、正弦序列正弦序列n=0:N-1;x=sin(2*pi*f*n*Ts+fai);、复正弦序列复正弦序列 n=0:N-1; x=

244、exp(j*w*n);5、指数序列、指数序列n=1:N;x=a.n; %此处必须用此处必须用.而不能直接用而不能直接用6、随机序列随机序列 rand(m,n) %产生产生m行,行,n列的在列的在0,1上服上服%从均匀分布的随机数矩阵从均匀分布的随机数矩阵 randn(m,n) %产生均值为产生均值为0,方差为,方差为1的高斯随机的高斯随机%序列序列7、方波信号方波信号x=square(t,duty); 产生周期为产生周期为2*pi,幅值为正负幅值为正负1的方波信号,其的方波信号,其中中duty为正幅值部分占周期的百分数为正幅值部分占周期的百分数例:例:t=0:.0001:.0625;y=squ

245、are(2*pi*30*t);plot(t,y);8、三角波、三角波(锯齿波锯齿波) sawtooth(t,width);产生周期为产生周期为2*pi幅值为正负幅值为正负1的三角波,的三角波,width为宽度,取为宽度,取0-1之间的之间的数数例:例:t = 0:.0001:.0625; y = sawtooth(2*pi*30*t,1); plot(t,y);sawtooth函数类似于函数类似于sin函数,其中函数,其中width用于用于调整三角波峰值位置,调整三角波峰值位置,sawtooth(t,1)等价于等价于sawtooth(t)。9、sinc函数信号函数信号y=sinc(x);产生周

246、期为产生周期为2*pi,随随x的增加衰减震荡的偶函数,的增加衰减震荡的偶函数,在在n*pi处值为零处值为零二、信号的运算1、信号的延迟、信号的延迟给定信号给定信号x(n),若信号若信号y1(n)、y2(n)分别定义为:分别定义为:y1(n)=x(n-k)y2(n)=x(n+k)那么,那么,y1(n)是整个是整个x(n)在时间轴上右移在时间轴上右移k个时个时间单位所得到的新序列,间单位所得到的新序列,y2(n)是整个是整个x(n)在时在时间轴上左移间轴上左移k个时间单位所得到的结果。个时间单位所得到的结果。编程实现:编程实现:functiony,n=sig_shift(x,m,n0)m为输入为输

247、入x的下标;的下标;n0为延迟单位为延迟单位n=m+n0;y=x;2、相加、相乘、相加、相乘x(n)=x1(n)+x2(n);x(n)=x1(n)*x2(n)当两个向量相乘时,若用当两个向量相乘时,若用.*表示数组相乘,表示数组相乘,此时,此时,x1中对应元素与中对应元素与x2中对应元素相乘,所中对应元素相乘,所得结果作为结果数组得结果作为结果数组(矩阵矩阵),要求两原始数组,要求两原始数组中元素个数相同,如果采用中元素个数相同,如果采用*是进行向量是进行向量(矩阵矩阵)的乘法,相加时要求两原始数组中元素个数相的乘法,相加时要求两原始数组中元素个数相同。同。3、信号的能量及功率、信号的能量及功

248、率信号的能量有如下表示形式:信号的能量有如下表示形式:E=sum(abs(x).2);信号的功率有如下表示形式:信号的功率有如下表示形式:E=sum(abs(x).2)/length(x); 4、信号的折叠、信号的折叠信号折叠就是对信号折叠就是对x(n)每一项对每一项对n=0的纵坐标的纵坐标进行折叠进行折叠,即即:y(n)=x(-n)y(n)与与x(n)关于关于n=0对称对称;y=fliplr(x);n=-fliplr(n);在实际应用中,在实际应用中,fliplr的主要作用是把序列倒的主要作用是把序列倒转转,例:例:x=1,2,3;4,5,6;y=fliplr(x);%y=3,2,1;6,5

249、,46、信号的卷积、信号的卷积Matlab提供了内部函数提供了内部函数conv来实现两个有限长来实现两个有限长序列的卷积,该函数假定两个序列的是从序列的卷积,该函数假定两个序列的是从n=0开始的开始的。例:例:x=3,11,7,0,-1,4,2;h=2,3,0,-5,2,1;y=conv(x,h);%y=6,31,47,6,-51,-5,41,18,-22,-3,8,2(共共n+m-1项项)6、信号的相关、信号的相关(1)两个序列两个序列x(n)和和y(n)的相关可以看作是的相关可以看作是x(n)与与y(-n)的卷积。同理,信号的卷积。同理,信号x(n)的自相关即为的自相关即为x(n)与与x(

250、-n)的卷积。的卷积。(2)xcorr(x)或或xcorr(x,y)例例:t=1:5;y=xcorr(t);%y=5,14,6,40,55,40,26,14,5差分方程与Z变换1、离散系统的时域表示、离散系统的时域表示由此可见,系统地输出,就是输入与单位抽样响应卷由此可见,系统地输出,就是输入与单位抽样响应卷积得到的。积得到的。例:如下离散系统:例:如下离散系统:系统的单位抽样信号的响应可以通过系统的单位抽样信号的响应可以通过filter函数和函数和impz函数实现。函数实现。(1)filter函数函数因为一个离散系统因为一个离散系统可以看作是一个滤波器,该函数可以看作是一个滤波器,该函数就是

251、利用滤波器来实现的。就是利用滤波器来实现的。它有如下两种形式:它有如下两种形式:y=filter(b,a,x)由上图可以知道:由上图可以知道:b=0.2,0.1a=1,-0.4,-0.5则系统的单位抽样响应为:则系统的单位抽样响应为:h=filter(b,a,x)(2)impz函数实现函数实现Impz(b,a)可以直接得到单位抽样响应,并画出可以直接得到单位抽样响应,并画出响应图形响应图形程序实现:程序实现:clc;clear;x=1zeros(1,63);%产生单位抽样信号产生单位抽样信号b=0.20.1;%a=10.40.5;h=filter(b,a,x);h1=impz(b,a);fig

252、ure;stem(h);title(Filterfunction);figure;stem(h1)title(Impzfunction)2、离散系统的频率响应、离散系统的频率响应Matlab中的中的freqz函数用来计算由函数用来计算由a,b构成系统构成系统的频率响应。的频率响应。h,f=freqz(b,a,n,fs)例:例:clc;clear;fs=1000;b=0.20.1;a=10.40.5;h,f=freqz(b,a,256,fs);mag=abs(h);ph=angle(h);ph=ph*180/pi;figure;plot(f,mag);title(f-m);figure;plot

253、(f,ph);title(f-p);快速傅里叶变换在在matlab中实现中实现fft很简单,只需要通过命令很简单,只需要通过命令fft来实现,这里需要注意的是采样频率不要太高,来实现,这里需要注意的是采样频率不要太高,否则频谱的信息被掩盖。另外,计算所得的序否则频谱的信息被掩盖。另外,计算所得的序列中第列中第k点所对应的实际频率为,点所对应的实际频率为,f=k*fs/N,其中其中N为进行傅利叶变换的点数,为进行傅利叶变换的点数,fs为采样频率,一为采样频率,一般取信号最大频率的般取信号最大频率的3-5倍。倍。例:例:clc;clear;loadleleccum;x=leleccum;N=len

254、gth(x);y=angle(fft(x);fs=100;f=(1:N)*fs/N;plot(f,y);数字滤波器的设计1、IIR数字滤波器的设计数字滤波器的设计MATMB中设汁中设汁IIR数字滤波器的步骤总结如下:数字滤波器的步骤总结如下: (1)巴特沃思数字滤波器的设计巴特沃思数字滤波器的设计b,a=butter(n,wn);b,a=butter(n,wn,ftype);它得到的是一个阶数为它得到的是一个阶数为n,截止频率为截止频率为wn的低通滤波器。其中的低通滤波器。其中wn是指滤波器的半功率点,是指滤波器的半功率点,取值范围在取值范围在0-1之间,取之间,取1时,为采样频率的一时,为采

255、样频率的一半,如果半,如果wn=w1w2为两个元素的向量,函数为两个元素的向量,函数返回的是阶数为返回的是阶数为2*n的带通滤波器,通带范围的带通滤波器,通带范围为w1-w2,其中ftype代表滤波器的形式,为high时,为高通滤波器,得到阶数为n,截止频率为wn的,高通滤波器。为stop时,得到的是阶数为2*n,阻带为w1-w2的带阻滤波器。 例:采样频率为1000Hz的采样信号,设计一个10阶带通butter滤波器,通带范围为100-200Hz,并画出冲击响应曲线。 n=5;wn=100200/500;b,a=butter(n,wn,bandpass);y,t=impz(b,a,101);

256、stem(t,y);例例:信号采样频率为信号采样频率为1000Hz,设计一个阶数为设计一个阶数为9,截止截止频率为频率为300Hz的高通巴特沃思滤波器。的高通巴特沃思滤波器。b,a=butter(9,300/500,high);Freqz(b,a,128,1000);滤波器的幅频特性与相频特性如下:滤波器的幅频特性与相频特性如下:(2)切比雪夫法设计滤波器切比雪夫法设计滤波器切比雪夫法设计滤波器可以分为切比雪夫切比雪夫法设计滤波器可以分为切比雪夫1法法和切比雪夫和切比雪夫2法两种,这里我们只介绍切比雪夫法两种,这里我们只介绍切比雪夫1法。法。其语法结构为:其语法结构为:b,a=cheby1(n

257、,Rp,wn);b,a=cheby1(n,Rp,wn,ftype);设计的是一个阶数为设计的是一个阶数为n,截止频率为截止频率为wn,通带通带波纹衰减为波纹衰减为Rp的低通滤波器。返回值的低通滤波器。返回值a,b分别分别是阶数为是阶数为n+1的向量,表示滤波器系统函数的的向量,表示滤波器系统函数的分母和分子的多项式系数,滤波器的传递函数分母和分子的多项式系数,滤波器的传递函数可以表示为:可以表示为:函数的截止频率函数的截止频率wn是指通带的边缘,在那滤波是指通带的边缘,在那滤波器的幅度响应为器的幅度响应为-RpdB,wn的取值范围为的取值范围为0-1,其中,其中1表示采样频率的一半。越小的通带

258、波纹,表示采样频率的一半。越小的通带波纹,会导致越大的过渡带宽。如果会导致越大的过渡带宽。如果wn=w1w2为两为两个元素的向量,则函数返回的是阶数为个元素的向量,则函数返回的是阶数为2*n的带的带通滤波器系统函数有理多项式的系数,滤波器通滤波器系统函数有理多项式的系数,滤波器的通带范围为的通带范围为w1-w2。用用b,a=cheby1(n,Rp,wn,ftype)设计搞设计搞通和带阻滤波器,通和带阻滤波器,ftype确定滤波器的形式,为确定滤波器的形式,为high时,为阶数为时,为阶数为n,截至频率为截至频率为wn的高通滤的高通滤波器;为波器;为stop时,阶数为时,阶数为2*n,阻带为阻带

259、为w1-w2的的带阻滤波器。带阻滤波器。例例:信号采样频率为信号采样频率为1000Hz,设计一个阶数为设计一个阶数为9,截止截止频率为频率为300Hz的低通切比雪夫滤波器,其中滤的低通切比雪夫滤波器,其中滤波器在通带的波纹为波器在通带的波纹为0.5dB。b,a=cheby1(9,0.5,300/500);Freqz(b,a,512,1000);滤波器的幅频特性与相频特性如下:滤波器的幅频特性与相频特性如下:例:采样频率为例:采样频率为1000Hz的采样信号,设计一个的采样信号,设计一个10阶带通切比雪夫滤波器,通带范围为阶带通切比雪夫滤波器,通带范围为100-200Hz,滤波器在通带的波纹为滤

260、波器在通带的波纹为0.5dB,并画出并画出冲激响应曲线。冲激响应曲线。n=10;Rp=0.5;wn=100,200/500;b,a=cheby1(n,Rp,wn);y,t=impz(b,a,101);stem(t,y);冲激响应曲线如下:冲激响应曲线如下:并画出冲激响应曲线。 n=10; Rp=0.5; wn=100,200/500; b,a=cheby1(n,Rp,wn); y,t=impz(b,a,101); stem(t,y); 冲激响应曲线如下:窗函数窗函数 布莱克曼窗,海明窗,汉宁窗,以及矩形窗都布莱克曼窗,海明窗,汉宁窗,以及矩形窗都是广义余弦窗的特殊情形。这些窗可以看作是是广义余

261、弦窗的特殊情形。这些窗可以看作是频率为频率为0,2pi/(N-1)和和4pi/(N-1)的余弦序列的线的余弦序列的线性组合。性组合。N代表创的长度。此类窗的生成方法代表创的长度。此类窗的生成方法如下:如下:Ind=(0:n-1)*2*pi/(n-1)W=A-B*cos(ind)+C*cos(2*ind)海明窗和汉宁窗是两项余弦窗,对海明窗:海明窗和汉宁窗是两项余弦窗,对海明窗:A=0.54,B=0.46,C=0对汉宁窗:对汉宁窗:A=0.5,B=0.5,C=0布莱克曼窗是三项余弦窗:布莱克曼窗是三项余弦窗:A=0.42,B=0.5,C=0.08三种窗可通过以下三个函数实现:三种窗可通过以下三个

262、函数实现:hamming,hanning,blackman使用中的一些技巧1、数据的装入与存储数据的装入与存储save;load;2、子函数的编写子函数的编写3、数据的保存与读取、数据的保存与读取4、路径设置、路径设置5、已有程序参考已有程序参考界面制作参考书目:精通matlab综合辅导与指南菜单控制框函数回调的考虑指针和鼠标按钮事件中断回调的规则举例对话框和请求程序菜单主要包括建立菜单,建立子菜单,去除默认菜单,设置菜单回调函数clear;clc;hf=figure; %建立窗口并返回句柄hfset(hf,menubar,none)%去除系统菜单hm=uimenu(hf,label,我的菜单

263、);hm_exgrid=uimenu(hm,label,调用内联函数,callback,alnn)%建立子菜单调用回调函数,并调用函数alnn(自己定义)functionalnn()t=linspace(0,1,1024);f=1;x=sin(2*pi*f*t);y=cos(2*pi*f*t)z=x*y;surf(t,t,z);录制语音信号的程序fs=11025;%采样频率采样频率duration=2;%录音时间录音时间fprintf(按任意按任意键开键开始始%g秒秒录录音:音:,duration);pausefprintf(录录音中音中.);y=wavrecord(duration*fs,f

264、s);%duration*fs是是录录音音资资料料点数点数fprintf(录录音音结结束束n);fprintf(按任意按任意键后开键后开始播放:始播放:);pausewavplay(y,fs);设计实例11、建立一个、建立一个*.m文件,实现信号发生功文件,实现信号发生功能能(50Hz正弦正弦)2、对该信号进行、对该信号进行FFT3、将上述程序转化到子函数中、将上述程序转化到子函数中4、利用按钮调用这两个功能函数,并绘制图、利用按钮调用这两个功能函数,并绘制图形输出形输出%signal1.m%=%产生一个频率为产生一个频率为50Hz的正弦信号,取样时间的正弦信号,取样时间t=00.2s,取样频

265、率取样频率500Hzclear;clc;t=linspace(0,0.2,100);f=50%fs=320x=sin(2*pi*f*t);plot(t,x);sinwave=x;savesinwave;%=%fftrans.m%=%提取刚才产生的提取刚才产生的sinwave信号,对其进行信号,对其进行fft,已知信号采样频率已知信号采样频率500Hzclear;clc;loadsinwavex=sinwave;%fs=320N=length(x);y=abs(fft(x);f=(1:N)*fs/Nplot(f,y);%usefunction.m%=%编制子函数,产生制定频率,幅度,相位的编制子

266、函数,产生制定频率,幅度,相位的正弦信号,取样时间正弦信号,取样时间t=00.2s,取样频率为信号取样频率为信号频率的频率的10倍倍functiony=usefunction1(A,f,fai)fs=10*f;t=linspace(0,0.2,0.2*fs);x=A*sin(2*pi*f*t+fai);plot(t,x);sinwave_usefunction=x;savesinwave_usefunction;savefs;%fft_usefunction.m%=functiony=usefunction2(x,fs)N=length(x);y=abs(fft(x);f=(1:N)*fs/N

267、plot(f,y);fft_usefunction=y;savefft_usefunction;%sin_menu.m%=%建立一个菜单,其有两个子菜单,分别调用上述两建立一个菜单,其有两个子菜单,分别调用上述两个程序个程序clear;clc;hf=figure;%建立窗口并返回句柄建立窗口并返回句柄hfset(hf,menubar,none)%去除系统菜单去除系统菜单hm=uimenu(hf,label,我的菜单我的菜单);hm_exgrid=uimenu(hm,label,正弦信号正弦信号,callback,usefunction1(2,50,0)loadsinwave_usefunctionx=sinwave_usefunctionloadfshm_exgrid=uimenu(hm,label,fft,callback,y=usefunction2(x,fs)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号