没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第1章 MATLAB 7.0 基本编程
MATLAB 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、
矩阵运算的能力和丰富的画图功能,还可以像 C 语言、FORTRAN 等计算机高级语言一样进行程
序设计,编写扩展名为.m 的 M 文件,实现各种复杂的运算,这使得 MATLAB 在科研中的应用更
加深入,常常作为系统仿真的工具应用。MATLAB 提供文件编辑器和编译器, 这为用户带来
了方便,事实上,MATLAB 自带的许多函数就是 M 文件函数,用户也可利用
M 文件来生成和扩充自己的函数库。
所谓 M 文件,简单来说就是用户把要实现的命令写在一个以.m 作为扩展名的文件中, 然
后由 MATLAB 系统进行解释,最后运行出结果。由此可见 MATLAB 具有强大的可开发性和可扩
展性。另外,由于 MATLAB 是由 C 语言开发而成的,因此 M 文件的语法规则与 C 语言几乎一
样,简单易学。
本章将讨论 MATLAB 中编程的规则和注意事项,并给出很多典型的例程帮助读者尽快
熟悉。
4.1 脚本和函数
M 文件有函数(Functions)和脚本(Scripts)两种格式。二者相同之处在于它们都是以
m 作为扩展名的文本文件,不进入命令窗口,而是由文本编辑器来创建外部文本文件。但是
两者在语法和使用上略有区别。
4.1.1
函数
MATLAB 中许多常用的函数(如 sqrt、inv 和 abs 等)都是函数式M 文件,使用时,MATLAB获取
传递给它的变量,利用操作系统所给的输入,运算得到要求的结果,然后返回这些结果。函数文件类
似于一个黑箱,由函数执行的命令以及这些命令所创建的中间变量都是隐含的。运算过程中的
中间变量都是局部变量(除特别声明外),存放在函数本身的工作空间内,不会和 MATLAB 基本工
作空间(Base workspace)的变量相互覆盖,对用户来说,可见的只是输入和输出,因此易于使
程序模块化,特别适合于大型程序代码。
下面通过一个函数的例子来说明其结构。
此函数的第一行为函数定义行,以 function 语句作为引导,定义了函数名称(function1, 需
要注意的是函数名和文件名必须相同)、输入自变量(value,调用此函数时指定此变量的
>>type function1.m
function average=function1(value)
average=sum(value)/length(value);
MATLAB 7.0 从入门到精
通
值,类似于 C 语言的形式参数)和输出自变量(average,函数执行完毕返回的结果)。function 为关
键词,说明此 M 文件为函数。第二行则为函数主体,规范函数的运算过程,并指出输出自变量的值
。若调用此函数,可输入以下命令:
此外,还可在函数定义行下加入注解,以%开头,即函数的在线帮助,若在 MATLAB
输入“help 函数主文件名”,即可看到这些帮助,需要注意的是,在线帮助和 M 函数定义行之间可
以有空行,但是在线帮助的各行之间不应有空行。示例代码如下:
如果函数中有注释,代码设置如下:
则在线帮助只有第一行:
以上的例子只是为了说明函数的性质和用法,有关编程的方法、具体问题以及典型例子
会在后面的章节介绍。
4.1.2
脚本
脚本是一个扩展名为.m 的文件,其中包含了 MATLAB 的各种命令,与批处理文件很类似
,在 MATLAB 命令窗口下直接输入此文件的主文件名,MATLAB 可逐一执行在此文件内的所
有命令,和在命令窗口逐行输入这些命令一样。脚本式 M 文件运行产生的所有变量都是
–93–
>>help function2
function2 A simple function with a single help line
>>type function2.m
function average=function2(vector)
%function2 A simple function with a single help line
%usage of this function
%"output" is the average of the input vector "input".
%Roger Jang,19991123.
average=sum(vector)/length(vector); %计算平均值
>>type function2.m
function average=function2(vector)
%function2 A simple function with a single help line
%usage of this function
%"output" is the average of the input vector "input".
%Roger Jang,19991123.
average=sum(vector)/length(vector); %计算平均值
>>help function2
function2 A simple function with a single help line
"output" is the average of the input vector "input".
>>value=[1 2 3];
>>average=function1(value)
average=
2
MATLAB 7.0 从入门到精
通
全局变量,运行脚本后,所产生的所有变量都驻留在 MATLAB 基本工作空间内,只要用户不
使用 clear 命令加以清除,且 MATLAB 指令窗口不关闭,这些变量将一直保存。基本空间随
MATLAB 的启动而产生,在关闭 MATLAB 软件时该基本空间被删除。
例如,假设当前目录下有一个脚本 M 文件,可用 type 命令显示其内容如下:
在上面的示例代码中以%开头的行是注释,在命令窗口执行 solver 命令,即可得到方程
组的解,具体代码如下:
结合上例,下面对 M 文件必须遵循的规则及两种类型的异同做简要介绍。
(1) 从函数名必须与文件名相同。
(2) 脚本式 M 文件没有输入参数或输出参数,而函数式 M 文件有输入参数和输出参数。
(3) 函数可以有零个或多个输入和输出变量。函数 nargin 和 nargout 包含输入和输出变量
的个数。在运行时,可以按少于 M 文件中规定的输入和输出变量的个数进行函数调用,但不能多
于这个标称值。
从运行上看,与脚本文件不同的是,函数文件被调用时,MATLAB 会专门为它开辟一个临时
工作空间,称为函数工作空间(Function workspace),用来存放中间变量,当执行完函数文
件的最后一条命令或者遇到 return 时就结束该函数文件的运行,同时该临时函数空间及其所有
的中间变量将被清除。函数工作空间相对于基本空间是临时的、独立的,在 MATLAB 运行期间,
可以产生任意多个临时函数空间。
(4) 在 M 文件中,包括脚本和函数,到第一个非注释行为止的注释行是帮助文本,当需要帮助
时,返回该文本,通常用来说明文件的功能和用法。
(5) 函数 M 文件中的所有变量除特殊声明外都是局部变量,而脚本中的变量都是全局变
量。
(6) 变量的命名可以包括字母、数字和下划线,但必须是以字母开头。并且在 M 文件设计中
是区分大小写的。变量的长度不能超过系统函数 namelengthmax 所规定的值。
(7) 假设在函数文件中发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都
存放于此函数空间中,而不是存在基本工作空间中。
通常 M 文件是文本文件,所以可使用一般的文本编辑器编辑 M 文件,存储时以文本模式
存储。此外,MATLAB 内部自带了 M 文件编辑器与编译器,可选择 MATLAB 命令窗口上的
file/new 子菜单,然后选择下一级子菜单中的 M-file 子菜单,就进入了 M 文件编辑/编译器,
–94–
>>type solver.m
%solver.m
%used to solve A*X=b
%where A=[-1.5 1 2;3 -1 1;-1 3 5], b=[2.5;5;8].
A=[-1.5 1 2;3 -1 1;-1 3 5];
b=[2.5;5;8];
X=A\b
>>solver
X=
0.7500
-0.6250
2.1250
MATLAB 7.0 从入门到精
通
如图 4-1 所示。它是一个集编辑与调试两种功能于一体的工具环境。进行代码编辑时,它可以
用不同的颜色来显示注解、关键词、字符串和一般程序代码,使用非常方便。在书写完 M 文件后
,也可以像一般的程序设计语言一样,对 M 文件进行调试、运行。
图 4-1 M 文件编辑器和编译器
4.1.3
子函数与私有目录
一个 M 文件可以包含一个以上的函数,其中有一个主函数,其他为子函数。这些子函数只能
被同一文件中的函数(主函数或其他子函数)调用,但是不能被其他文件的函数调用。在一个
M 文件中,主函数必须出现在最上方,其后可接上任意数目的子函数,而且子函数的次序可随意。
同一文件的主函数、子函数的工作空间都是彼此独立的,各函数间的信息可通过输入输出宗
量、全局变量或跨空间指令传递。
此外,可以在某一目录中建立一个自己命名的私有目录来存放相关的函数,例如在 work 目录下
建立一个 rscode 目录,则 work 中的 M 文件(无论是脚本还是函数)即可调用 rscode 下的任何
函数,而不必再定义其他搜寻路径。在 rscode 下的函数,只能被其父目录的函数所调用而不能
被其他目录下的函数调用。
当 M 文件中需要调用某一个函数时,MATLAB 是按照以下顺序来搜寻的:
� 检查此函数是否是子函数;
� 检查此函数是否为私有目录的函数;
� 从所设定的搜寻路径搜索此函数。
搜索过程中,只要找到与第一个文件名相符的函数就会立即取用而停止搜索。
4.1.4
P 码文件
P 码是伪代码 Psedocode 的简写,一个 M 文件首次被调用时,MATLAB 将首先对该 M
文件进行语法分析,并把生成的相应内部伪代码(P 码)存放在内存中。此后当再次调用该
M 文件时,将直接运行该文件在内存中的 P 码文件而不会对原码文件重复进行语法分析。P 码
文件和原码文件具有相同的文件名,但其扩展名为“.p”。并且其运行速度要高于原码文件,但是对
于规模不大的文件,用户一般察觉不到这种速度上的优势。
–95–
MATLAB 7.0 从入门到精
通
尤其在 MATLAB 环境中,假如存在同名的 P 码和原码文件,则当该文件名被调用时, 被
执行的肯定是 P 码文件。
P 码文件不是只有当 M 文件被调用时才可产生,也可被预先生成。这种功能可以用作代码保
护的手段,生成 P 码文件后,其他用户可以使用该代码,但是无法看到代码的内容。具体操作如
下:
如果要在内存中对 P 码文件进行操作,可键入以下命令:
4.2 MATLAB 中的变量和语句
MATLAB 能识别一般常用的加、减、乘、除和幂等运算,对于简单的计算可以在命令窗口中输
入表达式后,按 Enter 键即可完成。MATLAB 会将运算结果存入默认变量 ans 中,并显示其结
果(如果表达式后加上分号“;”,则不会显示),当然用户也可设定自己的变量。与
C 语言不同的是,MATLAB 中的变量是不需要事先定义的。
MATLAB 的主要功能虽然是数值运算,但是它也是一个完整的程序语言,有各种语句格式和
语法规则。下面就进行详细介绍。
4.2.1
变量类型
与 C 语言的区别是,在用 M 语言编写程序的过程中,变量不需要事先定义。但 MATLAB 中的
变量也有自己的命名规则,即必须以字母开头,之后可以是任意字母、数字或下划线, 不能
有空格;变量名区分大小写;在 MATLAB 7.0 中,变量名不能超过 63 个字符,第 63 个字符之
后的部分将被忽略。
除了上述命名规则外,MATLAB 还包括一些特殊的变量,如表 4-1 所示。
表 4-1 MATLAB 中的特殊变量
变量名称
变量含义
ans
MATLAB 中默认变量
pi
圆周率
eps
计算机中的最小数
inf
无穷大
NaN
不定值,如 0/0
i(j)
复数中的虚数单位
nargin
所用函数的输入变量数目
nargout
所用函数的输出变量数目
realmin
最小可用正实数
realmax
最大可用正实数
用户定义的变量有局部变量和全局变量两种类型。每一个函数在运行时,均占用单独的
–96–
inmem %罗列出内存中的所有P 码文件
clear filename %清除内存中的filename.pP 码文件
clear functions %清除内存中的所有P 码文件
pcode filename %在当前目录下生成filename.p
pcode filename – inplace %在filename.m 所在目录下生成filename.p
剩余35页未读,继续阅读
资源评论
蚁库
- 粉丝: 31
- 资源: 99
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功