730 likes | 1.02k Views
Matlab 及其应用. 1 课程内容简介. MATLAB 基础 基于 matlab 的数值分析 绘制图形 符号计算 动态系统仿真: Simulink 基础 与其它程序交互 : 转换为 c 、编译、实时控制 最优化方法. 2 Matlab 的学习方法. 必须做大量的练习,熟悉其中的函数 联系和自己的课题相关,深刻的体会 多看帮助文件,又一本好的参考书 会提问题,寻求大家的帮助 记住: Matlab 可以做很多事情. 学会 Matlab 将改变你的一生. 网络对你的改变将远远的超过一台独立的计算机. OK, Now begin …….
E N D
1 课程内容简介 • MATLAB基础 • 基于matlab的数值分析 • 绘制图形 • 符号计算 • 动态系统仿真:Simulink基础 • 与其它程序交互:转换为c、编译、实时控制 • 最优化方法
2 Matlab的学习方法 • 必须做大量的练习,熟悉其中的函数 • 联系和自己的课题相关,深刻的体会 • 多看帮助文件,又一本好的参考书 • 会提问题,寻求大家的帮助 • 记住:Matlab可以做很多事情
学会Matlab将改变你的一生 网络对你的改变将远远的超过一台独立的计算机
哈尔滨工业大学动力工程控制与仿真研究所 baowen@turbo.hit.edu.cn MATLAB 基础及其应用 • 概述 • MATLAB基本使用 • MATLAB的基本矩阵分析 • 矩阵操作 • 流程控制 > 第一讲 MATLAB基础 > > > >
一、概述 • MATLAB是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。
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正是推向市场。
1.2 学习Matlab的基本原因 • 不希望学生在编程上化太多时间,课程目的不是学习编程 • 社会化的运行带来的好处:合理利用可以节约大量的时间 • 为什么相同的时间别人比自己做出了更多的事情:硕士论文调查结果 • 面向对象的思想带来巨大的好处 • 紧密结合科学的前沿 • From BBS:博士论文=Matlab+word
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
1.4 MATLAB特点 • 高度适应性、开放性:MATLAB的工具箱可以任意增减,任何人可以自己生成MATLAB工具箱 • 可扩充性: MATLAB的函数大多为ASCII文件,可以直接编辑、修改 • 基于矩阵运算的工作平台。多版本:windows/unix/dos/Macintosh • 极多的工具箱。
1.5 Matlab能做什么 • 基本的数据处理 • 优化和解方程 • 动态过程仿真:实时的和非实时的 • 数据来源:Excel、数据库、A/D等等 • 嵌入式的控制:Pc/104和DSP • 神经元网络、小波分析、GA等等 • 虚拟现实仿真
Matlab产品家族 • Matlab扩展支持在matlab中队系统的实施和开发。 • 工具箱:专用的函数库,解决特定领域的问题。 • Simulink非线性系统仿真 • Blockset是专门为simulink建立的模块。
1.6 网络资源 • USENET新闻组 • MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指向 • http://www.dejanews.com • http://www.google.com • 网络上的工具箱 • http://www.mathtools.com/ • http://www.mathworks.com/matlabcentral/fileexchange/loadCategory.do
1.7 与MATLAB相似的软件 • Mathmatica 数学计算功能。复杂符号计算,主要在理论界 • Mathcad 数学文字软件。直接写出报告 • Maple 符号计算功能强大 • SciLab 免费的matlab科隆体 • 仿真软件:MATRIXx、VisSim等等
二、MATLAB基础使用 2.1 MATLAB安装启动 • Matlab的安装 • 定制安装 • 关于Java的问题:XP系统必须安装虚拟机 • 安装pdf文件 • Matlab启动 • 自动批处理 startup.m matlabrc.m
2.2 Matlab菜单的含义 • 多窗口界面 • Matlab的设置 • 快速启动 • 版本控制 • 图形粘贴设置 • 字体的改变
2.3帮助的使用 • help 命令:已知命令不知道用法 • lookfor命令:知道命令的关键词 • Matlab Help:命令查找,索引,说明书 • Demo • 有效的利用帮助
2.3.1 怎样获得详尽的帮助信息 • 首先是MATLAB窗口中的help命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。Help命令简单易用,但是它要求准确给出关键字,如果记忆不准,就很难找到。这时就应该用第二种方案。 • Help Desk:这是MATLAB的HTML格式的帮助文档,有着很好的组织。可以在命令行键入helpdesk,进入“Matlab Help Desk”。Help Desk的搜索可以使用不完全关键字,这样即使遇到记忆模糊的情况也可以很快查到。 • 前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就是电子版的使用手册。MATLAB里包含了大量关于MATLAB安装、使用、编程以及各种工具箱等的电子版手册,全部为PDF格式,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。
2.4 Matlab变量 • 基本运算 • 变量 • 逗号、分号的意义 • 行内编辑、注释、运算规则 • 变量要求 • 变量区分字母的大小写 • 名字不能超过19个字符,第19个字符后的字符被忽略 • 变量必须以字母开头,之后可以是任意字母、数字或者下滑线 • 变量中不能含有标点符号。
2.4.2 复数 • 不需要特殊的处理。复数可以表示为:a=10-9i • 复数运算不需要特殊处理,可以直接进行
2.4.3 显示格式 • MATLAB中所有的量为双字长浮点数,显示按下面显示规则: • 在缺省情况下,当结果为整数,作为整数显示;当结果为实数,以小数后4位的精度近似显示。 • 如果结果中的有效数字超出了这一范围,以科学计数法显示结果。 • format命令改变显示格式,常用的的格式有 • long (16位) bank(2个十进制位) hex(十六进制) • short(缺省) short e(5位加指数) +(符号) • long e(16位加指数) rat(有理数近似)
who(whos) cd(chdir,pwd) dir(ls) type what which clc edit ! echo load clear/pack save diary 2.5 文件管理功能
三、MATLAB的基本矩阵运算 3.1 简单矩阵输入 • 命令行简单键盘输入 • 用于很少数据输入 • 矩阵的方向:, ; NaN Inf • 文件形式输入 • 可以用来读入试验数据 • 大量的数据输入 • load数据 • 文本文件:全部是数据,不含有数据 • mat文件:matlab自有的数据格式
2语句生成矩阵 • 线性等间距格式矩阵,使用from:step:to • linspace命令 • a=linspace(1,10,5); • logspace命令 • b=logspace(0,2,10) • 矩阵连接 • c=[a b]; • zeros ones eye randn []
3. 引入特殊的文件格式 • 引入输入:import wizard • 可以引入的文件格式: • 文本文件: .txt .dat • 图片文件: .gif .bmp .jpg .avi • 声音:.wav .au • 电子表格:.csv .xls .wk1
3.2 矩阵运算 • 矩阵的转置 • 用符号’来表示和实现 • 非共轭转置 .’ • 矩阵的四则运算 • +-*/ \ • 点乘:.* 右除:./ 左除:.\ • 矩阵的乘方 • ^矩阵乘方 • .^元素对元素的乘方 • 矩阵的范数 • norm 1-范数 2-范数 –无穷范数 • 条件数 cond
3.3 矩阵的超越函数 • MATLAB中exp、sprt、sin、cos等命令可以直接使用在矩阵上,这种运算只是定义在矩阵的单个元素上,即分别对矩阵的每个元素进行运算。MATLAB中也提供了基本的三角函数。 • 注意其中的取整
3.4 关系和逻辑运算 1 关系操作符 • MATLAB常用的关系操作符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、 = =(等于)、 !=(不等于)。 • MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。 • »a=1:9; • b=a>4 • b = • 0 0 0 0 1 1 1 1 1 • »c=a(a>4) • c = • 5 6 7 8 9
2 逻辑操作符 • 逻辑操作符定义了一种与或非的关系表达式。MATLAB的逻辑操作符有&(与)、|(或)、~(非)。例如: • »c=~(a>4) • c = • 1 1 1 1 0 0 0 0 0 • »c=(a>4)&(a<7) • c = • 0 0 0 0 1 1 0 0 0
四、矩阵操作 4.1 矩阵下标 • MATLAB通过确认下标,可以对矩阵进行插入子块、提取子块和重排子块的操作。 • 为了提取矩阵a的第n行、第m列的元素值,使用a(n,m)可以得到。同样,将矩阵a的第n行、第m列的元素值赋为r,使用a(n,m)=r这样的命令。需要注意的是,如果在提取矩阵值时,行或列的值大于矩阵的大小,则出错;而在矩阵赋值时,如果行或者列超出矩阵的大小,则MATLAB自动扩充矩阵的规模,使得可以赋值,扩充部分以零填充。
4.1 矩阵下标 • 利用矩阵下标,MATLAB还提供了子矩阵功能。同样是上面的a(n,m),如果n和m是向量,而不是标量,则将获得指定矩阵的子块. • 同样,矩阵的子块还可以被赋值。如果在取子块时,n或m是“:”,则返回指定的所有行或列。 • 如果在矩阵子块赋值为空矩阵(用[]表示),则相当于消除相应的矩阵子块. • 矩阵的序号编址:按列计数。
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))。
4.3 矩阵操作函数 • MATLAB提供了一组执行矩阵操作的函数,例如flipud(a)使得矩阵上下翻转,fliplr(a)使得矩阵左右翻转,rot90(a)使得矩阵逆时针翻转900等等。
4.4逻辑矩阵 • 逻辑矩阵是大小和对应矩阵相同,而元素为0或者1的数组。逻辑数组一般由关系算子创建。可以使用逻辑矩阵来取得矩阵的部分元素值, • 得到矩阵中所有大于3的值。使用逻辑矩阵也可以对矩阵的部分赋值。
4.5 矩阵查找和排序 • 子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如: • »a=10:20; • »find(a>15) • ans = • 7 8 9 10 11 • 矩阵的排序使用sort函数,它将矩阵按照升序排列。
5矩阵的查找和排序 • 子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。 • 矩阵的排序使用sort函数,它将矩阵按照升序排列。 • 应用: • 去奇异点:a(find(a<std(a)*3)) • 嵌入数据:在指定大小的数据后加入数据 • 替换:替换指定大小的数据段
6 字符串处理 • MATLAB 真正强有力的地方在于它的数值处理能力。然而,经常希望操作文本,例如把标号和标题放在图上。在MATLAB 里,文本当作特征字符串或简单地当作字符串。 • 字符串内的单引号是由两个连续的单引号来表示。 • 字符串连接可以直接从数组连接中得到。
字符串函数 • eval(string) 作为一个MATLAB 命令求字符串的值 • eval(try,catch) • blanks(n) 返回一个n 个零或空格的字符串 • deblank 去掉字符串中后拖的空格 • feval 求由字符串给定的函数值 • findstr 从一个字符串内找出字符串 • isletter 字母存在时返回真值 • isspace 空格字符存在时返回真值 • isstr 输入是一个字符串,返回真值 • lasterr 返回上一个所产生MATLAB 错误的字符串 • strcmp 字符串相同,返回真值 • strrep 用一个字符串替换另一个字符串 • strtok 在一个字符串里找出第一个标记
类型转换 • char x=[77 65 84 76 65 66]; char(x) • int2str 四舍五入为整数转换为字符串 • num2str 将数字转换为字符串 • mat2str 将矩阵的数据转换为字符串 • str2num
7 单元结构 • 单元结构:cell • 把不同属性的数据纳入一个变量中 • 类似于具有下标的矩阵和多维数组,但这些下标不是用圆括号,而是用大括号括起来的。 • pp=cellstr({'asd' 'testetet' 'sfsdfsdfdfgsdgsg' 'sfdfgfdfgf'}) • 显示内容:pp(1)和pp{1}的区别 • 清空一个单元数据:pp(3)=[] 和pp{3}=[]的区别