MATLAB M-Files
我们一直强调MATLAB是一个功能强大的编程语言及交互式计算环境,之前学习的内容中,我们学会了在 MATLAB 命令提示符下输入命令,而且我们主要是把MATLAB环境作为一个计算器使用。其实,MATLAB 还允许写入到一个文件中的一系列命令和执行文件完整的单元,就好比是写一个函数,然后调用它。
在开始接下来的学习内容前,我们要先了解在 MATLAB 中的 M 文件有两种类型,详细内容请往下看:
MATLAB的 M 文件
MATLAB允许写两个程序文件:
-
脚本 - 脚本文件 .m 扩展程序文件。在这些文件中写的一系列命令,想一起执行。脚本不接受输入和不返回任何输出。他们在工作区中的数据操作。
-
函数 - 函数文件 .m 扩展程序文件。函数可以接受输入和返回输出。内部变量是本地的函数。
.m 文件不一定要使用 MATLAB 编辑器创建,其他任何的文本编辑器也是可以的。在本节中,我们将讨论的脚本文件。MATLAB 命令和函数调用的脚本文件包含多个连续的行。可以运行一个脚本,在命令行中键入其名称。
MATLAB创建并运行脚本文件
创建脚本文件,需要使用文本编辑器。可以打开 MATLAB 编辑器,可使用两个方法:
-
使用命令提示符
-
使用IDE
如果是在命令提示符下使用命令提示符下,键入编辑。这将打开编辑器。可以直接键入编辑,然后在文件名( .m 扩展程序文件名)
edit Or edit <filename>
上面的命令将在默认情况下,MATLAB 目录中创建文件。如果想存储在一个特定的文件夹中的所有程序文件,那么一定要提供整个路径。
让我们创建一个文件夹名为 progs。在命令提示符处键入以下命令(>>):
mkdir progs % create directory progs under default directory chdir progs % changing the current directory to progs edit prog1.m % creating an m file named prog1.m
如果首次创建的文件,MATLAB 会提示您进行确认。单击“Yes”。
另外,如果使用的是IDE,选择 NEW -> Script。这也打开编辑器,并创建一个文件名为命名。输入代码后可以命名并保存文件。
在编辑器中输入下面的代码:
NoOfStudents = 6000; TeachingStaff = 150; NonTeachingStaff = 20; Total = NoOfStudents + TeachingStaff ... + NonTeachingStaff; disp(Total);
创建和保存文件后,可以运行在两个方面:
-
编辑器窗口中单击“Run”按钮或
-
只要在命令提示符下键入文件名(不含扩展名):>> prog1
命令窗口提示显示的结果是:
6170
例子
我们在MATLAB中创建一个脚本文件,然后输入下面的代码:
a = 5; b = 7; c = a + b d = c + sin(b) e = 5 * d f = exp(-d)
编译并执行上述代码,会产生以下结果:
c = 12 d = 12.6570 e = 63.2849 f = 3.1852e-06
MATLAB数据类型
默认情况下,MATLAB ®存储所有数值变量为双精度浮点值。其他数据类型存储文本,整数或单精度值或单个变量中相关数据的组合。
MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。
如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。
例如:
total = 136;
上述语句创建一个名为total
的1x1
矩阵,并将值136
存储在其中。
MATLAB数据类型
MATLAB提供15
种基本数据类型,分别是8种整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是0
到0
,并且是可以到任何大小的矩阵或数组。
下表显示了MATLAB中最常用的数据类型:
数据类型 | 描述 |
---|---|
int8 | 8 位有符号整数 |
uint8 | 8 位无符号整数 |
int16 | 16 位有符号整数 |
uint16 | 16 位无符号整数 |
int32 | 32 位有符号整数 |
uint32 | 32 位无符号整数 |
int64 | 64 位有符号整数 |
uint64 | 64 位无符号整数 |
single | 单精度数值数据 |
double | 双精度数值数据 |
logical | 逻辑值为1 或0 ,分别代表true 和false |
char | 字符数据(字符串作为字符向量存储) |
单元格阵列 | 索引单元阵列,每个都能够存储不同维数和数据类型的数组 |
结构体 | C型结构,每个结构具有能够存储不同维数和数据类型的数组的命名字段 |
函数处理 | 指向一个函数的指针 |
用户类 | 用户定义的类构造的对象 |
Java类 | 从Java类构造的对象 |
示例
使用以下代码创建脚本文件(datatype1.m):
str = 'Hello World!'
n = 2345
d = double(n)
un = uint32(789.50)
rn = 5678.92347
c = int32(rn)
当上述代码被编译和执行时,它产生以下结果:
Trial>> datatype1
str =
'Hello World!'
n =
2345
d =
2345
un =
uint32
790
rn =
5.6789e+03
c =
int32
5679
数据类型转换
MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 下表显示了数据类型转换函数:
函数 | 描述说明 |
---|---|
char | 转换为字符数组(字符串) |
int2str | 将整数数据转换为字符串 |
mat2str | 将矩阵转换为字符串 |
num2str | 将数字转换为字符串 |
str2double | 将字符串转换为双精度值 |
str2num | 将字符串转换为数字 |
native2unicode | 将数字字节转换为Unicode字符 |
unicode2native | 将Unicode字符转换为数字字节 |
base2dec | 将基数N字符串转换为十进制数 |
bin2dec | 将二进制数字串转换为十进制数 |
dec2base | 将十进制转换为字符串中的N数字 |
dec2bin | 将十进制转换为字符串中的二进制数 |
dec2hex | 将十进制转换为十六进制数字 |
hex2dec | 将十六进制数字字符串转换为十进制数 |
hex2num | 将十六进制数字字符串转换为双精度数字 |
num2hex | 将单数转换为IEEE十六进制字符串 |
cell2mat | 将单元格数组转换为数组 |
cell2struct | 将单元格数组转换为结构数组 |
cellstr | 从字符数组创建字符串数组 |
mat2cell | 将数组转换为具有潜在不同大小的单元格的单元阵列 |
num2cell | 将数组转换为具有一致大小的单元格的单元阵列 |
struct2cell | 将结构转换为单元格数组 |
数据类型确定
MATLAB提供了用于识别变量数据类型的各种函数。
下表提供了确定变量数据类型的函数:
函数 | 描述说明 |
---|---|
is | 检测状态 |
isa | 确定输入是否是指定类的对象 |
iscell | 确定输入是单元格数组 |
iscellstr | 确定输入是字符串的单元格数组 |
ischar | 确定项目是否是字符数组 |
isfield | 确定输入是否是结构数组字段 |
isfloat | 确定输入是否为浮点数组 |
ishghandle | 确定是否用于处理图形对象句柄 |
isinteger | 确定输入是否为整数数组 |
isjava | 确定输入是否为Java对象 |
islogical | 确定输入是否为逻辑数组 |
isnumeric | 确定输入是否是数字数组 |
isobject | 确定输入是否为MATLAB对象 |
isreal | 检查输入是否为实数数组 |
isscalar | 确定输入是否为标量 |
isstr | 确定输入是否是字符数组 |
isstruct | 确定输入是否是结构数组 |
isvector | 确定输入是否为向量 |
class | 确定对象的类 |
validateattributes | 检查数组的有效性 |
whos | 在工作区中列出变量,其大小和类型 |
示例
使用以下代码创建脚本文件:
x = 3
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
x = 23.54
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
x = [1 2 3]
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
x = 'Hello'
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
运行文件后,产生以下结果:
x = 3
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x = 1177/50
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x =
1 2 3
ans = 0
ans = 1
ans = 1
ans = 0
x = Hello
ans = 0
ans = 0
ans = 1
ans = 0
ans = 0
都看到这了,给个免费的赞吧!!!