矩阵是数字的二维数组。
在MATLAB中,您可以通过在每行中以逗号或空格分隔的数字输入元素并使用分号标记每行的结尾来创建矩阵。
例如,让我们创建一个4×5矩阵
3.1 加减法
您可以添加或减去矩阵。两个操作数矩阵必须具有相同数量的行和列
3.2 除法
您可以使用左()或右(/)除法运算符对两个矩阵进行除法。两个操作数矩阵必须具有相同数量的行和列。
3.3 标量运算
当您将一个矩阵加,减,乘或除以一个数字时,这称为scalar operation(标量运算)
标量运算产生一个行数和列数相同的新矩阵,原始矩阵中的每个元素都与这个数相加、相减、相乘或相除
3.4 矩阵转置
转置操作可切换矩阵中的行和列。它由单引号(')表示。
3.5 矩阵串联
您可以连接两个矩阵以创建更大的矩阵。这对方括号“ []”是串联运算符。
MATLAB允许两种类型的串联
- 水平串联
- 垂直串联
当您通过使用逗号分隔两个矩阵来连接它们时,它们只是水平附加。这称为水平串联。
或者,如果使用分号将两个矩阵分开,则它们将垂直附加。这称为垂直串联。
3.6 矩阵乘法
假设两个矩阵A和B。如果A是一个m x n矩阵,B是一个n x p矩阵,它们可以相乘得到一个m x n矩阵C。只有当A中的列数n等于B中的行数n时,矩阵相乘才可能。
在矩阵乘法中,将第一矩阵中的行元素与第二矩阵中的相应列相乘。
所得矩阵C中第(i,j)个位置的每个元素是第一矩阵第i行的元素与第二矩阵第j列中相应元素的乘积之和。
MATLAB中的矩阵乘法是通过使用*运算符执行的。
3.7 行列式
矩阵的行列式是使用MATLAB的det函数计算的。 矩阵A的行列式由det(A)给出。
3.8 逆矩阵
矩阵A的逆由A -1表示,使得以下关系式成立:
矩阵的逆并不总是存在的。如果矩阵的行列式为零,则逆不存在,矩阵是奇异的。
使用inv函数可计算MATLAB中矩阵的逆。 矩阵A的逆由inv(A)给出。
MATLAB 软件提供了四个用于生成基本矩阵的函数。
幻方矩阵:magic square是一个正方形,当其元素按行,列或对角线相加时,会产生相同的和。
创建数组的方式类似于创建矩阵的方式
多维数组
具有两个以上维的数组在MATLAB中称为多维数组。MATLAB中的多维数组是常规二维矩阵的扩展。
通常,要生成多维数组,我们首先创建一个二维数组并将其扩展。
例如,让我们创建一个二维数组a
使用快速生成数组的方法生成三维数组
我们还可以使用cat()函数来构建多维数组。它沿着指定的维度连接一个数组列表
语法:
参数:
- :要创建的维度
- :要串联的数组,数量根据维度数量来决定
单元数组是索引单元格的数组,其中每个单元格可以存储不同维度和数据类型的数组。
cell函数用于创建单元格数组。单元格功能的语法是:
参数:
C是单元数组
dim是标量整数或整数向量,用于指定单元格数组C的维数
dim1,...,dimN是指定C维数的标量整数,N代表总维度数
obj是以下其中之一
- Java数组或对象
- .NET类型System.String或System.Object的数组
有两种方法可以引用单元格数组的元素-
- 将索引括在第一个方括号()中,以引用单元格集
- 将索引括在大括号{}中,以引用单个单元格中的数据
当您将索引括在第一个括号中时,它指的是单元格的集合。
圆括号中的单元格数组索引是指单元格集
colon(😃是在MATLAB中最有用的运算符之一。它用于创建向量,下标数组和指定迭代。
如果要创建包含1到10的整数的行向量,请编写
示例
MATLAB执行该语句并返回包含1到10的整数的行向量
如果要指定一个增量值而不是一个值,例如
示例
让我们再举一个实例
示例
您可以使用冒号运算符创建索引向量,以选择行,列或数组元素。
下表描述了它的用途(让我们有一个矩阵A)-
创建一个脚本文件并在其中键入以下代码-
示例
MATLAB支持各种数字类,包括有符号和无符号整数以及单精度和双精度浮点数。默认情况下,MATLAB将所有数值存储为双精度浮点数
您可以选择将任何数字或数字数组存储为整数或单精度数字
所有数值类型都支持基本数组运算和数学运算
函数intmax()和intmin()返回可以用所有类型的整数表示的最大值和最小值
这两个函数都将整数数据类型作为参数,例如或,并返回可以用整数数据类型表示的最大值和最小值
函数realmax()和realmin()返回可以用浮点数表示的最大值和最小值
当使用参数“ single”调用两个函数时,这两个函数都返回您可以用单精度数据类型表示的最大值和最小值;当使用参数“ double”调用时,这两个函数均返回您可以用参数表示的最大值和最小值。双精度数据类型
在MATLAB中创建字符串非常简单。实际上,我们已经使用了很多次
3.1 水平组合字符串
到目前为止,我们讨论的字符串是一维字符数组。但是,我们需要存储更多。我们需要在程序中存储更多维度的文本数据。这是通过创建矩形字符数组来实现的
创建矩形字符数组的最简单方法是根据需要垂直或水平连接两个或多个一维字符数组。
您可以通过以下两种方式垂直组合字符串
- 使用MATLAB连接运算符[],并用分号(;)分隔每一行。请注意,在此方法中,每行必须包含相同数量的字符。对于长度不同的字符串,应根据需要使用空格字符填充。
- 使用char函数。如果字符串的长度不同,char会用尾随空格填充较短的字符串,以便每行具有相同的字符数
您可以通过以下两种方式水平组合字符串
- 使用MATLAB串联运算符[],并用逗号或空格分隔输入字符串。此方法保留输入数组中的所有尾随空格
- 使用字符串串联函数 strcat,此方法删除输入中的尾随空格
3.2 合成元胞数组
从前面的讨论中可以明显看出,合并长度不同的字符串可能会很麻烦,因为数组中的所有字符串都必须具有相同的长度。我们在字符串的末尾使用了空格来使它们的长度相等
但是,组合字符串的更有效方法是将结果数组转换为单元格数组
MATLAB单元数组可以在数组中保存不同大小和类型的数据。单元数组提供了一种更灵活的方式来存储长度可变的字符串
cellstr函数将字符数组转换为字符串的单元格数组
函数是一起执行任务的一组语句。在MATLAB中,函数是在单独的文件中定义的。文件名和函数名应该相同。
函数在其自己的工作空间(也称为本地工作空间)中对变量进行操作,与在MATLAB命令提示符下访问的工作空间(称为基本工作空间)不同。
函数可以接受多个输入参数,并且可以返回多个输出参数。
函数语句的语法是:
实例:
以下名为mymax的函数应写入名为mymax.m的文件中。它以五个数字作为参数,并返回最大的数字
创建一个函数文件,命名mymax.m,并在其中输入以下代码:
调用函数:
匿名函数就像传统编程语言中的内联函数一样,是在单个MATLAB语句中定义的。它由一个MATLAB表达式以及任意数量的输入和输出参数组成
您可以直接在MATLAB命令行或在函数或脚本中定义匿名函数
这样,您可以创建简单的功能,而不必为其创建文件
从表达式创建匿名函数的语法是:
必须在文件中定义除匿名函数以外的任何函数。每个函数文件都包含一个首先出现的必需主函数,以及在主函数之后并由其使用的任意数量的可选子函数
可以从定义主文件的文件外部(从命令行或其他函数)调用主函数,但是不能从命令行或其他函数在功能文件外部调用子函数
子函数仅对主函数和定义它们的函数文件中的其他子函数可见
示例:
让我们写一个名为quadratic的函数来计算一个二次方程的根。该函数包含三个输入:二次系数、线性系数和常数项。它将回归根。
函数文件quadratic.m将包含主函数quadratic和子函数disc,后者计算判别式。
创建一个函数文件 quadratic.m 并在其中输入以下代码:
外部调用函数:
您可以在另一个函数的主体内定义函数。这些称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组件。
嵌套函数在另一个函数的范围内定义,它们共享对包含函数的工作区的访问。
嵌套函数遵循以下语法:
实例:
外部调用函数:
私有函数是仅对有限的一组其他函数可见的主函数。如果不想公开函数function(s)的实现,可以将它们创建为私有函数
私有函数位于具有特殊名称 Private 的子文件夹中
它们仅对父文件夹中的函数可见
实例:
让我们重写quadratic函数。不过,这一次,disc函数计算判别式,将是一个私有函数
在工作目录文件夹中创建一个名为 private 的子文件夹,在其中存储以下函数文件 disc.m
在您的工作目录中创建一个函数 quadratic3.m ,并在其中输入以下代码:
全局变量可以由多个函数共享。为此,您需要在所有函数中将变量声明为全局变量
如果要从基本工作空间访问该变量,请在命令行中声明该变量
全局声明必须在变量实际在函数中使用之前发生。最好将大写字母用作全局变量的名称,以将其与其他变量区分开
实例:
让我们创建一个名为average.m的函数文件,并在其中输入以下代码:
同时,创建一个脚本文件并在其中键入以下代码:
实例1:读取图片信息
实例2:读取类似于Excel文件
importdata函数是一个高级函数。MATLAB中的底层文件I/O函数允许对文件的读写数据进行最大程度的控制。但是,这些函数需要更详细的文件信息才能有效地工作。
MATLAB提供以下功能用于文本数据文件的底层导入
- fscanf函数读取文本或ASCII文件中的格式化数据
- fgetl和fgets的时间,其中,一个换行字符的每一行分离功能读取的文件的一行
- fread函数读取字节或位级别的数据流
数据:
我们将从该文件导入数据并显示此数据。采取以下步骤
-
使用fopen函数打开文件并获取文件标识符
-
用来描述文件中的数据格式说明符,例如' %s'表示字符串,' %d'表示整数,或' %f'表示浮点数
-
要跳过文件中的文字字符,请在格式说明中包括它们。要跳过数据字段,请在说明符中使用星号('*')。
例如,要读取标头并返回M的单个值,我们这样写
-
默认情况下,fscanf根据我们的格式说明读取数据,直到找不到与数据匹配的内容,或者到达文件末尾为止。在这里,我们将使用for循环读取3组数据,并且每次将读取7行和5列
-
我们将在工作区中创建一个名为mydata的结构,以存储从文件中读取的数据。这种结构有三个字段-time, month, and raindata数组
数据导出(或输出)在 MATLAB 的意思是写入文件。MATLAB 允许您在另一个读取 ASCII 文件的应用程序中使用您的数据。为此,MATLAB 提供了几个数据导出选项。
您可以创建以下类型的文件-
- 数组中的矩形、分隔的ASCII数据文件。
- 击键的日记(或日志)文件和结果文本输出。
- 使用底层函数(如fprintf)的专用ASCII文件。
- MEX文件,用于访问以特定文本文件格式写入的C / C ++或Fortran例程。
除此之外,您还可以将数据导出到电子表格。
有两种方法可以将数字数组导出为定界的ASCII数据文件-
-
使用save函数并指定-ascii限定符
-
my_data.out是创建的带分隔符的ASCII数据文件,num_array是数字数组,并且 −ascii是说明符
-
-
使用dlmwrite函数
-
my_data.out是创建的带分隔符的ASCII数据文件,num_array是数字数组, dlm_char是分隔符
-
实例:
记文件是您的MATLAB会话的活动日志。日记功能可以在磁盘文件中创建会话的精确副本,但不包括图形。
要打开日记函数,请输入:
(可选)您可以提供日志文件的名称,例如:
关闭日记函数:
您可以在文本编辑器中打开日记文件
到目前为止,我们已经导出了数字数组。但是,您可能需要创建其他文本文件,包括数字和字符数据的组合,非矩形输出文件或具有非ASCII编码方案的文件。为此,MATLAB提供了底层fprintf函数
与在底层I / O文件活动中一样,在导出之前,您需要使用fopen函数打开或创建文件并获取文件标识符。默认情况下,fopen打开文件以进行只读访问。您应指定写入或追加的权限,例如“ w”或“ a”
处理完文件后,需要使用fclose(fid)函数将其关闭
示例:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/47275.html