Presentation is loading. Please wait.

Presentation is loading. Please wait.

Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所

Similar presentations


Presentation on theme: "Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所"— Presentation transcript:

1 Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所 baowen@turbo.hit.edu.cn
哈尔滨工业大学研究生教学课程 Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所 Matlab及其应用

2 1 课程内容简介 MATLAB基础 基于matlab的数值分析 绘制图形 符号计算 动态系统仿真:Simulink基础
与其它程序交互:转换为c、编译、实时控制 最优化方法 Matlab及其应用

3 2 Matlab的学习方法 必须做大量的练习,熟悉其中的函数 联系和自己的课题相关,深刻的体会 多看帮助文件,又一本好的参考书
会提问题,寻求大家的帮助 记住:Matlab可以做很多事情 Matlab及其应用

4 网络对你的改变将远远的超过一台独立的计算机
学会Matlab将改变你的一生 网络对你的改变将远远的超过一台独立的计算机 Matlab及其应用

5 OK, Now begin…… Matlab及其应用

6 第一讲 MATLAB基础 哈尔滨工业大学动力工程控制与仿真研究所 baowen@turbo.hit.edu.cn 概述 >
2018/9/22 MATLAB 基础及其应用 第一讲 MATLAB基础 概述 MATLAB基本使用 MATLAB的基本矩阵分析 矩阵操作 流程控制 > > > > > Matlab及其应用

7 一、概述 MATLAB是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。 Matlab及其应用

8 1.1 MATLAB的出现 70年代中期,Cleve Moler和他的同事开发了LINPACK和EISPACK的Fortran子程序库
70年代末期,Cleve Moler 在新墨西哥大学给学生开线性代数,为学生编写了接口程序,这程序取名为MATLAB,即MATrix LABoratory 1983年春天,工程师John Little与Moler、Steve Bangert一起开发了第二代专业版MATLAB 1984年,MathWorks公司成立,MATLAB正是推向市场。 Matlab及其应用

9 1.2 学习Matlab的基本原因 不希望学生在编程上化太多时间,课程目的不是学习编程 社会化的运行带来的好处:合理利用可以节约大量的时间
为什么相同的时间别人比自己做出了更多的事情:硕士论文调查结果 面向对象的思想带来巨大的好处 紧密结合科学的前沿 From BBS:博士论文=Matlab+word Matlab及其应用

10 1.3 Matlab的版本演化 Matlab 1.0 Pc matlab->matlab 386 Matlab3.5+simulink
Matlab 4.0:simlink内嵌 Matlab 5.0 :全面的面向对象 Matlab 5.1~5.3 Matlab 6.0 Matlab 6.5:购并了MATRIXx Matlab 7.0:2004 Matlab及其应用

11 1.4 MATLAB特点 高度适应性、开放性:MATLAB的工具箱可以任意增减,任何人可以自己生成MATLAB工具箱
可扩充性: MATLAB的函数大多为ASCII文件,可以直接编辑、修改 基于矩阵运算的工作平台。多版本:windows/unix/dos/Macintosh 极多的工具箱。 Matlab及其应用

12 1.5 Matlab能做什么 基本的数据处理 优化和解方程 动态过程仿真:实时的和非实时的 数据来源:Excel、数据库、A/D等等
嵌入式的控制:Pc/104和DSP 神经元网络、小波分析、GA等等 虚拟现实仿真 Matlab及其应用

13 Matlab产品家族 Matlab扩展支持在matlab中队系统的实施和开发。 工具箱:专用的函数库,解决特定领域的问题。
Simulink非线性系统仿真 Blockset是专门为simulink建立的模块。 Matlab及其应用

14 Matlab是所有系统工具的基础 Matlab及其应用

15 设计自动化工具 Matlab及其应用

16 一般用途工具 Matlab及其应用

17 信号和图像处理 Matlab及其应用

18 控制系统设计和分析 Matlab及其应用

19 1.6 网络资源 USENET新闻组 网络上的工具箱 MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指向
网络上的工具箱 Matlab及其应用

20 1.6 网络资源(2) BBS www服务 哈尔滨工业大学bbs: telnet://bbs.hit.edu.cn
上海交通大学bbs: telnet://bbs.sjtu.edu.cn 清华大学bbs mathtools www服务 Matlab 大观园: Matlab及其应用

21 1.7 与MATLAB相似的软件 Mathmatica 数学计算功能。复杂符号计算,主要在理论界 Mathcad 数学文字软件。直接写出报告
Maple 符号计算功能强大 SciLab 免费的matlab科隆体 仿真软件:MATRIXx、VisSim等等 Matlab及其应用

22 二、MATLAB基础使用 2.1 MATLAB安装启动 Matlab的安装 Matlab启动 定制安装
关于Java的问题:XP系统必须安装虚拟机 安装pdf文件 Matlab启动 自动批处理 startup.m matlabrc.m Matlab及其应用

23 2.2 Matlab菜单的含义 多窗口界面 Matlab的设置 快速启动 版本控制 图形粘贴设置 字体的改变 Matlab及其应用

24 2.3帮助的使用 help 命令:已知命令不知道用法 lookfor命令:知道命令的关键词 Matlab Help:命令查找,索引,说明书
Demo 有效的利用帮助 Matlab及其应用

25 2.3.1 怎样获得详尽的帮助信息 首先是MATLAB窗口中的help命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。Help命令简单易用,但是它要求准确给出关键字,如果记忆不准,就很难找到。这时就应该用第二种方案。 Help Desk:这是MATLAB的HTML格式的帮助文档,有着很好的组织。可以在命令行键入helpdesk,进入“Matlab Help Desk”。Help Desk的搜索可以使用不完全关键字,这样即使遇到记忆模糊的情况也可以很快查到。 前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就是电子版的使用手册。MATLAB里包含了大量关于MATLAB安装、使用、编程以及各种工具箱等的电子版手册,全部为PDF格式,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。 Matlab及其应用

26 2.4 Matlab变量 基本运算 变量要求 变量 逗号、分号的意义 行内编辑、注释、运算规则 变量区分字母的大小写
名字不能超过19个字符,第19个字符后的字符被忽略 变量必须以字母开头,之后可以是任意字母、数字或者下滑线 变量中不能含有标点符号。 Matlab及其应用

27 特殊变量 Matlab及其应用

28 2.4.2 复数 不需要特殊的处理。复数可以表示为:a=10-9i 复数运算不需要特殊处理,可以直接进行 Matlab及其应用

29 2.4.3 显示格式 MATLAB中所有的量为双字长浮点数,显示按下面显示规则:
在缺省情况下,当结果为整数,作为整数显示;当结果为实数,以小数后4位的精度近似显示。 如果结果中的有效数字超出了这一范围,以科学计数法显示结果。 format命令改变显示格式,常用的的格式有 long (16位) bank(2个十进制位) hex(十六进制) short(缺省) short e(5位加指数) +(符号) long e(16位加指数) rat(有理数近似) Matlab及其应用

30 2.5 文件管理功能 who(whos) cd(chdir,pwd) dir(ls) type what which clc edit !
echo load clear/pack save diary Matlab及其应用

31 三、MATLAB的基本矩阵运算 3.1 简单矩阵输入 命令行简单键盘输入 文件形式输入 load数据 用于很少数据输入
矩阵的方向:, ; NaN Inf 文件形式输入 可以用来读入试验数据 大量的数据输入 load数据 文本文件:全部是数据,不含有数据 mat文件:matlab自有的数据格式 Matlab及其应用

32 2语句生成矩阵 线性等间距格式矩阵,使用from:step:to linspace命令 logspace命令 矩阵连接
a=linspace(1,10,5); logspace命令 b=logspace(0,2,10) 矩阵连接 c=[a b]; zeros ones eye randn [] Matlab及其应用

33 3. 引入特殊的文件格式 引入输入:import wizard 可以引入的文件格式: 文本文件: .txt .dat
图片文件: .gif .bmp .jpg .avi 声音:.wav .au 电子表格:.csv .xls .wk1 Matlab及其应用

34 直接读入特殊格式文件:文本类型 Matlab及其应用

35 直接读入特殊格式文件:二进格式 Matlab及其应用

36 3.2 矩阵运算 矩阵的转置 矩阵的四则运算 矩阵的乘方 用符号’来表示和实现 非共轭转置 .’ +-*/ \
非共轭转置 .’ 矩阵的四则运算 +-*/ \ 点乘:.* 右除:./ 左除:.\ 矩阵的乘方 ^矩阵乘方 .^元素对元素的乘方 Matlab及其应用

37 3.3 矩阵的超越函数 函数名 含义 abs 绝对值或者复数模 sqrt 平方根 real 实部 imag 虚部 conj 复数共轭 round 4舍5入到整数 fix 舍入到最接近0的整数 floor 舍入到最接近-oo的整数 ceil 舍入到最接近oo的整数 MATLAB中exp、sprt、sin、cos等命令可以直接使用在矩阵上,这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每个元素进行运算。MATLAB中也提供了基本的三角函数。 注意其中的取整 Matlab及其应用

38 3.3 矩阵的超越函数 函数名 含义 sign 符号函数 rem 留数 sin 正弦 cos 余弦 tan 正切 asin 反正弦 acos
反余弦 atan 反正切 atan2 第四象限反正切 函数名 含义 sinh 双曲正弦 cosh 双曲余弦 tanh 双曲正切 exp 自然指数 log 自然对数 log10 以10为底的对数 bessel 贝赛尔函数 gamma 伽吗函数 rat 有理逼近 Matlab及其应用

39 3.4 关系和逻辑运算 1 关系操作符 MATLAB常用的关系操作符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、 = =(等于)、 !=(不等于)。 MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。 »a=1:9; b=a>4 b = »c=a(a>4) c = Matlab及其应用

40 2 逻辑操作符 逻辑操作符定义了一种与或非的关系表达式。MATLAB的逻辑操作符有&(与)、|(或)、~(非)。例如:
»c=~(a>4) c = »c=(a>4)&(a<7) Matlab及其应用

41 四、矩阵操作 4.1 矩阵下标 MATLAB通过确认下标,可以对矩阵进行插入子块、提取子块和重排子块的操作。
为了提取矩阵a的第n行、第m列的元素值,使用a(n,m)可以得到。同样,将矩阵a的第n行、第m列的元素值赋为r,使用a(n,m)=r这样的命令。需要注意的是,如果在提取矩阵值时,行或列的值大于矩阵的大小,则出错;而在矩阵赋值时,如果行或者列超出矩阵的大小,则MATLAB自动扩充矩阵的规模,使得可以赋值,扩充部分以零填充。 Matlab及其应用

42 4.1 矩阵下标 利用矩阵下标,MATLAB还提供了子矩阵功能。同样是上面的a(n,m),如果n和m是向量,而不是标量,则将获得指定矩阵的子块. 同样,矩阵的子块还可以被赋值。如果在取子块时,n或m是“:”,则返回指定的所有行或列。 如果在矩阵子块赋值为空矩阵(用[]表示),则相当于消除相应的矩阵子块. 矩阵的序号编址:按列计数。 Matlab及其应用

43 4.2矩阵大小 在MATLAB命令行中,使用whos命令可以察看到所有变量的大小。
为了获得矩阵或者向量的大小,MATLAB还提供了两个有用的函数size和length。 size按照下面的形式使用:[m,n]=size(a,x)。一般的,函数的输入参量x不是用,这是当只有一个输出变量时,size返回一个行向量,第一个数为行数,第二个数为列数;如果有两个输出变量,第一个返回量为行数,第二个返回数为列数。当使用x时,x=1返回行数,x=2返回列数,这时只有一个返回值。 length返回行数或者列数的最大值,即length(a)=max(size(a))。 Matlab及其应用

44 4.3 矩阵操作函数 MATLAB提供了一组执行矩阵操作的函数,例如flipud(a)使得矩阵上下翻转,fliplr(a)使得矩阵左右翻转,rot90(a)使得矩阵逆时针翻转900等等。 Matlab及其应用

45 4.4逻辑矩阵 逻辑矩阵是大小和对应矩阵相同,而元素为0或者1的数组。逻辑数组一般由关系算子创建。可以使用逻辑矩阵来取得矩阵的部分元素值,
得到矩阵中所有大于3的值。使用逻辑矩阵也可以对矩阵的部分赋值。 Matlab及其应用

46 4.5 矩阵查找和排序 子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如: »a=10:20;
ans = 矩阵的排序使用sort函数,它将矩阵按照升序排列。 Matlab及其应用

47 5矩阵的查找和排序 子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。 矩阵的排序使用sort函数,它将矩阵按照升序排列。
应用: 去噪声:a(find(a<std(a)*3)) 嵌入数据 替换 Matlab及其应用

48 6 字符串处理 MATLAB 真正强有力的地方在于它的数值处理能力。然而,经常希望操作文本,例如把标号和标题放在图上。在MATLAB 里,文本当作特征字符串或简单地当作字符串。 字符串内的单引号是由两个连续的单引号来表示。 字符串连接可以直接从数组连接中得到。 Matlab及其应用

49 字符串函数 eval(string) 作为一个MATLAB 命令求字符串的值 eval(try,catch)
blanks(n) 返回一个n 个零或空格的字符串 deblank 去掉字符串中后拖的空格 feval 求由字符串给定的函数值 findstr 从一个字符串内找出字符串 isletter 字母存在时返回真值 isspace 空格字符存在时返回真值 isstr 输入是一个字符串,返回真值 lasterr 返回上一个所产生MATLAB 错误的字符串 strcmp 字符串相同,返回真值 strrep 用一个字符串替换另一个字符串 strtok 在一个字符串里找出第一个标记 Matlab及其应用

50 四、脚本 对于简单问题,使用直接输入命令简单有效;对稍复杂和多次重复的应用,直接输入命令比较麻烦。MATLAB提供了逻辑解决方案,它允许用户把多个命令放在一个简单的文本文件中,如同在MATLAB中键入命令一般,这种文件称为脚本文件,由于脚本文件以m为扩展名,它常称为M文件。脚本文件为文本形式的,对跨平台处理十分有利。 使用脚本文件,可以把命令保存在磁盘上,便于以后的访问;同时对使用大的数组也带来的方便;增加注释可以为脚本中的命令作文挡以免以后忘记。 Matlab及其应用

51 4.1 流程控制 为了便于应用,MATLAB提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。 1 for循环 for循环允许一组命令以固定的次数重复,它的一般形式是 for x=array command end for 和end之间的命令串按数组array的每一列执行一次,直到n次后终止。 Matlab及其应用

52 For循环应当注意的一些方面 for循环不能使用内部重新赋值循环变量而终止; for循环内部接受任何有效的MATLAB数组;
只要有矩阵形式可以解决的问题,不要使用for循环。使用for循环的算法执行很慢,一个好的MATLAB算法部应当出现循环语句。Tic/toc 循环可以使用break跳出,但只跳出所在的循环,不跳出整个嵌套结构。 Matlab及其应用

53 2while循环 与for循环以固定的次数求一组指令相反,while循环以不定的次数求一组语句的值。While循环的一般形式为:
while expression commonds end 只要表达式expression里的所有元素为真,就执行命令串commands。通常表达式求值给一个标量值,单数组值也同样有效。 Matlab及其应用

54 3 if-else-enf结构 很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end结构提供。它的结构如下:
if expression1 commands1 elseif expression2 commands2 elseif … else commands end Matlab及其应用

55 If- Then- Else 在执行过程中,MATLAB依次检查各个表达式,只执行第一个表达式为真的命令串,接下来的关系表达式不检验,跳过其余的if-else-end结构,而且,最后的else命令可有可无。 Matlab及其应用

56 4.2 函数 把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递,小任务可以是函数。 1 函数调用
常见的函数调用形式为: [out1,out2,…]=function(in1,in2,…) 一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。 函数文件,函数名称和文件名必须相同。 Matlab及其应用

57 函数 需要注意函数文件的放置位置,一般自己的函数文件放在当前目录;如果对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在MATLAB中加入这个目录路径即可。 使用函数可以加快计算速度。MATLAB首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的m文件不被编译,在每次编译时,文件将逐行解释执行。 函数的前一部分注释为帮助行,在使用help命令是看到的为这些注释行。 Matlab及其应用

58 2 参数传递 MATLAB函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。函数的输入输出参数数目可以通过变量nargin和nargout获得。函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。 在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数在函数中是可读的,但任何改动不会传递回上一级空间。 使用global命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。在实际应用中,应当尽量避免使用全局变量。 Matlab及其应用

59 3 函数注意 函数可以按少于函数M 文件中所规定的输入和输出变量进行调用,但不能用多于函数M 文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M 文件中function 语句一开始所规定的数目,则调用时自动返回一个错误。 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin 包含输入参量个数;函数工作空间变量nargout 包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。在M 文件函数里,变量nargout 可用来检验输出参量的个数,并按要求修正输出变量的创建。 Matlab及其应用

60 3 函数注意 函数有它们自己的专用工作空间,它与MATLAB 的工作空间分开。函数内变量与MATLAB 工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB 工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在函数执行期间临时存在,以后就消失。因此,从一个调用到下一个调用,在函数工作空间变量存储信息是不可能的。 Matlab及其应用

61 3 函数注意 当调用一个函数时,输入变量不会拷贝到函数的工作空间,但使它们的值在函数内可读。然而,改变输入变量内的任何值,那么数组就拷贝到函数工作空间。进而,按缺省,如果输出变量与输入变量相同,例如,函数x=fun(x, y, z) 中的x ,那么就将它拷贝到函数的工作空间。因此,为了节约存储和增加速度,最好是从大数组中抽取元素,然后对它们作修正,而不是使整个数组拷贝到函数的工作空间。 Matlab及其应用

62 3 函数注意 如果变量说明是全局的,函数可以与其它函数、MATLAB 工作空间和递归调用本身共享变量。为了在函数内或MATLAB 工作空间中访问全局变量,在每一个所希望的工作空间,变量必须说明是全局的。 实际编程中,无论什么时候应尽量避免使用全局变量。要是用了全局变量,建议全局变量名要长,它包含所有的大写字母,并有选择地以首次出现的M 文件的名字开头。如果遵循建议,则在全局变量之间不必要的互作用减至最小。 Matlab及其应用

63 3 函数注意 MATLAB 以搜寻脚本文件的同样方式搜寻函数M 文件。例如,输入» cow ,MATLAB 首先认为cow 是一个变量。如果它不是,那么MATLAB 认为它是一个内置函数。如果还不是,MATLAB 检查当前cow.m 的目录或文件夹。如果它不存在,MATLAB 就检查cow.m 在MATLAB 搜寻路径上的所有目录或文件夹。 从函数M 文件内可以调用脚本文件。在这种情况下,脚本文件查看函数工作空间,不查看MATLAB 工作空间。从函数M 文件内调用的脚本文件不必用调用函数编译到内存。函数每调用一次,它们就被打开和解释。因此,从函数M 文件内调用脚本文件减慢了函数的执行。 Matlab及其应用

64 3 函数注意 当MATLAB 运行时,它缓存了存储在Toolbox 子目录和Toolbox 目录内的所有子目录中所有的M 文件的名字和位置。这使MATLAB 很快地找到和执行函数M 文件。被缓存的M 文件函数当作是只读的。如果执行这些函数,以后又发生变化,MATLAB 将只执行以前编译到内存的函数,不管已改变的M 文件。而且,在MATLAB 执行后,如果M 文件被加到Toolbox 目录中,那么它们将不出现在缓存里,因此不可利用。所以,在M 文件函数的使用中,最好把它们存储在Toolbox 目录外,或许最好存储在MATLAB 目录下,直至它们被认为是完备的。当它们是完备时,就将它们移到一个只读的Toolbox 目录或文件夹的子目录内。最后,要确保MATLAB 搜索路径改变,以确认它们的存在。 Matlab及其应用

65 3 函数注意 MATLAB 函数error 在命令窗口显示一个字符串,放弃函数执行,把控制权返回给键盘。这个函数对提示函数使用不当很有用,如在以下文件片段中: if length(val)>1 error(' VAL must be a scalar. ') end 这里,如果变量val 不是一个标量,error 显示消息字符串,把控制权返回给命令窗口和键盘。 Matlab及其应用

66 脚本 echo input x=input(‘ ‘); keyboard return pause debug: matlab edit
tic /toc Matlab及其应用

67 思考题 进行下列计算,给出不使用for和while等循环语句的计算方法; 1
2.求出y=x*sin(x) 在0<x<100的每个峰值 Matlab及其应用


Download ppt "Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所"

Similar presentations


Ads by Google