3变量、数据与函数 1.3.1变量 像任何其它计算机语言一样, MATLA B也有变量名规则。变量名必须是不含有空格的 单个词。变量命名规则如下: 变量名区分字母大小写,如 Items, Items,ims及 ITEMS都是不同的变量。 变量名最多不超过19个字符。第19个字符之后的字符将被忽略, howaboutthisvariablename只能表示为 howaboutthisvariabl 变量名必须以字母打头,之后可以是任意字母、数字或下划线,如x51488, a bc d e 标点符号在 MATLAB中具有特殊含义,所以变量名中不允许使用标点符号。 除了这些命名规则, MATLAB还有几个特殊变量,见表1-3 表1-3 MATLAB特殊变量表 殊变量 取值 用于结果的缺省变量名 圆周率 eps 计算机是最小数,当和1相加就产生一个比1大的数 浮点运算数 无穷大,如1/0 不定量,如0/0 i(和 I=J 所有函数的输入变量数目 nargout 所有函数的输出变量数目 realmin 最小可用正实数 realmax 最大可用正实数 表1-3中的特殊变量在启动 MATLAB之后,自动赋予表中取值。如果定义了相同名字 的变量,原始特殊取值将会丢失,直到清除所有变量或重新启动 MATLAB。一般来讲,应 当尽量避免重新定义特殊变量 13.2注释和标点 百分号后所有的文字为注释。注释语句不能执行。如键入 x=4.5%在y=5时,%注释该x取值是在y=5时有效 显示 多条命令可以放在同一行,中间用逗号或分号隔开。逗号要求显示结果,分号禁止显示 结果。如键入 x=4.5;y=5,f=1.9 显示 在PC机上运行时,可以随时按下CTRL+C键中断 MATLAB的运行 1.3.3复数表示 MATLAB对复数不需要特殊处理,用i、j和sr(-x)(X是任意整数、实数)表示。复数 的数学运算可以写成与实数同样的形式。如键入 aF=1-2i, b=sqrt(-2), c=a+b 显示 MATLAB还可以用rea,imag,abs, angle命令来表示一个复数的实部、虚部、幅值和相 角。如 1.34数学函数
1 1.3 变量、数据与函数 1.3.1 变量 像任何其它计算机语言一样,MATLAB 也有变量名规则。变量名必须是不含有空格的 单个词。变量命名规则如下: 变量名区分字母大小写,如 ltems, items, itEms 及 ITEMS 都是不同的变量。 变量名最多不超过 19 个字符。第 19 个字符之后的字符将被忽略,如 howaboutthisvariablename 只能表示为 howaboutthisvariabl。 变量名必须以字母打头,之后可以是任意字母、数字或下划线,如 x51488,a_b_c_d_e。 标点符号在 MATLAB 中具有特殊含义,所以变量名中不允许使用标点符号。 除了这些命名规则,MATLAB 还有几个特殊变量,见表 1-3。 表 1-3 MATLAB 特殊变量表 特殊变量 取值 ans pi eps flops Inf NnN 用于结果的缺省变量名 圆周率 计算机是最小数,当和 1 相加就产生一个比 1 大的数 浮点运算数 无穷大,如 1/0 不定量,如 0/0 i(和)j i = j = −1 nargin nargout realmin realmax 所有函数的输入变量数目 所有函数的输出变量数目 最小可用正实数 最大可用正实数 表 1-3 中的特殊变量在启动 MATLAB 之后,自动赋予表中取值。如果定义了相同名字 的变量,原始特殊取值将会丢失,直到清除所有变量或重新启动 MATLAB。一般来讲,应 当尽量避免重新定义特殊变量。 1.3.2 注释和标点 百分号后所有的文字为注释。注释语句不能执行。如键入 x=4.5 %在 y=5 时,%注释该 x 取值是在 y=5 时有效 显示 多条命令可以放在同一行,中间用逗号或分号隔开。逗号要求显示结果,分号禁止显示 结果。如键入 x=4.5; y=5, f=1.9 显示 在 PC 机上运行时,可以随时按下 CTRL+C 键中断 MATLAB 的运行。 1.3.3 复数表示 MATLAB 对复数不需要特殊处理,用 i、j 和 sqrt(-x)(X 是任意整数、实数)表示。复数 的数学运算可以写成与实数同样的形式。如键入 a=1-2i, b=sqrt(-2), c=a+b 显示 MATLAB 还可以用 real, imag, abs, angle 命令来表示一个复数的实部、虚部、幅值和相 角。如 1.3.4 数学函数
MATLAB所支持的常用数学函数见到表1-4。注意, MATLAB只对孤度操作 表1-4常用函数 命令 ‖说明 绝对值或复数的辐值 反余弦 acosh(x) 反双曲余弦 angle(x) 四象限内取复数相角 asin(x) 反正弦 反双曲正弦 atan(x) 反正切 atan2(x, y) 四象限内反正切 atanh(x) 反双曲正切 ceil(x) 对+∞方向取整数 conj(x) 复数共轭 弦 双曲余弦 指数函数e fix(x) 对零方向取整数 floor(x) 对-∞方向取整数 gcd(x, y) 整数x和y的最大公约数 imag(x) 复数虚部 Icm(x, y) 整数x和y的最小公倍数 自然对数 loglO(x) 常用对数 real(x) 复数实部 除后余数;rem(x,y)给出xy的余数 四舍五入到最接近的整数 gn(x) 符号函数;返回自变量的符号,例如sign(1,5=1,sign(-2.4)=-1,sigh(0)=0 sin(x) 正弦 双曲正弦 X 平方根 tan(x) 正切 anh(x) 双曲正切 1.4数据的输入与输出 14.1save与load命令 MATLAB可以通过计算机文件来保存或加载数据。Fle菜单的 Save Workspace As…菜 单命令打开一个标准的文件对象框来保存所有当前变量。保存变量并不会将其从 MATLAB 工作空间中删除。类似地,Fle菜单的 Load Workspace As…菜单命令打开一个对话框,在 工作空间中加载以前保存的变量。加载 MATLAB工作空间中已有的同名变量将会把变量值 改为从文件中加载的值 如果Fle菜单方法不可行或不能满足用户需要, MATLAB还有save和load两个命令, 可以提供更大的灵活性。Save命令允许自己选择文件格式保存一个或多个变量,而load命 令将加载自己选择文件格式保存的文件,取出所需的变量。对于大多数用户, MATLAB命
2 MATLAB 所支持的常用数学函数见到表 1-4。注意,MATLAB 只对孤度操作。 表 1-4 常用函数 命令 说明 abs(x) acos(x) acosh(x) angle(x) asin(x) asinh(x) atan(x) atan2(x, y) atanh(x) ceil(x) conj(x) cos(x) cosh(x) exp(x) fix(x) floor(x) gcd(x, y) imag(x) lcm(x, y) log(x) log10(x) real(x) rem(x, y) round(x) sign(x) sin(x) sinh(x) sqrt(x) tan(x) tanh(x) 绝对值或复数的辐值 反余弦 反双曲余弦 四象限内取复数相角 反正弦 反双曲正弦 反正切 四象限内反正切 反双曲正切 对+ 方向取整数 复数共轭 余弦 双曲余弦 指数函数 e x 对零方向取整数 对- 方向取整数 整数 x 和 y 的最大公约数 复数虚部 整数 x 和 y 的最小公倍数 自然对数 常用对数 复数实部 除后余数;rem(x, y)给出 x/y 的余数 四舍五入到最接近的整数 符号函数;返回自变量的符号,例如 sign(1, 5)=1, sign(-2.4)=-1, sigh(0)=0 正弦 双曲正弦 平方根 正切 双曲正切 1.4 数据的输入与输出 1.4.1 save 与 load 命令 MATLAB 可以通过计算机文件来保存或加载数据。File 菜单的 Save Workspace As…菜 单命令打开一个标准的文件对象框来保存所有当前变量。保存变量并不会将其从 MATLAB 工作空间中删除。类似地,File 菜单的 Load Workspace As…菜单命令打开一个对话框,在 工作空间中加载以前保存的变量。加载 MATLAB 工作空间中已有的同名变量将会把变量值 改为从文件中加载的值。 如果 File 菜单方法不可行或不能满足用户需要,MATLAB 还有 save 和 load 两个命令, 可以提供更大的灵活性。Save 命令允许自己选择文件格式保存一个或多个变量,而 load 命 令将加载自己选择文件格式保存的文件,取出所需的变量。对于大多数用户,MATLAB 命
令load和save为装载和存储数据提供了足够的工具。利用以扩展名为mat结尾的文件名 load和save假定数据是以与软件平台无关的二进制格式保存,或者用称之为fat的简单的 ASCⅡ文件格式保存。例如 (1)指令save以二进制格式将所有变量存入到 matlab. mat文件中。 (2)指令 save data以二进制格式将所有变量存入到date.mat文件中。 (3)指令 save dataxy z以二进制格式将变量x,y,z存入到data,mat文件中 指令 load data将 data. Mat中的所有变量加载到工作空间中,供用户使用。 142低级文件输入输出 当 flat ASCⅡ或.mat这两种格式还不够时, MATLAB提供了基于C语言的低级文件I/O 命令,可以读出你所知道的任意文件格式。表1-5列出了 MATLAB中基本的低级文件I/O 命令 表1-5MA∏LAB低级文件IO命令 命令 说明 fclose 关闭文件 测试文件结束 查询文件IO的错误状态 读文件的行,忽略回行符 读文件的行,包括回行符 打开文件 按照格式要求把数据写到文件或屏幕上 从文件中读二进制数据 freind 返回到文件开始 按照格式要求从文件中读数据 fseek 设置文件位置指示符 ftell 获取文件位置指示符 fwrite 把二进制数据写到文件里 表1-5的命令都可以通过help功能得到应用的详细解释。这里只对部分常用的命令进 行解释。比如打开文件函数 fopen()的语句格式为 文件句柄= - fopen(文件名,文件类型) 其中文件句柄为一个整数,供从该文件中读取数据时使用。文件名应该是用单引号括起来的 字符串,而文件类型可以由一个字符串来描述,其意义和C语言的几乎一致。如它可以采 用‘r’来表示一个只读型的文件。而‘a’表示一个可添加的文件。例如,如果想打开一个 名为 myfile,xdy的文件,但不想改变其中的内容,只想从中读出一些数据,则可以把它按 个只读型文件打开,这样就要使用下面的命令: myf= fopen( myfile.xdy’,‘r’) 如果该文件存在,则返回一个整数myf句柄,可以调用 fread()或 fscanf()等命令 从中读取数据。其中, fread()命令从该文件中按照二进制格式读取数据, fscanf命令按照 用户给定的格式读取数据。如 S= fscanf( myf,%s)%按文字型读取变量,赋值于S A= = fscanf(myf,“%d)%读5个十进制数 fprintf命令的格式举例如下: fprintf (fid, %6.2f %12&,, y): 其中,fd是被写数据文件的句柄,单引号‘中间的部分是写数据的格式要求,与C语言 的数据格式相同。每一种不同格式要用%分开,小数点前、后的数字表示数据的整数和小数
3 令 load 和 save 为装载和存储数据提供了足够的工具。利用以扩展名为.mat 结尾的文件名, load 和 save 假定数据是以与软件平台无关的二进制格式保存,或者用称之为 flat 的简单的 ASCⅡ文件格式保存。例如: (1)指令 save 以二进制格式将所有变量存入到 matlab. mat 文件中。 (2)指令 save data 以二进制格式将所有变量存入到 date. mat 文件中。 (3)指令 save data x y z 以二进制格式将变量 x, y, z 存入到 data, mat 文件中。 指令 load data 将 data. Mat 中的所有变量加载到工作空间中,供用户使用。 1.4.2 低级文件输入输出 当 flat ASCⅡ或. mat 这两种格式还不够时,MATLAB 提供了基于 C 语言的低级文件 I/O 命令,可以读出你所知道的任意文件格式。表 1-5 列出了 MATLAB 中基本的低级文件 I/O 命令。 表 1-5 MATLAB 低级文件 I/O 命令 命令 说明 fclose feof ferror fgetl fgets fopen fprintf fread frewind fscanf fseek ftell fwrite 关闭文件 测试文件结束 查询文件 I/O 的错误状态 读文件的行,忽略回行符 读文件的行,包括回行符 打开文件 按照格式要求把数据写到文件或屏幕上 从文件中读二进制数据 返回到文件开始 按照格式要求从文件中读数据 设置文件位置指示符 获取文件位置指示符 把二进制数据写到文件里 表 1-5 的命令都可以通过 help 功能得到应用的详细解释。这里只对部分常用的命令进 行解释。比如打开文件函数 fopen( )的语句格式为 文件句柄=fopen(文件名,文件类型) 其中文件句柄为一个整数,供从该文件中读取数据时使用。文件名应该是用单引号括起来的 字符串,而文件类型可以由一个字符串来描述,其意义和 C 语言的几乎一致。如它可以采 用‘r’来表示一个只读型的文件。而‘a’表示一个可添加的文件。例如,如果想打开一个 名为 myfile, xdy 的文件,但不想改变其中的内容,只想从中读出一些数据,则可以把它按 一个只读型文件打开,这样就要使用下面的命令: myf=fopen(‘myfile. xdy’,‘r’) 如果该文件存在,则返回一个整数 myf 句柄,可以调用 fread()或 fscanf()等命令 从中读取数据。其中,fread()命令从该文件中按照二进制格式读取数据,fscanf 命令按照 用户给定的格式读取数据。如 S=fscanf(myf, ‘%s’) %按文字型读取变量,赋值于 S A=fscanf(myf, ‘%5d’) %读 5 个十进制数 fprintf 命令的格式举例如下: fprintf (fid, ‘%6.2f %12.8e\n’, y); 其中,fid 是被写数据文件的句柄,单引号‘’中间的部分是写数据的格式要求,与 C 语言 的数据格式相同。每一种不同格式要用%分开,小数点前、后的数字表示数据的整数和小数
部分的位数。最后的变量是被写的数据变量名。 下面给出一个例题说明用低级文件读出数据的过程。设已有数据文件Test.tst,内容如 a d I 2.00 05372 00707 02525 1.00 09308 04892 01294 运行文件 Inout. m内容如下 input and output a data file fopen( test. txt'’,r’)%打开test.m文件,作为只读文件,句柄f fprintf(f2,“%sn,%95fn%95fn%495)n’,p)%写p,数据》令一 p=fscanf(n,%c’) %读取全部数据,按照数据原有格式,赋值于p f2= fopen(name.m’,‘w)%打开 name文件,作为写文件,句柄 %第一行为文字型,15位:第2,3行为实数型,5位小数;第4行写4个实数型数据 fclose(‘ll’) %关闭所有的文件 运行该文件时,键入 Inout 屏幕显示结果 结果文件为name.m,内容为 05372 00707 02525 09308 04892 01294 得到的结果文件内容与输入文件内容相同。 注意, fsconf命令读入的数据按文字型变量存储,里面的数据不能用来进行加法、乘法 等运算。需要运算的数据可以用M文件形式输入,参看有关M文件的章节。 1.5数组与矩阵运算 由于数据组可以定义为只有一行(或一列),因此,所有有关矩阵的运算都可以用于数 组运算,除非有区别,今后不再区分数组与矩阵 1.5.1矩阵表示与块操作 1.矩阵表达式 数组和矩阵是 MATLAB的基础。 MATLAB的数组与矩阵用表示,程序可以自行解读 矩阵的行、列标志和元素。定义矩阵的原则是:矩阵元素间用空格或逗号隔开,行用分号隔 开。例如,键入 a[123:456],b=789 2.矩阵转置 矩阵的转置用A‘表示,例如,键入 %求矩阵转置 显示结果 若矩阵为复数矩阵,求转置时首先对矩阵元素进行转置,然后再逐项求取其共轭数值
4 部分的位数。最后的变量是被写的数据变量名。 下面给出一个例题说明用低级文件读出数据的过程。设已有数据文件 Test. tst,内容如 下: a_d_l 3.0 0.6 -2.00 .05372 .00707 -.02525 -1.00 .09308 .04892 .01294 运行文件 inout.m 内容如下: % input and output a data file fl=fopen(‘test. txt’,‘r’) %打开 test. m 文件,作为只读文件,句柄 fl p=fscanf(fl,‘%c’) %读取全部数据,按照数据原有格式,赋值于 p f2=fopen(‘name. m’,‘w’) %打开 name.m 文件,作为写文件,句柄 f2 fprintf(f2,‘%s15\n, %9.5f\n, %9.5f\n, %4(9.5f)\n’,p) %写 p,数据格式: %第一行为文字型,15 位;第 2,3 行为实数型,5 位小数;第 4 行写 4 个实数型数据 fclose(‘all’) %关闭所有的文件 运行该文件时,键入 inout 屏幕显示结果 结果文件为 name. m,内容为 a_d_l 3.0 0.6 -2.00 .05372 .00707 -.02525 -1.00 .09308 .04892 .01294 得到的结果文件内容与输入文件内容相同。 注意,fsconf 命令读入的数据按文字型变量存储,里面的数据不能用来进行加法、乘法 等运算。需要运算的数据可以用 M 文件形式输入,参看有关 M 文件的章节。 1.5 数组与矩阵运算 由于数据组可以定义为只有一行(或一列),因此,所有有关矩阵的运算都可以用于数 组运算,除非有区别,今后不再区分数组与矩阵。 1.5.1 矩阵表示与块操作 1.矩阵表达式 数组和矩阵是 MATLAB 的基础。MATLAB 的数组与矩阵用[]表示,程序可以自行解读 矩阵的行、列标志和元素。定义矩阵的原则是:矩阵元素间用空格或逗号隔开,行用分号隔 开。例如,键入 a=[1 2 3;4 5 6],b=[7 8 9] 显示 2.矩阵转置 矩阵的转置用 A‘表示,例如,键入 aa=a‘ % 求矩阵转置 显示结果 若矩阵为复数矩阵,求转置时首先对矩阵元素进行转置,然后再逐项求取其共轭数值
这种转置方式又称为 Hermit转置。例如,已知 5.000+1.0001-2.000+10000i 4.0000 +3.0001 键入 %求 Hermit转置 结果为 3.矩阵大小 MA∏LAB具有矩阵大小的查询功能。查询矩阵的大小可以用表1-6中的命令 表1-6矩阵大小查询 说明 Who 显示工作空间中存在的变量及其大小 返回A矩阵的行数和列数 length(A) 返回A矩阵的最大行、列数 find(a) 给出特殊要求的矩阵元素的行、列标记 Size命令 该函数的调用格式为n,m]=size(A)。其中A为要测试的矩阵名,而返回的两个参数n和 分别为A矩阵的行数和列数。例如键入 [n,m=sie(A)%查询A的行、列数 可得 length命令 如果要测试的变量是一个数组而不是矩阵时,仍可以由size()函数来得出大小。更简 洁地,可以使用 length()函数来求出。该函数的调用格式为n= length(A),其中A为要 测试的数组名,返回的n为A数组的元素个数。如果A为矩阵,则将返回A的行、列数的 最大值,即该函数等效于max(size(A)。例如键入 n=length(A)%查询A的最大维数 可得 ·find命令 用find命令, MATLAB可以进行特殊要求的矩阵元素定位。如键入 [ij}=fnd(A>3)%指出矩阵元素中大于3的元素的行、列位置 显示结果 该结果表明,在A矩阵中,第2行的第1,2,3列元素均满足条件要求。又如,定义 矩阵: 2 k= find(abs(xl)>1)%找出绝对值大于1的元素 结果表明,x1矩阵中,第1,5个元素满足要求。 4.矩阵的块操作 MA∏LAB中提供了很多简便、智能的方式,可以对矩阵进行元素更改、插入子块、提 取子块、重排子块、扩大维数等操作。这里,重要的是冒号“:”的应用。在 MATLAB中, 冒号“:”表示“全部”。如已知
5 这种转置方式又称为 Hermit 转置。例如,已知 x= 5.000+1.000i -2.000+1.0000i 4.0000 +3.000i 键入 xx=x’ % 求 Hermit 转置 结果为 3.矩阵大小 MATLAB 具有矩阵大小的查询功能。查询矩阵的大小可以用表 1-6 中的命令。 表 1-6 矩阵大小查询 命令 说明 Whos size(A) length(A) find(A) 显示工作空间中存在的变量及其大小 返回 A 矩阵的行数和列数 返回 A 矩阵的最大行、列数 给出特殊要求的矩阵元素的行、列标记 ·size 命令 该函数的调用格式为[n,m]=size(A)。其中 A 为要测试的矩阵名,而返回的两个参数 n 和 m 分别为 A 矩阵的行数和列数。例如键入 [n,m]=size(A) %查询 A 的行、列数 可得 ·length 命令 如果要测试的变量是一个数组而不是矩阵时,仍可以由 size()函数来得出大小。更简 洁地,可以使用 length()函数来求出。该函数的调用格式为 n= length(A),其中 A 为要 测试的数组名,返回的 n 为 A 数组的元素个数。如果 A 为矩阵,则将返回 A 的行、列数的 最大值,即该函数等效于 max(size(A))。例如键入 n=length(A) %查询 A 的最大维数 可得 ·find 命令 用 find 命令,MATLAB 可以进行特殊要求的矩阵元素定位。如键入 [i,j]=find(A>3) % 指出矩阵元素中大于 3 的元素的行、列位置 显示结果 该结果表明,在 A 矩阵中,第 2 行的第 1,2,3 列元素均满足条件要求。又如,定义 x1 矩阵: x1 2 -1 0 1 2 k=find(abs(x1)>1) %找出绝对值大于 1 的元素 k= 1 5 结果表明,x1 矩阵中,第 1,5 个元素满足要求。 4.矩阵的块操作 MATLAB 中提供了很多简便、智能的方式,可以对矩阵进行元素更改、插入子块、提 取子块、重排子块、扩大维数等操作。这里,重要的是冒号“:”的应用。在 MATLAB 中, 冒号“:”表示“全部”。如已知 A=