1、Matlab 复习资料(内部资料)山东农业大学信息学院2010 年 1 月- 1 -Matlab 复习资料一、基本概念、命令、语句格式、程序结构1. MATLAB 是一种用于科学工程计算的高级语言,其基本的数据单位是矩阵,它的命令表达式与数学、工程中常用的习惯表达形式十分相似;2. MATLAB 高效方便的矩阵和数组运算,使之在数字信号处理、建模、系统识别、自动控制、优化等领域的问题时,显得十分简洁、高交,具有其他高级语言不可比拟的优势;3. MATLAB 的典型应用包括以下几个方面:数学计算、算法设计、建模与仿真、数据分析与可视化、科学及工程绘图和应用开发;4. MATLAB 最显著的特点是
2、其基本数据是不需要定义大小的数组;5. MATLAB 语言是以矩阵和向量为基本数据单位,包括控制流程语句、函数、数据结构、输入输出及面向对象等特点的高级语言;6. MATLAB 的工作空间指运行 MATLAB 的所有变量和 MATLAB 提供的常量构成的空间;7. 在命令窗口中键入 who 和 whos 命令可以看到目前工作空间里的所有变量,命令clear 可以删除工作空间里的变量;8. MATLAB 用“%”实现注释功能;可以把多条命令放在同一行,只要中间用逗号或分号隔开,逗号告诉 MATLAB 显示结果;分号说明除了这一条命令外还有下一条命令等待输入,MATLAB 这时将不会给出运行的中间
3、结果;9. MATLAB 的“类”目录名都以符为引导,其上存放“ 类构造”函数和“重载”函数;10. 用 path 命令扩展的搜索路径仅在当前 MATLAB 环境下有效;11. MATLAB 有两种最常用的创建数组的方式: “冒号表示形式 ”直接定义数据点之间的增量而不是数据点;linspace 直接定义数据点数,而不是数据点之间的增量;12. MATLAB 数组中以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素;另:MATLAB 的数组存储,也表现在绝对索引上,是按从上到下、从左到右的顺序进行的。13. 点乘符号.*对数组 c 和 d 施加元素对元素的乘法运算
4、,不带点的乘号表示矩阵乘法;14. 数组除法同时使用了正斜杠和反斜杠两种定义:两种情况下,斜杠下的数组都被斜杠上的数组所除;15. B.A 表示对应元素相除;16. reshape 函数用于在总元素不变的前提下,改变数组的“行数”、“列数”;17. 为了生成比较复杂的数组,MATLAB 提供了诸如反转、插入、提取、收缩、重组等对数组和矩阵的操作方式;- 2 -18. 函数 find 用于返回数组或矩阵中满足某关系表达式的那些元素的位置或下标;19. 可用命令 class 和 ischar 来查看变量是否为字符数组;20. 采用输入数值矩阵的方法输入字符矩阵时,应保证矩阵的每行字符串的长度相同;
5、21. 函数 cellstr 可把字符矩阵转换成元胞数组;22. 函数 mat2str 把数值数组组转换为字符串,用 eval 函数又可把这种字符串转换成数值数组;23. 元胞数组的每一个元素可为类型不同、维数不同的矩阵、向量、标量或多维数组,所有元素用大括号括起来;24. 中括号对“ ” 用来形成矩阵,大括号对“ ”是元胞数组的标志。两者不同之处在于,大括号可以嵌套,而中括号不可;25. 函数 celldisp 用来显示元胞数组的每个元素的值,函数 cellplot 将画出元胞数组的每个元素的结构图;26. 当给已经定义的元胞数组下标范围外的元素赋值时,MATLAB 自动扩维,对于没有赋值的
6、元素,赋值为空矩阵;27. 在赋值语句中,每次只能给元胞数组的一个元素赋值,采用形如“a1,:=”的赋值语句是不合法的;28. 结合使用冒号运算和大括号可以方便地引用元胞数组中的多个元素,并把引用的元素分为不同的变量;29. 数据不能直存放于结构体,而只能存放在域中。结构体的域可以存放任何类型、任何大小的数组;30. 在矩阵下标的表达式里使用冒号表示矩阵的一部分,如 A(:,j)表示矩阵 A 的第 j列的所有元素。由于有了冒号运算符,在 MATLAB 里编程变得特别简便、快捷;31. 在 MATLAB 里,可通过把矩阵的列或行赋值为空矩阵来删除某行或某列;32. A(1:2:5)表示删除下标为
7、 1、3、5 的三个元素;33. 在 MATLAB 里,当行向量乘以列向量时为标量积(内积),当列向量乘以行向量时为向量积(外积);34. 函数 cond(A)计算矩阵的条件数;35. V, D=eig(A)求特征值与特征向量;36. det(A)计算行列式;37. Inv(A)求矩阵的逆;38. poly(A)求特征多项式;39. 函数 polyfit 从最小二乘的意义上,拟合出所给数据的多项式系数;40. x(any(isnan(x),:) = 作用是删除所有包含 NaN 的行;41. any(x)的功能是:如果在一个向量 x 中,任何元素是非零,返回 1;42. all(x)的功能是:如
8、果在一个向量 x 中,所有元素非零,返回 1;43. 函数工作空间变量 nargin 包含输入参量个数,函数工作空间变量 nargout 包含输出参量个数;44. 局部(local)变量是存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身;- 3 -45. 全局(global)变量是在不同的工作空间以及基本工作空间中可以被共享的变量;46. 私有函数只能被 private 目录的直接父目录上的 M 函数文件所调用;47. 数值数组的预定维一般采用 zeros 函数,元胞数组预定维采用 cell 函数,结构型数组用 struct 函数预定维;48. clear
9、命令从内存中删除变量;49. pack 命令把内存中的变量存入磁盘,再用内存中的连续空间载回这些变量;50. 在 MATLAB 里,对象是用结构体数组来存储的;51. 函数 figure 可建立新的图形窗口,并把新建的窗口指定为当前窗口用于输出图形;52. 命令 subplot 可以把多个图形绘在一个图形窗口中;53. 命令 what 列出当前目录或文件夹下的所有 M 文件和 MAT 文件;54. help、lookfor 等命令都不能提供关于私有函数的任何帮助信息;55. MATLAB 还提供了两种演算函数来提高计算的灵活性:一种是串演算函数eval,另一种是函数句柄演算函数 feval;5
10、6. 编程时,把循环向量化,不但能缩短程序的长度,更能提高程序的执行效率;57. 在 MATLAB 里运行 C 语言的可执行文件,应在文件名前加上感叹号“!”;58. 函数 meshgrid(x,y)对 y 中行的每一行复制 x,同样也对 x 中列的每一列复制 y;59. MATLAB 提供了一个称为 fplot 的巧妙的绘图函数,该函数细致地计算要绘图的函数,并且确保在输出的图形中表示出所有的奇异点;60. 在图形窗口里,legend、zoom 、ginput 都响应鼠标的单击。二、MATLAB 矩阵运算基础创建行矢量:在一对方括号中输入元素,并用空格或是逗号分隔开。创建列矢量:使用分号分割
11、开。转置运算符(),若数组中包含复数元素,那么产生复共轭转置。可以使用点转置运输符(.),所有元素是实数,它们的运算结果相同。数组索引:行号总是列在前面。 V(:,2:4)表示矩阵中第二列,到第五列的所有元素。通过让矩阵的某些行或列赋值空数组,就可以 删除相应的行或列。A(1 4, :)= ;删除矩阵 A 的第 1 行和第 4 行。多维数组前二维是行和列,较 高维称为页。 创建三维数组的一个方法是使用 cat 命令。Ccat (3,A,B),可以任务 C 由两层数组构成,第一 层是 A,第二 层是 B。1 在 MATLAB 中如何建立矩 阵 ,并将其赋予变量 a?194375 a=5 7 3;
12、4 9 12 有几种建立矩阵的方法?各有什么优点?可以用四种方法建立矩阵:直接 输入法,如 a=2 5 7 3,优点是输入方法方便简捷;- 4 -通过 M 文件建立矩阵,该方法适用于建立尺寸较大的矩 阵,并且易于修改;由函数建立,如 y=sin(x),可以由 MATLAB 的内部函数建立一些特殊矩 阵;通过 数据文件建立,该方法可以调用由其他软件产生数据。3 在进行算术运算时,数组运算和矩 阵运算各有什么要求?进行数组运算的两个数组必须有相同的尺寸。 进行矩阵运算的两个矩 阵必须满足矩阵运算规则,如矩阵 a 与 b 相乘( a*b)时必须满足 a 的列数等于 b 的行数。4 数组运算和矩阵运算
13、的运算符有什么区别?在加、减运算时数组运算与矩 阵运算的运算符相同,乘、除和乘方运算 时,在矩阵运算的运算符前加一个点即为数组运算,如 a*b 为矩阵乘, a.*b 为数组乘。5 计算矩阵 与 之和。89743563972 a=5 3 5;3 7 4;7 9 8; b=2 4 2;6 7 9;8 3 6; a+bans =7 7 79 14 1315 12 146 求 的共轭转置。 i4i93i4i67i23571584x x=4+8i 3+5i 2-7i 1+4i 7-5i;3+2i 7-6i 9+4i 3-9i 4+4i; xans =4.0000 - 8.0000i 3.0000 - 2
14、.0000i3.0000 - 5.0000i 7.0000 + 6.0000i2.0000 + 7.0000i 9.0000 - 4.0000i1.0000 - 4.0000i 3.0000 + 9.0000i7.0000 + 5.0000i 4.0000 - 4.0000i7 计算 与 的数组乘积。572396a86412b a=6 9 3;2 7 5; b=2 4 1;4 6 8; a.*bans =12 36 38 42 408 “左除”与“右除 ”有什么区别?在通常情况下,左除 x=ab 是 a*x=b 的解,右除 x=b/a 是 x*a=b 的解,一般情况下,- 5 -abb/a。9
15、 对于 ,如果 , ,求解 X。BAX7534629863B A=4 9 2;7 6 4;3 5 7; B=37 26 28; X=ABX =-0.51184.04271.331810 已知: ,分别计 算 a 的数组平方和矩阵平方,并观察其结果。987654321a a=1 2 3;4 5 6;7 8 9; a.2ans =1 4 916 25 3649 64 81 a2ans =30 36 4266 81 96102 126 15011 , ,观察 a 与 b 之间的六种关系运算的结果。463521a263478b a=1 2 3;4 5 6; b=8 7 4;3 6 2; abans =
16、0 1 01 0 1 a=bans =0 1 01 0 1 a a a=bans =0 0 00 0 0 a=bans =1 1 11 1 112 ,在 进行逻辑运算时, a 相当于什么 样的逻辑量。7.082.05a相当于 a=1 1 0 1 1。13 在 sin(x)运算中, x 是角度 还是弧度?在 sin(x)运算中,x 是弧度,MATLAB 规定所有的三角函数运算都是按弧度进行运算。14 角度 ,求 x 的正弦、余弦、正切和余切。60453 x=30 45 60; x1=x/180*pi; sin(x1)ans =0.5000 0.7071 0.8660 cos(x1)ans =0.
17、8660 0.7071 0.5000 tan(x1)ans =0.5774 1.0000 1.7321 cot(x1)ans =1.7321 1.0000 0.577415 用四舍五入的方法将数组2.4568 6.3982 3.9375 8.5042取整。 b=2.4568 6.3982 3.9375 8.5042; round(b)ans =2 6 4 9- 7 -16 将矩阵 、 和 组合成两个新矩 阵:5724a3817b2695c(1)组合成一个 43 的矩阵,第一列为按列顺序排列的 a 矩阵元素,第二列为按列顺序排列的 b 矩阵元素,第三列为 按列顺序排列的 c 矩阵元素,即 ;23
18、7916854(2)按照 a、b、c 的列顺序组合成一个行矢量,即 2965318754 a=4 2;5 7; b=7 1;8 3; c=5 9;6 2;% (1) d=a(:) b(:) c(:)d =4 7 55 8 62 1 97 3 2% (2) e=a(:);b(:);c(:) e =4 5 2 7 7 8 1 3 5 6 9 2或利用(1)中产生的 d e=reshape(d,1,12)ans =4 5 2 7 7 8 1 3 5 6 9 2三、重要函数/命令/变量clc 清空命令窗口clear 从工作空间(计算机内存)中删除变量close all 关闭(删除)全部图形窗口load
19、 从磁盘中调入数据变量save 把内存变量存入磁盘function 函数文件头global 定义全局变量input 提示键盘输入format 格式化显示命令窗口输出信息- 8 -cumsum 阵列累计和diag 方阵的对角线;创建对角阵dot 两向量的点积end 阵列最后项的指针find 满足逻辑表达式的阵列索引和阵列值length 向量长度size 阵列的阶次或长度min 确定阵列中的最小值max 确定阵列中的最大值rank 确定矩阵线性无关的行或列值eig 矩阵特征方程的特征值和特征向量det 方阵行列式inv 方阵的逆poly 特征多项式plot 应用线型坐标绘制平面曲线mesh 绘三维
20、网线图sum 计算阵列元素的和值mean 计算阵列元素的均值var 计算阵列元素的方差std 计算阵列元素的标准差corrcoef 相关系数矩阵sym 定义基本符号对象syms 定义基本符号对象! 执行外部应用程序基本矩阵(Elementary matrices)eye 单位矩阵ones 所有元素全为1的矩阵zeros 所有元素全为0的矩阵rand 均匀分布随机阵randn 正态分布随机阵compan 伴随矩阵magic 创建任意行和列的和值相等的方阵meshgrid 用于三维曲面的分格线坐标linspace 线性等分向量logspace 对数等分向量repmat 铺放模块数组信息显示(Mes
21、sage display)disp 显示矩阵和文字内容display 显示矩阵和文字内容的重载函数error 显示错误信息- 9 -fprintf 把格式化数据写到文件或屏幕sprintf 按格式把数字转换为串控制语句(Control flow)break 终止最内循环case 同switch一起使用catch 同try一起使用continue 将控制转交给外层的for或while循环else 同if一起使用elseif 同if一起使用end 结束for,while,if语句for 按规定次数重复执行语句if 条件执行语句otherwise 可同switch一起使用return 返回switc
22、h 多个条件分支try try-cathch结构while 不确定次数重复执行语句特殊变量ans 用于结果的缺省变量名pi 圆周率eps 计算机的最小数,当和 1 相加就产生一个比 1 大的数flops 浮点运算数inf 无穷大,如 1/0NaN 不定量,如 0/0i,j i=j= 1nargin 所用函数的输入变量数目nargout 所用函数的输出变量数目realmin 最小可用正实数realmax 最大可用正实数时间和日期(Time and dates)clock 时钟cputme MATLAB占用CPU 时间date 日期etime 用CLOCK 计算的时间now 当前时钟和日期pause 暂停tic 计时开始toc 计时终止和显示符串操作(String operations)