教你如何使用Matlab,可以自学的

 时间:2012-04-08 00:51:05 贡献者:紫恋雪缘23

导读:附录MATLAB 简介这里介绍 MATLAB 一些入门知识,包括 MATLAB 桌面和窗口,MATLAB 命令格式、数据格式、数据文件和变量管理,MATLAB 的数组和矩阵运算, MATLAB 的字符串、元胞和结构等数据类型,M

求matlab中文版能在64位win10使用的破解版安装包,2010及其以上的版本
求matlab中文版能在64位win10使用的破解版安装包,2010及其以上的版本

附录MATLAB 简介这里介绍 MATLAB 一些入门知识,包括 MATLAB 桌面和窗口,MATLAB 命令格式、数据格式、数据文件和变量管理,MATLAB 的数组和矩阵运算, MATLAB 的字符串、元胞和结构等数据类型,MATLAB 的程序设计方法, MATLAB 作图方法在线帮助的使用和程序文件和目录的管理等。

表一 MATLAB 的基本命令 主题词 含义 主题词 含义 format 设置数据显示格式 feval 函数求值 who 显示变量名 input 提示输入 whos 显示变量信息 disp 输出 clear 清除内存变量 tic 启动秒表 save 保存工作变量到文件 toc 时间读数(秒) load 从文件装载变量 help 帮助 linspace 区间等分 lookfor 查找 length 获取数组长度 type 列程序清单 size 矩阵大小 which 查找文件目录 max 最大值 double 双精度 min 最小值 str2num 字符串转化为数值 sum 求和 num2str 数值转化为字符串 find 条件检索一、MATLAB 桌面启动 MATLAB 后,就进入 MATLAB 的桌面,图 1 为 MATLAB6.1 的默认 桌面。

第一行为菜单栏, 第二行为工具栏, 下面是三个最常用的窗口。

(Default) 右边最大的是命令窗口(Command Window) ,左上方前台为发行说明书窗口 (Launch pad) 后台为工作空间 ,后台为工作空间 后台为工作空间(Workspace) ,左下方为命令历史(Command History)后台为当前目录(Current Directory) 。

1.窗口 (1)命令窗口 该窗口是进行 MATLAB 操作最主要的窗口。

窗口中“>>”为命令输入提示 符,其后输入运算命令,按回车键就可执行运算,并显示运算结果.。

1

图1 (2)发行说明书窗口 发行说明书窗口是 MATLAB 所特有的,用来说明用户所拥有的 Mathworks 公司产品的工具包、演示以及帮助信息。

(3)工作空间 ) 在默认桌面,位于左上方窗口前台,列出内存中 MATLAB 工作空间的所有 变量的变量名、尺寸、字节数。

用鼠标选中变量,击右键可以打开、保存、删除、 绘图等操作。

(4)当前目录 在默认桌面,位于左下方窗口后台,用鼠标点击可以切换到前台。

该窗口列 出当前目录的程序文件(.m)和数据文件(.mat)等。

用鼠标选中文件,击右键 可以进行打开、运行、删除等操作。

(5)命令历史(Command History) 该窗口列出在命令窗口执行过的 MATLAB 命令行的历史记录。

用鼠标选中 命令行,击右键可以进行复制、执行(Evaluate Selection) 、删除等操作。

除上述窗口外,MATLAB 常用窗口还有编程器窗口、图形窗口等。

二、数据和变量1.表达式 在命令窗口作一些简单的计算,就如同使用一个功能强大的计算器,使用变 量无须预先定义类型。

2

4 例如,设球半径为 r=2,求球的体积 V = πr 3 。

3 >>r=2 %表达式将 2 赋予变量 r r= %系统返回 r 的值 2 >>v=4/3*pi*r^3 %pi 为内置常量 π ,乘方用^表示 v= 33.5103 几个表达式可以写在一行,用分号(; )或逗号(, )分割,用分号(; )使 该表达式运算结果不显示,而逗号(, )则显示结果。

也可以将一个长表达式分 在几行上写,用三点(…)续行。

若需要修改已执行过的命令行,可以在命令历史中找到该命令行复制,再粘 贴至命令窗口修改。

也可以直接使用键盘↑↓调出已执行过的命令行修改。

2.数据显示格式 MATLAB 默认的数据显示格式为短格式(short) :当结果为整数,就作为整 数显示;当结果是实数,以小数点后四位的长度显示。

若结果的有效数字超出一定范围,以科学计数法显示(如 3.2000e-006 表示 3.2 ×10 −6 ) 。

数据显示格式可使 用命令 Format 改变。

例如: >> format long;v %长格式,16 位 v= 33.51032163829112 >> format short;v %短格式 v= 33.5103 >> format rational;v %有理格式,近似分数 v= 6501/194 3.复数 MATLAB 中复数可以如同实数一样,直接输入和计算。

例如: >> a=1+2i;b=5-4*i;c=a/b c= -0.0732 + 0.3415i 4.预定义变量 MATLAB 有一些预定义变量(表 1) ,启动时就已赋值,可以直接使用,如 前我们使用的圆周率 pi 和虚数单位 i. 表 1 常用预定义变量 变量名 说 明 i或j 虚数单位 −1 pi 圆周率 3.14159… eps 浮点数识别精度 2^(-52)= 2.2204 ×10−16 realmin 最小正实数 2.2251× 10−308 realmax 最大正实数 1.7977 × 10308 inf 无穷大3

没有意义的数 预定义变量在工作空间观察不到。

如果预定义变量被用户重新赋值,则原来 的功能暂不能使用。

当这些用户变量被清除(clear)或 MATLAB 重新启动后, 这些功能得以恢复。

5.用户变量 MATLAB 变量名总以字母开头,以字母、数字或下划线组成,区分大小写, 有效字符长度为 63 个。

如 A,a,a1,a_b 都是合法的,且 a 与 A 表示不同变量。

在 Command Window 中使用的变量一旦被赋值,就会携带这个值存在于工作空间, 直到被清除或被赋予新的值。

ans 是系统一个特别的变量名。

若一个表达式运算结果没有赋予任何变量, 系统自动用 ans 存放答案。

例如: >> A=5+4i;b=5-4*i;B=1;A*b %没有定义 A*b 的输出变量 ans = 41 %ans 来接受计算结果,注意这是大写 A 与 小写 b 的乘积,尽管我们可以使用工作空间来查询和清除变量,但使用下列命令 方式更快捷: >> whos %查询 Workspace 中的变量列表 Name Size Bytes Class A 1x1 16 double array (complex) B 1x1 8 double array a 1x1 16 double array (complex) ans 1x1 8 double array b 1x1 16 double array (complex) c 1x1 16 double array (complex) Grand total is 6 elements using 80 bytes >> A %查询变量 A 的值 A= 5.0000 + 4.0000i >> clear A %清除变量 A >> A %再查询 A 的值,已经不存在了 ??? Undefined function or variable 'A'. >> clear %清除 Workspace 中所有变量 >> whos %Workspace 中已没有任何变量了NaN三、数组和矩阵运算MATLAB 基本数据单元是无需指定维数的数组。

数组运算是 MATLAB 最鲜 明的特点,一方面可以使得计算程序简明易读,另一方面可以提高计算速度。

1.数组的输入 最常用的数组是双精度数值数组(double array) 。

一维数组相当于向量,二 维数组相当于矩阵,一维数组可以视为二维数组的特例。

二维数组的第一维称为 “行” ,第二维称为“列” 。

MATLAB 数组无需预先定义维数。

直接输入数组的4

元素,用中括号([])表示一个数组,同行元素间用空格或逗号分隔,不同行间 用分号或回车分隔,例如: >> clear;a=[1,2,3;4,5,6;7,8,9] a= 1 2 3 4 5 6 7 8 9 或 >> a=[1 2 3 %这种方式特别适用于大型矩阵 456 7 8 9] a= 1 2 3 4 5 6 7 8 9 对于等差数列构造的一维数组,可用冒号运算生成,也可用函数 linspace 生 成。

>> b=0:3:10 %初值:增量:终值 b= 0 3 6 9 >> b=0:10 %增量为 1 可省略 b= 0 1 2 3 4 5 6 7 8 9 10 > >b=10:-3:0 %递减 b= 10 7 4 1 >> b=linspace(0,10,4) %将区间[0,10]等分为 4-1=3 份 b= 0 3.3333 6.6667 10.0000 >> length(b) %查询 b 的长度 ans = 4 >> b(3) %查询 b 的第三个元素 ans = 6.6667 >> b([1,end]) %查询 b 的首和尾元素 ans = 0 10 二维数组元素双下标编址按通常方式,单下标编址按列排序。

>> size(a) %查询数组 a 的尺寸 ans = 3 3 >> a(3,2),a(6)5

ans = 8 ans = 8 >> c=a([1 3],[2 3]) %提取 a 的第一、第三行和第二、第三列(分 块矩阵) c= 2 3 8 9 >> d=a(2,:) %提取 a 的第二行 d= 4 5 6 >> a(:) %将 a 所有元素按单下标顺序排为列向量 ans = 1 4 7 2 5 8 3 6 9 一些特殊的二维数组可以用函数产生,例如: >> a=zeros(2,4) %生成 2 行 4 列零矩阵 a= 0 0 0 0 0 0 0 0 >> b=ones(1,4) %生成 1 行 4 列 1 矩阵 b= 1 1 1 1 >> c=[a;b] %拼接 c= 0 0 0 0 0 0 0 0 1 1 1 1 >> c(2,1)=100 %修改部分元素 c= 0 0 0 0 100 0 0 0 1 1 1 1 >> reshape(c,2,6) %按 2 行 6 列重排矩阵元素 ans = 0 1 0 0 1 06

100 0 1 0 0 1 注意:数组下标对应矩阵的行和列,编址一律从 1 开始,不能用 0. 矩阵输入也可用“load”命令从外部数据文件导入 2.数组运算 数组运算是指数组对应元素之间的运算,也称点运算。

矩阵的乘法、乘方和 除法有特殊的数学含义,并不是数组对应元素的运算,所数组乘法、乘方和除法 的运算符前特别加了一个点。

特别要区分数组运算在乘法、乘方和除法上的意义 和表示上与矩阵运算的不同。

表 2 数组运算符 运算 符号 说明 数组加与减 A+B 与 A-B 对应元素之间加减 数乘数组 k*A 或 A*k k 乘 A 的每个元素 数与数组加减 k+A 或 k-A k 加(减)A 的每个元素 数组乘数组 A.*B 点运算只有点乘、点乘方、点除三个,表 示对应元素之间的运算; (.*)是一个整 数组乘方 A.^k,k.^A 体,点(.)不能漏掉, (.)和(*)之间也 数除以数组 k./A 不能有空格 数组除法 左除 A.\B,右除 B./A >> clear;A=[1 -1;0 2];B=[0 1;1 -1]; >> A.*B %注意不是 A*B ans = 0 -1 0 -2 >> A.\B,A./B Warning: Divide by zero. ans = 0 -1.0000 Inf -0.5000 Warning: Divide by zero. ans = Inf -1 0 -2 >> A.^2 ans = 1 1 0 4 >> 1./A Warning: Divide by zero. ans = 1.0000 -1.0000 Inf 0.5000 3.矩阵运算 矩阵是一个二维数组, 所以矩阵的加、 数乘等运算与数组运算是一致的。

减、 但是有两点需要注意:7

(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及 含义不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算 定义,使用点运算符; (2)数与矩阵加减、矩阵除法在数学上是没有意义的,在 MATLAB 中为 简便起见,定义了这两类运算,其含义见表 3. 表 3 矩阵运算符 说明运算 符号 转置 A' 加与减 A+B 与 A-B 同数组运算 数乘矩阵 k*A 或 A*k 同数组运算 矩阵乘法 A*B 矩阵乘方 A^k 数与矩阵加减 k+A 与 k-A k+A 等价于 k*ones(size(A))+A 矩阵除法 左除 A\B, 右除 B/A 它们分别为矩阵方程 AX=B 和 XA=B 的解 >> A=[1 2;3 4];B=[4 3;2 1]; >> 100+A ans = 101 102 103 104 >> A*B,A.*B %注意矩阵运算和数组运算的区别 ans = 8 5 20 13 ans = 4 6 6 4 >> A\B,B/A,A.\B,B./A %注意矩阵运算和数组运算的区别 ans = -6.0000 -5.0000 5.0000 4.0000 ans = -3.5000 2.5000 -2.5000 1.5000 ans = 4.0000 1.5000 0.6667 0.2500 ans = 4.0000 1.5000 0.6667 0.2500 4.数学函数 数组的数学函数也是按每个元素的运算,使用通常的函数符号,常用数学函 数见表 48

函数 sin cos tan cot asin acos sqrt意义 正弦 余弦 正切 余切 反正弦 反余弦 开方表 4 数学函数 函数 fix mod rem abs exp log log10意义 向 0 取整 模余 除法余数 绝对值(模) 指数函数 自然对数 以 10 为底的对数>> A=[4 -1;3 2]; >> B=exp(A) B= 54.5982 0.3679 20.0855 7.3891 >> C=fix(B) C= 54 0 20 7 >> D=sin(C) D= -0.5588 0 0.9129 0.6570 >> E=log(D) Warning: Log of zero. E= -0.5820 + 3.1416i -Inf -0.0911 -0.4201 5.关系与逻辑运算 MATLAB 的关系运算和逻辑运算符都是对于元素的操作,其结果是特殊的 逻辑数组(logical array)表 5, “真”用 1 表示, “假”用 0 表示,而逻辑运算中, 所有非零元素作为 1(真)处理。

表 5 关系运算和逻辑运算 运算符 含义 运算符 含义 < 小于 & 与 <= 小于等于 | 或 > 大于 ~ 非 >= 大于等于 all == 等于 any ~= 不等于 >> A=-2:4,B=4:-1:-2 A= -2 -1 0 1 2 3 4 B= 4 3 2 1 0 -1 -29

>> A>B ans = 0 0 >> A==B ans = 0 0 >> A&B ans = 1 1 >> A|B ans = 1 1 >> find(abs(A)>=2) ans = 1 5 >> any(abs(A)>5) ans = 0 >> all(abs(A)>5) ans = 00011101 0 0 0 %逻辑运算中,所有非零元素作为 1(真)处理 1 0 1 1011 1 1 1 %返回绝对值大于或等于 2 的元素的下标 7 %若存在绝对值大于 5 的元素,返回 16%若所有元素绝对值大于 5,返回 1四、字符串、元胞和结构 字符串、除数值(double)以外,常用的数据类型还有字符(char)、元胞(cell)和结构 (structure),由此进一步组成字符数组(char array)、元胞数组(cell array)和结构 数组(structure array). 1.字符串 MATLAB 字符串用单引号对来标识,其数据类型为字符数组。

>> a1='Hello everyone' a1 = Hello everyone >> a2='各位好' %注意单引号,不是双引号 a2 = 各位好 >> a=[a1,'.',a2,'.'] %字符串拼接 a= Hello everyone.各位好. >> size(a) ans = 1 19 %共 19 个字符 >> double(a) ans =10

Columns 1 through 8 72 101 108 108 111 32 101 118 Columns 9 through 16 101 114 121 111 110 101 46 47351 Columns 17 through 19 52923 47811 46 %中文 ASCII 码很大 >> a=char(ans) a= Hello everyone.各位好. 数字字符串与数值之间也可以用 num2str 和 str2num 转换。

一个数组的元素 要么都是数值,要么都是字符串,数值转换后可以与字符串出现在同一数组中。

>> a=12;b=sqrt(a); >> ['a=',num2str(a),',a 的开方=',num2str(b)] ans = a=12,a 的开方=3.4641 MATLAB 命令可以定义成一个字符串,使用 eval 可以使该字符串所表达的 MATLAB 命令得到执行。

>> fun='x.^2.*sin(x)'; >> x=1;eval(fun) ans = 0.8415 >> x=1:3;eval(fun) ans = 0.8415 3.6372 1.2701 2.元胞和结构 不管是数值数组还是字符数组,其数据结构必须是整齐的。

首先数值和字符 不能混合,其次小数组拼接成大数组时,其尺寸(size)必须相符(agree)。

例如: >> A=['first';'second'] %错误 ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. 将不同类型、不同尺寸的数组,加大括号({}) ,可构成一个元胞。

几个元 胞可以构成元胞数组。

>> Ac1={'first';1:3};Ac2={'second';[1 2;3 4]}; >> Ac=[Ac1,Ac2] Ac = 'first' 'second' [1x3 double] [2x2 double] >> size(Ac) ans = 2 2 >> Ac(2,1) %小括号,查询 Ac 的第二行第一列元素 ans = [1x3 double]11

>> Ac{2,1} 内容 ans =%大括号,查询 Ac 的第二行第一列元素的具体1 2 3 一个结构通过“域”来定义,比元胞更丰富、更灵活。

几个结构可以合成一 个结构数组,但这些结构的域名必须一致。

>> As1.f1='first';As1.f2='second';As2.f1=1:3;As2.f2=[1 2;3 4]; >> As=[As1;As2] As = 2x1 struct array with fields: f1 f2 >> size(As) %注意其 size 结果与元胞数组不同 ans = 2 1 >> As(2,1).f1 ans = 1 2 3 >> As.f1 ans = first ans = 1 2 3 元胞数组与结构数组可以用 struct2cell 和 cell2struct 函数进行适当的转换。

>> Bc=struct2cell(As) %注意结果与 Ac 的不同 Bc = 'first' [1x3 double] 'second' [2x2 double] >> Bs=cell2struct(Ac,{'one','two'},1) %定义域名,并指定取域名的维 Bs = 2x1 struct array with fields: one two 看一看 Workspace 有哪些类型,并观察其字节数。

五、程序设计1.控制流 前面我们用的命令都是顺序结构的,对于复杂的计算,需要循环和分支等复 杂的程序结构。

MATLAB 控制流语法都以 end 结尾。

常用控制流见表 6.12

类型 循环语句循环语句分支语句分支语句中断语句 中断语句 中断语句 中断语句表 6 MATLAB 常用控制流 语法 解释 for 循 环 变 量 = 数 对于循环变量依次取数组中的值, 循环执行命令 组, 组直到循环变量遍历数组。

数组最常用的形式是 命令组 初值:增量:终值 end while 条件式, 当条件式满足,循环执行命令组直到条件不满 命令组 足。

使用 While 语句要注意避免出现死循环 end if 条件 1, 如果条件式 1 满足,则执行命令组 1,且结束该 命令组 1; 语句;否则检查条件式 2,若满足则执行命令组 elesif 条件 2, 2,且结束该语句;……;若所有条件式都不满 命令组 2; 足,则执行命令组 k,并结束该语句。

最常用的 ……; 格式是 else, if 条件式 命令组 k; 命令组 end end switch 分支变量 若分支变量的取值 1,则执行命令组 1,且结束 case 值 1, 该语句;若分支变量的取值 2,则执行命令组 2, 命令组 1; 且结束该语句;……若分支变量不取所列出的 值,则执行命令组 k case 值 2, 命令组 2; ……; otherwise 命令组 k; end pause 暂停执行,直到击键盘,pause(n)为暂停 n 秒后 再继续 break 中断执行,用在循环语句内表示跳出循环 return 中断执行该程序,回到主调函数或命令窗口 error(字符串) 提示错误并显示字符说明100例 1 计算 s = ∑1 2 n =1 n>> clear;s=0; >> for n=1:100 s=s+1/n/n; end >> s s= 1.6350 2.M 脚本文件 复杂程序结构在命令窗口调试保存都不方便, 所以进行复杂的运算大都使用 程序文件。

从命令窗口用命令“edit”就进入 MATLAB 的程序编辑器窗口,用13

以编写用户的 M 文件。

M 文件可分为两类:M 脚本文件和 M 函数文件。

将多条 MATLAB 语句写在编辑器中,并以.m 文件保存在适当的目录中(这 个目录须为 MATLAB 的搜索目录) ,就得到一个 M 脚本。

如我们将例 1 中的几 条语句写在编辑器中, 保存为 naega_1,然后在命令窗口执行: >>naega_1 s= 1.6350 执行 M 脚本文件也可以在程序编辑器的 Debug 菜单选 Run。

使用编辑器也 可打开和修改 M 文件、观察变量值、调试程序等。

注意: 文件名一律以字母开头,以字母、数字或下划线组成, 注意:M 文件名一律以字母开头,以字母、数字或下划线组成,不要含有 空格、减号等,并要防止它与系统的变量名、 函数名冲突。

例如 空格、减号等,并要防止它与系统的变量名、系统内部的 M 函数名冲突 1.m,ega-1.m,ega.1.m 都是不合法的。

另外,别忘了每次修改程序后都要存盘。

3.M 函数文件 M 脚本文件没有参数传递功能,当我们需要修改程序中的某些变量值,必 须修改 M 文件。

而 M 函数文件使得我们可以进行参数传递。

M 函数文件以 function 开头,格式如下: function 输出变量=函数名(输入变量) 语句 例如,写函数文件: % M 函数 naega_1f.m function s=f(m) s=0; for n=1:m s=s+1/n/n; end 保存为 naega_1f.m,在命令窗口执行: >>clear;naega_1f(100),naega_1f(1000) ans= 1.6350 ans= 1.6439 注意:在 MATLAB 中,使用 M 函数是以该函数的磁盘文件主名调用,而不 是文件中的函数名,但为了增强程序可读性,最好两者同名。

M 函数不能像 M 脚本那样在编辑器窗口用 Debug\run 执行,因为 M 函数必 须给予输入参数值。

M 函数常常被 M 脚本或其他 M 函数调用。

4.函数句柄和内嵌函数 M 函数除了直接用其函数名调用之外,也可以作为一个参数调用。

调用时 函数除了直接用其函数名调用之外,也可以作为一个参数调用。

使用所谓函数句柄(handle)方式。

方式。

用于执行函数的参数方式。

使用所谓函数句柄 方式 MATLAB 命令 feval 用于执行函数的参数方式。

例如: 例如: >>fname=@naega_1f;feval(fname,1000) ans= 1.6439 比较简单的函数表达式可以不用写成外部 M 函数,而是用更简捷的内嵌14

(inline)函数方式。

inline 的使用格式如下: fun=inline(expr,arg1,agr2,…) expr 为函数表达式字符串,arg1,arg2,….为自变量 名字符串 例如: >> fname=inline('sum(1./(1:n).^2)','n') fname = Inline function: fname(n) = sum(1./(1:n).^2) >> feval(fname,1000) ans = 1.6439 5.其他 (1)注释 为了增强程序的可读性,程序中常常需要注释语句。

M 文件开头一般应有 一段注释。

注释用%开头,顶格书写,对本行后面字符起作用,说明文件的功能 和使用方法。

注释语句不参与运算,只起说明作用。

使用 Help 可看到。

注释符 (%)也常用于程序调试。

(2)对话 Input 在交互式执行程序中用于提示键盘输入,Disp 用于屏幕显示。

例 2 编写一个脚本文件,使对键盘提示输入的向量求得元素总和。

% M 文件 naega_2.m %用途:本程序提示输入一个向量,并求得元素总和 %用法:输入向量用中括号,元素之间用逗号 clear A; A=input('Enter a vector:'); d=sum(A); disp(['The sum is',num2str(d)]); 然后在命令窗口执行: >>naega_2 Enter a vector:[1 2 3 4] The sum is 10 >>help naega_2 用途:本程序提示输入一个向量,并求得元素总和 用法:输入向量用中括号,元素之间用逗号 (4)子函数 M 函数中允许使用子函数。

函数中第一个 function 为主函数, M 其他 function 为子函数。

子函数只能被同一文件的主函数和其他子函数调用,不能被外部函数 调用。

(5)全程变量与局部变量 M 函数中所有变量为局部变量,而脚本文件中所有变量同命令窗口的命令 一样都是全程变量。

M 函数变量值传递主要通过其输入输出变量,但也可以用 global 定义全程变量。

它的意义与普通全程变量稍有区别,只对有定义的文件起 作用。

(6)nargin 与 nargout15

在 M 函数内,nargin 表示该函数的输入变量个数,nargout 表示该函数的输 出变量个数。

(7)提高速度 MATLAB 软件主要缺点是执行循环语句时速度慢。

好的 M 程序文件应尽量 使用数组运算和内部函数,少用循环语句,以提高运算速度。

尽管 MATLAB 数 组无须定义尺寸,但经常改变数组尺寸会影响速度,采取一些预分配方法可提高 运算速度。

另外,减少运行过程中不必要的结果显示也可提高速度。

(8)强行中断 使用快捷键 Ctrl+C 可以强行中断程序运行。

例 3 编写一个 M 函数,对于任意输入的向量 x,可以计算下列分段函数值 构成的向量: x2 , x > 1  f ( x) =  1, −1 < x ≤ 1 3 + 2 x, x ≤ −1  %M 函数 naega_3a.m function y=naega_3a(x) n=length(x); for i=1:n if x(i)>1 y(i)=x(i)^2; elseif x(i)>-1 y(i)=1; else y(i)=3+2*x(i); end end %M 函数 naega_3b.m function y=naega_3b(x) y=zeros(size(x)); k1=find(x>1);y(k1)=x(k1).^2; k2=find(x>-1&x<=1);y(k2)=1; k3=find(x<=-1);y(k3)=3+2*x(k3); 程序 naega_3a.m 是按通常思路所编程序,可读性好,但速度慢。

程序 naeag_3b.m 是根据 MATLAB 数组运算设计的程序,程序简短且速度快,数组维 数越高,效率改进越显著。

下列程序中 tic 表示计时开始,toc 为读数。

>>clear;tic;x=-2:0.0005:2;y=naega_3a(x);toc %时间因电脑不同而有区别 elapsed_time = 1.0400 >> clear;tic;x=-2:0.0005:2;y=naega_3b(x);toc elapsed_time = 0.440016

六、作图表 7 常用作图命令和函数 主题词 含 义 主题词 含 义 plot 基本二维图形 clabel 等高线高度标志 fplot 一元函数图像 grid 格栅 ezplot 画二维曲线的符号命令 hold 图形保持 plot3 空间曲线 axis 定制坐标轴 meshgrid 网格数据生成 view 改变视点 mesh 网面图 subplot 子图 surf 曲面图 figure 新图形窗口 contour 等高线图 clf 清除图形 contour3 三维等高线图 close 关闭图形窗口 title 标题 ylabel y 轴说明 xlabel x 轴说明 zlabel z 轴说明 1.曲线图 作出以数据(x(i),y(i))为节点的折线图, 其中 x,y 为同长度的向量 plot(x,y) fplot('fun',[a,b]) 作出函数 fun 在区间[a,b]上的函数图,fun 可以是 M 函数主名, 也可是字符串 ezplot(fun,lims) 绘制字符串 fun(可是显函数、隐函数或参数方程)指定的函 数 空间曲线图,其中 x,y,z 为同长度向量 plot3(x,y,z) >> plot([1 4 2 5],[1 3 -1 2]) 依次将(1,1)(4,3)(2,-1)(5,2)连接起来得一条折线(图 2) , , ,图2 图形显示在图形窗口。

在图形窗口可以使用 File 菜单保存(Save)为 M 文件, 导出(Export)为图形文件。

也可利用图形窗口 Edit 菜单 Copy figure 作为图片复制 到剪贴板,从而进一步粘贴到 Word 或其他应用程序中。

图形的线型、标记、颜色均可根据要求设定。

常用的见表 817

b g r m y k颜色 蓝(默认) 绿 红 洋红 青 黑表 8 图形元素设定 线型 实线(默认) : 虚线 -. 点划线 -划线. o x + *标记 无标记(默认) 点 圈 叉 十字 星例 4 两个一元函数 y = x3 − x − 1 和 y = xfplot('x^3-x-1',[-1,2]); hold on; x=-1:0.2:2; y=abs(x).^2.*sin(5*x); plot(x,y,':ro'); hold off;0.2sin(5 x) 在区间-1

% M 文件 naega_4.m %在作下一幅图时保留已有图像 %注意数组运算 %释放 hold on2.曲面图 [x,y]=meshgrid(xa,ya)mesh(x,y,z)surf(x,y,z) contour(x,y,z) contour3(x,y,z) 例如: >> xa=6:8;ya=1:4; >> [x,y]=meshgrid(xa,ya);当 xa,ya 分别为 m 维和 n 维行向量,得到 x 和 y 均为 n 行 m 列矩阵。

meshgrid 常用于生成 X-Y 平面上的网格 数据 绘制网面图,是最基本的曲面图形命令,其中 x,y,z 是 同阶矩阵,表示曲面三维数据 绘制曲面图,与 mesh 用法类似 绘制等高线图,与 mesh 用法类似 绘制三维等高线图,与 mesh 用法类似%生成 x,y 各自的节点 %生成 X-Y 面上网格18

>> z=x.^2+y.^2; %计算 X-Y 面上各网格点的 z 轴高度 >> mesh(x,y,z) >> [x,y,z] ans = 6 7 8 1 1 1 37 50 65 6 7 8 2 2 2 40 53 68 6 7 8 3 3 3 45 58 73 6 7 8 4 4 4 52 65 80 这 3 组数据构成空间网面的 12 格点坐标例5二元函数图 z = x exp(− x 2 − y 2 ) %M 文件 naega_5.m % close 关闭当前图形窗口clear;close; xa=-2:0.2:2;ya=xa; [x,y]=meshgrid(xa,ya); z=x.*exp(-x.^2-y.^2); mesh(x,y,z);pause surf(x,y,z);pause contour(x,y,z);pause contour(x,y,z,[0.1 0.1]);%网格图,pause 暂停直到按任意键 %网面图 %等高线图 %z=0.1 的一条等高线19

3.图形说明和定制 title('字符串 字符串') 字符串 图形标题说明 xlabel,ylabel,zlabel 用法类似于 title,分别说明坐标轴 x,y,z , 显示/不显示格栅 grid on/off 显示 不显示格栅 box on/off 使用/不使用坐标框 使用 不使用坐标框 hold on/off 保留/释放现有 释放现有图形 保留 释放现有图形 axis off/on 不显示/显示坐标轴 不显示 显示坐标轴 axis([a,b,c,d]) 定制二维坐标轴范围 a

七、在线帮助和文件管理1.在线帮助 help 显示 MATLAB 主题目录 help 子目录名 显示子目录中所有 MATLAB 系统命令及函数 help 命令或函数 显示该命令或函数的说明部分 lookfor 关键字 显示与该关键字有关的命令和函数 显示 M 文件程序代码 type M 文件名 which M 文件名 显示指定的 MATLAB 文件的路径 demo 演示 MATLAB 功能 MATLAB 提供了两种形式的帮助系统:纯文本帮助、HTML 帮助。

纯文本 帮助是最常用、最经济的在线帮助,不需要另外安装,是边用边学计算机软件的 最有效的方法。

>>help %显示 MATLAB 及其工具箱的主题目录, 其中有 graph3d >>help graph3d %显示 3 维图形主题目录内所有 M 命令和函数,其中有 mesh >>help mesh %显示 M 函数 mesh 的用法说明,即其 M 文件的注释部 分 >>which mesh %显示 M 函数 mesh 所在的目录 >>type mesh %显示函数 mesh 的 M 文件程序代码 >>lookfor surface %显示 MATLAB 搜索路径中凡是第一行注释含 surface 的 M 命令和函数,其中有函数 mesh 若我们现在要解决一个线性规划问题,但不知道怎么用 MATLAB 求解,可 利用线性规划的关键字 programming: >>lookfor programming 可以找到有关 programming 的很多命令,其中有一个 LINPROG 是线性规划 (Linear programming).再用: >>help linprog 可以得到使用 linprog 解线性规划问题用法的详细说明。

进一步使用: >>type linprog 可以看到 linprog 的 M 文件程序代码。

2.文件和目录管理 MATLAB 文件有 M、Mat、Mex 等。

其中 M 文件是最重要的,MATLAB 绝 大多数内部命令和函数是 M 文件,用户自编的程序一般也是 M 文件。

MATLAB 只执行当前目录(Current Directory)和搜索路径(写在文件 pathdef.m)中的 M 文 件。

初学者在 M 文件的保存上经常出现下列几种错误: (1)文件修改后没有保存; (2)文件保存的目录不在当前目录和 MATLAB 搜索路径中; (3)文件名使用了常数或内存中的变量,如 1.m,pi.m 等; (4)文件名用了减号、空格等非法字符,如 eg2-1.m,eg2.1.m 等; ( 5 ) 文 件 名 与 MATLAB 内 建 (build-in) 函 数 和 其 他 内 部 函 数 冲 突 , 如 mesh.m,fitfun.m 等。

21