《计算机仿真技术课件4MATLAB基础.ppt》由会员分享,可在线阅读,更多相关《计算机仿真技术课件4MATLAB基础.ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Matlab 及其应用 1Matlab 及其应用Matlab 及其应用 21 课程内容简介o MATLAB 基础o 基于matlab 的数值分析o 绘制图形o 符号计算o 动态系统仿真:Simulink 基础o 与其它程序交互:转换为c、编译、实时控制o 最优化方法Matlab 及其应用 32 Matlab 的学习方法o 必须做大量的练习,熟悉其中的函数o 联系和自己的课题相关,深刻的体会o 多看帮助文件,又一本好的参考书o 会提问题,寻求大家的帮助o 记住:Matlab 可以做很多事情Matlab 及其应用 4学会Matlab 将改变你的一生网络对你的改变将远远的超过一台独立的计算机Matl
2、ab 及其应用 5MATLAB 基础及其应用第一讲 MATLAB基础 概述 MATLAB 基本使用 MATLAB 的基本矩阵分析 矩阵操作 流程控制Matlab 及其应用 6一、概述o MATLAB 是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。Matlab 及其应用 71.1 MATLAB 的出现o 70 年代中期,Cleve Moler 和他的同事开发了LINPACK 和EISPACK 的Fortran 子程序库o 70 年代末期,Cleve Moler 在新墨西哥大学给学生开线性代数,为学生编写了接口程序,这程序
3、取名为MATLAB,即MATrix LABoratoryo 1983 年春天,工程师John Little 与Moler、Steve Bangert 一起开发了第二代专业版MATLABo 1984 年,MathWorks 公司成立,MATLAB 正是推向市场。Matlab 及其应用 81.2 学习Matlab 的基本原因o 不希望学生在编程上化太多时间,课程目的不是学习编程o 社会化的运行带来的好处:合理利用可以节约大量的时间o 为什么相同的时间别人比自己做出了更多的事情:硕士论文调查结果o 面向对象的思想带来巨大的好处o 紧密结合科学的前沿o From BBS:博士论文=Matlab+wor
4、d Matlab 及其应用 91.3 Matlab 的版本演化o Matlab 1.0o Pc matlab-matlab 386o Matlab3.5+simulinko Matlab 4.0:simlink 内嵌o Matlab 5.0:全面的面向对象o Matlab 5.15.3o Matlab 6.0o Matlab 6.5:购并了MATRIXxo Matlab 7.0:2004Matlab 及其应用 101.4 MATLAB 特点o 高度适应性、开放性:MATLAB 的工具箱可以任意增减,任何人可以自己生成MATLAB 工具箱o 可扩充性:MATLAB 的函数大多为ASCII 文件,
5、可以直接编辑、修改o 基于矩阵运算的工作平台。多版本:windows/unix/dos/Macintosho 极多的工具箱。Matlab 及其应用 111.5 Matlab 能做什么o 基本的数据处理o 优化和解方程o 动态过程仿真:实时的和非实时的o 数据来源:Excel、数据库、A/D 等等o 嵌入式的控制:Pc/104 和DSPo 神经元网络、小波分析、GA 等等o 虚拟现实仿真Matlab 及其应用 12Matlab 产品家族o Matlab 扩展支持在matlab 中队系统的实施和开发。o 工具箱:专用的函数库,解决特定领域的问题。o Simulink 非线性系统仿真o Blocks
6、et 是专门为simulink 建立的模块。Matlab 及其应用 13Matlab 是所有系统工具的基础Matlab 及其应用 14设计自动化工具Matlab 及其应用 15一般用途工具Matlab 及其应用 16信号和图像处理Matlab 及其应用 17控制系统设计和分析Matlab 及其应用 181.6 网络资源1.USENET 新闻组n MATLAB 的新闻组是comp.soft-sys.MATLAB。浏览器指向n 2.网络上的工具箱n Matlab 及其应用 191.6 网络资源(2)3.BBSn 哈尔滨工业大学n 上海交通大学bbs:n 清华大学bbs mathtools4.www
7、 服务n Matlab 大观园:Matlab 及其应用 201.7 与MATLAB 相似的软件o Mathmatica 数学计算功能。复杂符号计算,主要在理论界o Mathcad 数学文字软件。直接写出报告o Maple 符号计算功能强大o SciLab 免费的matlab 科隆体o 仿真软件:MATRIXx、VisSim 等等Matlab 及其应用 21二、MATLAB 基础使用2.1 MATLAB 安装启动 o Matlab 的安装n 定制安装n 关于Java 的问题:XP 系统必须安装虚拟机n 安装pdf 文件o Matlab 启动n 自动批处理 startup.m matlabrc.m
8、Matlab 及其应用 222.2 Matlab 菜单的含义o 多窗口界面o Matlab 的设置n 快速启动n 版本控制n 图形粘贴设置o 字体的改变Matlab 及其应用 232.3 帮助的使用 o help 命令:已知命令不知道用法o lookfor 命令:知道命令的关键词o Matlab Help:命令查找,索引,说明书o Demoo 有效的利用帮助Matlab 及其应用 242.3.1 怎样获得详尽的帮助信息1.首先是MATLAB 窗口中的help 命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。Help 命令简单易用,但是它要求准确给出关键字,如果记忆不准,就
9、很难找到。这时就应该用第二种方案。2.Help Desk:这是MATLAB 的HTML 格式的帮助文档,有着很好的组织。可以在命令行键入helpdesk,进入“Matlab Help Desk”。Help Desk 的搜索可以使用不完全关键字,这样即使遇到记忆模糊的情况也可以很快查到。3.前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就是电子版的使用手册。MATLAB 里包含了大量关于MATLAB 安装、使用、编程以及各种工具箱等的电子版手册,全部为PDF 格式,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。Matlab 及其应用 252.4 Mat
10、lab 变量o 基本运算 n 变量n 逗号、分号的意义n 行内编辑、注释、运算规则o 变量要求n 变量区分字母的大小写n 名字不能超过19 个字符,第19 个字符后的字符被忽略n 变量必须以字母开头,之后可以是任意字母、数字或者下滑线n 变量中不能含有标点符号。Matlab 及其应用 262.4.1 特殊变量Matlab 及其应用 272.4.2 复数o 不需要特殊的处理。复数可以表示为:a=10-9i o 复数运算不需要特殊处理,可以直接进行Matlab 及其应用 282.4.3 显示格式o MATLAB 中所有的量为双字长浮点数,显示按下面显示规则:1.在缺省情况下,当结果为整数,作为整数
11、显示;当结果为实数,以小数后4 位的精度近似显示。2.如果结果中的有效数字超出了这一范围,以科学计数法显示结果。3.format 命令改变显示格式,常用的的格式有o long(16 位)bank(2 个十进制位)hex(十六进制)o short(缺省)short e(5 位加指数)+(符号)o long e(16 位加指数)rat(有理数近似)Matlab 及其应用 292.5 文件管理功能o who(whos)o cd(chdir,pwd)o dir(ls)o typeo whato whicho clco edito!o echoo loado clear/packo saveo diar
12、yMatlab 及其应用 30三、MATLAB 的基本矩阵运算3.1 简单矩阵输入o 命令行简单键盘输入n 用于很少数据输入n 矩阵的方向:,;NaN Info 文件形式输入n 可以用来读入试验数据n 大量的数据输入o load 数据n 文本文件:全部是数据,不含有数据n mat 文件:matlab 自有的数据格式Matlab 及其应用 312 语句生成矩阵o 线性等间距格式矩阵,使用from:step:too linspace 命令n a=linspace(1,10,5);o logspace 命令n b=logspace(0,2,10)o 矩阵连接n c=a b;o zeros ones
13、eye randn Matlab 及其应用 323.引入特殊的文件格式o 引入输入:import wizardo 可以引入的文件格式:o 文本文件:.txt.dato 图片文件:.gif.bmp.jpg.avio 声音:.wav.auo 电子表格:.csv.xls.wk1Matlab 及其应用 33直接读入特殊格式文件:文本类型Matlab 及其应用 34直接读入特殊格式文件:二进格式Matlab 及其应用 353.2 矩阵运算o 矩阵的转置n 用符号 来表示和实现n 非共轭转置.o 矩阵的四则运算n+-*/n 点乘:.*右除:./左除:.o 矩阵的乘方n 矩阵乘方n.元素对元素的乘方Matl
14、ab 及其应用 363.3 矩阵的超越函数o MATLAB 中exp、sprt、sin、cos 等命令可以直接使用在矩阵上,这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每个元素进行运算。MATLAB 中也提供了基本的三角函数。o 注意其中的取整函数名 含义abs 绝对值或者复数模sqrt 平方根r eal 实部imag 虚部conj 复数共轭r ound 4舍5入到整数fix 舍入到最接近0的整数floor 舍入到最接近-oo 的整数ceil 舍入到最接近oo的整数Matlab 及其应用 373.3 矩阵的超越函数函数名 含义sign 符号函数r em 留数sin 正弦cos 余弦tan
15、 正切asin 反正弦acos 反余弦atan 反正切atan2 第四象限反正切函数名 含义sinh 双曲正弦cosh 双曲余弦tanh 双曲正切exp 自然指数log 自然对数log10 以10为底的对数bessel 贝赛尔函数gamma 伽吗函数rat 有理逼近Matlab 及其应用 383.4 关系和逻辑运算1 关系操作符o MATLAB 常用的关系操作符有:(小于)、(大于)、=(大于或等于)、=(等于)、!=(不等于)。o MATLAB 的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。o a=1:9;o b=a4o b=o
16、0 0 0 0 1 1 1 1 1o c=a(a4)o c=o 5 6 7 8 9Matlab 及其应用 392 逻辑操作符o 逻辑操作符定义了一种与或非的关系表达式。MATLAB 的逻辑操作符有&(与)、|(或)、(非)。例如:o c=(a4)o c=o 1 1 1 1 0 0 0 0 0o c=(a4)&(a7)o c=o 0 0 0 0 1 1 0 0 0Matlab 及其应用 40四、矩阵操作4.1 矩阵下标o MATLAB 通过确认下标,可以对矩阵进行插入子块、提取子块和重排子块的操作。o 为了提取矩阵a 的第n 行、第m 列的元素值,使用a(n,m)可以得到。同样,将矩阵a 的第n
17、 行、第m 列的元素值赋为r,使用a(n,m)=r 这样的命令。需要注意的是,如果在提取矩阵值时,行或列的值大于矩阵的大小,则出错;而在矩阵赋值时,如果行或者列超出矩阵的大小,则MATLAB 自动扩充矩阵的规模,使得可以赋值,扩充部分以零填充。Matlab 及其应用 414.1 矩阵下标o 利用矩阵下标,MATLAB 还提供了子矩阵功能。同样是上面的a(n,m),如果n 和m 是向量,而不是标量,则将获得指定矩阵的子块.o 同样,矩阵的子块还可以被赋值。如果在取子块时,n 或m 是“:”,则返回指定的所有行或列。o 如果在矩阵子块赋值为空矩阵(用 表示),则相当于消除相应的矩阵子块.o 矩阵的
18、序号编址:按列计数。Matlab 及其应用 424.2 矩阵大小o 在MATLAB 命令行中,使用whos 命令可以察看到所有变量的大小。o 为了获得矩阵或者向量的大小,MATLAB 还提供了两个有用的函数size 和length。o size 按照下面的形式使用:m,n=size(a,x)。一般的,函数的输入参量x 不是用,这是当只有一个输出变量时,size 返回一个行向量,第一个数为行数,第二个数为列数;如果有两个输出变量,第一个返回量为行数,第二个返回数为列数。当使用x 时,x=1 返回行数,x=2 返回列数,这时只有一个返回值。o length 返回行数或者列数的最大值,即length
19、(a)=max(size(a)。Matlab 及其应用 434.3 矩阵操作函数o MATLAB 提供了一组执行矩阵操作的函数,例如flipud(a)使得矩阵上下翻转,fliplr(a)使得矩阵左右翻转,rot90(a)使得矩阵逆时针翻转900等等。Matlab 及其应用 444.4 逻辑矩阵o 逻辑矩阵是大小和对应矩阵相同,而元素为0 或者1 的数组。逻辑数组一般由关系算子创建。可以使用逻辑矩阵来取得矩阵的部分元素值,o 得到矩阵中所有大于3 的值。使用逻辑矩阵也可以对矩阵的部分赋值。Matlab 及其应用 454.5 矩阵查找和排序o 子矩阵的查找使用find 命令完成,它返回关系表达式为
20、真的下标。例如:o a=10:20;o find(a15)o ans=o 7 8 9 10 11o 矩阵的排序使用sort 函数,它将矩阵按照升序排列。Matlab 及其应用 465 矩阵的查找和排序o 子矩阵的查找使用find 命令完成,它返回关系表达式为真的下标。o 矩阵的排序使用sort 函数,它将矩阵按照升序排列。o 应用:n 去噪声:a(find(astd(a)*3)n 嵌入数据n 替换Matlab 及其应用 476 字符串处理o MATLAB 真正强有力的地方在于它的数值处理能力。然而,经常希望操作文本,例如把标号和标题放在图上。在MATLAB 里,文本当作特征字符串或简单地当作字
21、符串。o 字符串内的单引号是由两个连续的单引号来表示。o 字符串连接可以直接从数组连接中得到。Matlab 及其应用 48字符串函数o eval(string)作为一个MATLAB 命令求字符串的值o eval(try,catch)o blanks(n)返回一个n 个零或空格的字符串o deblank 去掉字符串中后拖的空格o feval 求由字符串给定的函数值o findstr 从一个字符串内找出字符串o isletter 字母存在时返回真值o isspace 空格字符存在时返回真值o isstr 输入是一个字符串,返回真值o lasterr 返回上一个所产生MATLAB 错误的字符串o s
22、trcmp 字符串相同,返回真值o strrep 用一个字符串替换另一个字符串o strtok 在一个字符串里找出第一个标记Matlab 及其应用 49四、脚本o 对于简单问题,使用直接输入命令简单有效;对稍复杂和多次重复的应用,直接输入命令比较麻烦。MATLAB 提供了逻辑解决方案,它允许用户把多个命令放在一个简单的文本文件中,如同在MATLAB中键入命令一般,这种文件称为脚本文件,由于脚本文件以m 为扩展名,它常称为M 文件。脚本文件为文本形式的,对跨平台处理十分有利。o 使用脚本文件,可以把命令保存在磁盘上,便于以后的访问;同时对使用大的数组也带来的方便;增加注释可以为脚本中的命令作文挡
23、以免以后忘记。Matlab 及其应用 504.1 流程控制o 为了便于应用,MATLAB 提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。1 for 循环o for 循环允许一组命令以固定的次数重复,它的一般形式是n for x=arrayn commandn endo for 和end 之间的命令串按数组array 的每一列执行一次,直到n 次后终止。Matlab 及其应用 51For 循环应当注意的一些方面1.for 循环不能使用内部重新赋值循环变量而终止;2.for 循环内部接受任何有效的MATLAB 数组;
24、3.for 循环可以嵌套;4.只要有矩阵形式可以解决的问题,不要使用for 循环。使用for 循环的算法执行很慢,一个好的MATLAB 算法部应当出现循环语句。Tic/toc5.循环可以使用break 跳出,但只跳出所在的循环,不跳出整个嵌套结构。Matlab 及其应用 522while 循环o 与for 循环以固定的次数求一组指令相反,while 循环以不定的次数求一组语句的值。While 循环的一般形式为:n while expressionn commondsn endo 只要表达式expression 里的所有元素为真,就执行命令串commands。通常表达式求值给一个标量值,单数组值
25、也同样有效。Matlab 及其应用 533 if-else-enf 结构o 很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end 结构提供。它的结构如下:n if expression1n commands1n elseif expression2n commands2n elseif n n elsen commandsn endMatlab 及其应用 54If-Then-Elseo 在执行过程中,MATLAB 依次检查各个表达式,只执行第一个表达式为真的命令串,接下来的关系表达式不检验,跳过其余的if-else-end 结构,而且,最后的else 命令可有可无。
26、Matlab 及其应用 554.2 函数o 把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递,小任务可以是函数。1 函数调用o 常见的函数调用形式为:n out1,out2,=function(in1,in2,)o 一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。o 函数文件,函数名称和文件名必须相同。Matlab 及其应用 56函数o 需要注意函数文件的放置位置,一般自己的函数文件放在当前目录;如果对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在MATLAB 中加入这个目录路径即可。o 使用函数可以加快计算速度。MATL
27、AB 首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的m 文件不被编译,在每次编译时,文件将逐行解释执行。o 函数的前一部分注释为帮助行,在使用help 命令是看到的为这些注释行。Matlab 及其应用 572 参数传递o MATLAB 函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。函数的输入输出参数数目可以通过变量nargin 和nargout 获得。函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。o 在MATLAB 中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输
28、入参数在函数中是可读的,但任何改动不会传递回上一级空间。o 使用global 命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。在实际应用中,应当尽量避免使用全局变量。Matlab 及其应用 583 函数注意o 函数可以按少于函数M 文件中所规定的输入和输出变量进行调用,但不能用多于函数M 文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M 文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。o 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin 包含输入参量个数;函数工作空间变量nargout
29、 包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。在M 文件函数里,变量nargout 可用来检验输出参量的个数,并按要求修正输出变量的创建。Matlab 及其应用 593 函数注意o 函数有它们自己的专用工作空间,它与MATLAB 的工作空间分开。函数内变量与MATLAB 工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB 工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在函数执行期间临时存在,以后就消失。因此,从一个调用到下一个调用,在函数工作空间变量存储信息是不可能的
30、。Matlab 及其应用 603 函数注意o 当调用一个函数时,输入变量不会拷贝到函数的工作空间,但使它们的值在函数内可读。然而,改变输入变量内的任何值,那么数组就拷贝到函数工作空间。进而,按缺省,如果输出变量与输入变量相同,例如,函数x=fun(x,y,z)中的x,那么就将它拷贝到函数的工作空间。因此,为了节约存储和增加速度,最好是从大数组中抽取元素,然后对它们作修正,而不是使整个数组拷贝到函数的工作空间。Matlab 及其应用 613 函数注意o 如果变量说明是全局的,函数可以与其它函数、MATLAB 工作空间和递归调用本身共享变量。为了在函数内或MATLAB 工作空间中访问全局变量,在每
31、一个所希望的工作空间,变量必须说明是全局的。o 实际编程中,无论什么时候应尽量避免使用全局变量。要是用了全局变量,建议全局变量名要长,它包含所有的大写字母,并有选择地以首次出现的M 文件的名字开头。如果遵循建议,则在全局变量之间不必要的互作用减至最小。Matlab 及其应用 623 函数注意o MATLAB 以搜寻脚本文件的同样方式搜寻函数M 文件。例如,输入 cow,MATLAB 首先认为cow 是一个变量。如果它不是,那么MATLAB 认为它是一个内置函数。如果还不是,MATLAB 检查当前cow.m 的目录或文件夹。如果它不存在,MATLAB 就检查cow.m 在MATLAB 搜寻路径上
32、的所有目录或文件夹。o 从函数M 文件内可以调用脚本文件。在这种情况下,脚本文件查看函数工作空间,不查看MATLAB 工作空间。从函数M 文件内调用的脚本文件不必用调用函数编译到内存。函数每调用一次,它们就被打开和解释。因此,从函数M 文件内调用脚本文件减慢了函数的执行。Matlab 及其应用 633 函数注意o 当MATLAB 运行时,它缓存了存储在Toolbox 子目录和Toolbox 目录内的所有子目录中所有的M 文件的名字和位置。这使MATLAB 很快地找到和执行函数M 文件。被缓存的M 文件函数当作是只读的。如果执行这些函数,以后又发生变化,MATLAB 将只执行以前编译到内存的函数
33、,不管已改变的M 文件。而且,在MATLAB 执行后,如果M 文件被加到Toolbox 目录中,那么它们将不出现在缓存里,因此不可利用。所以,在M 文件函数的使用中,最好把它们存储在Toolbox 目录外,或许最好存储在MATLAB 目录下,直至它们被认为是完备的。当它们是完备时,就将它们移到一个只读的Toolbox 目录或文件夹的子目录内。最后,要确保MATLAB 搜索路径改变,以确认它们的存在。Matlab 及其应用 643 函数注意o MATLAB 函数error 在命令窗口显示一个字符串,放弃函数执行,把控制权返回给键盘。这个函数对提示函数使用不当很有用,如在以下文件片段中:n if length(val)1n error(VAL must be a scalar.)n endo 这里,如果变量val 不是一个标量,error 显示消息字符串,把控制权返回给命令窗口和键盘。Matlab 及其应用 65脚本o echoo input x=input();o keyboard returno pauseo debug:matlab edito tic/tocMatlab 及其应用 66思考题o 进行下列计算,给出不使用for 和while 等循环语句的计算方法;o 1 o 2.求出y=x*sin(x)在0 x100 的每个峰值
限制150内