- Matlab语法(二)
- 九、 矩阵
- 1、 创建矩阵
- 2、 操作矩阵
- 3、 矩阵运算
- 3.1 加减法
- 3.2 除法
- 3.3 标量运算
- 3.4 矩阵转置
- 3.5 矩阵串联
- 3.6 矩阵乘法
- 3.7 行列式
- 3.8 逆矩阵
- 4、 生成矩阵
- 生成矩阵
- 十、 数组
- 1、 创建数组
- 2、 数组函数
- 3、 数组排序
- 4、 单元数组
- 5、 访问单元数组
- 十一、 冒号
- 十二、 数值
- 1、 类型转换
- 2、 整型最值
- 3、 浮点最值
- 十三、 字符串
- 1、 创建字符串
- 2、 字符串函数
- 3、 字符串拼接
- 3.1 水平组合字符串
- 3.2 合成元胞数组
- 4、 查找替换
- 5、 比较字符串
- 十四、 函数
- 1、 创建
- 2、 匿名函数
- 3、 子函数
- 4、 嵌套函数
- 5、 私有函数
- 6、 全局变量
- 十五、 数据导入
- 1、 importdata
- 2、 底层方法
- 十六、 数据输出
- 1、 基础
- 2、 日记文件
- 3、 底层方法
- 九、 矩阵
矩阵是数字的二维数组。
在MATLAB中,您可以通过在每行中以逗号或空格分隔的数字输入元素并使用分号标记每行的结尾来创建矩阵。
例如,让我们创建一个4×5矩阵
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
2、 操作矩阵
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] % 创建一个 4 x 5 矩阵
a_34 = a(3, 4); % 获取第三行第四列的元素
fprintf("(3, 4): %d\n", a_34); % 展示元素
% initval:step:endval / initval:endval / :
a_24_35 = a(2:4, 3:5); % 获取矩阵中2-4行 3-5列的数据,并组成一个新的矩阵
a_24_35
a(:, :) % 遍历矩阵
3、 矩阵运算
3.1 加减法
您可以添加或减去矩阵。两个操作数矩阵必须具有相同数量的行和列
a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a + b
d = a - b
3.2 除法
您可以使用左(\)或右(/)除法运算符对两个矩阵进行除法。两个操作数矩阵必须具有相同数量的行和列。
a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a / b % 右除 A / B = A * (inv(B))
d = a \ b % 左除 A \ B = inv(A) * B
3.3 标量运算
当您将一个矩阵加,减,乘或除以一个数字时,这称为scalar operation(标量运算)
标量运算产生一个行数和列数相同的新矩阵,原始矩阵中的每个元素都与这个数相加、相减、相乘或相除
a = [ 10 12 23 ; 14 8 6; 27 8 9];
b = 2;
c = a + b
d = a - b
e = a * b
f = a / b
3.4 矩阵转置
转置操作可切换矩阵中的行和列。它由单引号(')表示。
a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = a'
3.5 矩阵串联
您可以连接两个矩阵以创建更大的矩阵。这对方括号“ []”是串联运算符。
MATLAB允许两种类型的串联
- 水平串联
- 垂直串联
当您通过使用逗号分隔两个矩阵来连接它们时,它们只是水平附加。这称为水平串联。
或者,如果使用分号将两个矩阵分开,则它们将垂直附加。这称为垂直串联。
a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = [ 12 31 45 ; 8 0 -9; 45 2 11]
c = [a, b] # 水平串联
d = [a; b] # 垂直串联
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中的矩阵乘法是通过使用*运算符执行的。
a = [ 1 2 3; 2 3 4; 1 2 5]
b = [ 2 1 3 ; 5 0 -2; 2 3 -1]
prod = a * b
3.7 行列式
矩阵的行列式是使用MATLAB的det函数计算的。 矩阵A的行列式由det(A)给出。
a = [ 1 2 3; 2 3 4; 1 2 5]
det(a)
3.8 逆矩阵
矩阵A的逆由A -1表示,使得以下关系式成立:
\[AA^{-1}= A^{-1}A = 1 \]矩阵的逆并不总是存在的。如果矩阵的行列式为零,则逆不存在,矩阵是奇异的。
使用inv函数可计算MATLAB中矩阵的逆。 矩阵A的逆由inv(A)给出。
a = [ 1 2 3; 2 3 4; 1 2 5]
inv(a)
4、 生成矩阵
生成矩阵
MATLAB 软件提供了四个用于生成基本矩阵的函数。
zeros
ones
全部为 1
rand
均匀分布的随机元素
randn
正态分布的随机元素
zeros(5); % 创建全为0的 5 x 5 矩阵
ones(4, 3); % 创建全为1的 4 x 3 矩阵
eye(4); % 创建一个 4 x 4 的单位矩阵
rand(3, 5); # 创建一个随机数字的矩阵
magic(5); % 创建幻方矩阵
十、 数组 1、 创建数组幻方矩阵:magic square是一个正方形,当其元素按行,列或对角线相加时,会产生相同的和。
创建数组的方式类似于创建矩阵的方式
a = [7 9 5; 6 1 9; 4 3 2];
b = zeros(5); % 创建一个5x5矩阵
多维数组
具有两个以上维的数组在MATLAB中称为多维数组。MATLAB中的多维数组是常规二维矩阵的扩展。
通常,要生成多维数组,我们首先创建一个二维数组并将其扩展。
例如,让我们创建一个二维数组a
a = [7 9 5; 6 1 9; 4 3 2]; % 创建一个二维的数组
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9] % 使得a变成一个三维数组
使用快速生成数组的方法生成三维数组
b = rand(4,3,2) % 生成一个 4 x 3 x 2 的三维数组
我们还可以使用cat()函数来构建多维数组。它沿着指定的维度连接一个数组列表
语法:B = cat(dim, A1, A2...)
参数:
dim
:要创建的维度A1
:要串联的数组,数量根据维度数量来决定
a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0]) % 创建一个三维数组
2、 数组函数
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; % 创建一个向量
length(x) % 输出向量的长度
y = rand(3, 4, 5, 2); % 创建一个 3 x 4 x 5 x 2 的随机四维矩阵
ndims(y) % 判断矩阵的维度
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; % 创建一个数组
numel(s) % 获取数组里面的元素个数
% 矩阵移位
a = [1 2 3; 4 5 6; 7 8 9] % 创建一个原始数组
b = circshift(a,1) % 行向下移一位
c = circshift(a,[1 -1]) % 行向下移一位,列向左移一位
3、 数组排序
v = [ 23 45 12 9 5 0 19 17] % 创建一个向量
sort(v) % 进行排序
m = [2 6 4; 5 3 9; 2 0 1] % 创建一个 3 x 3 的矩阵
sort(m, 1) % 给列进行排序
sort(m, 2) % 给行进行排序
4、 单元数组
单元数组是索引单元格的数组,其中每个单元格可以存储不同维度和数据类型的数组。
cell函数用于创建单元格数组。单元格功能的语法是:
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
参数:
C是单元数组
dim是标量整数或整数向量,用于指定单元格数组C的维数
dim1,...,dimN是指定C维数的标量整数,N代表总维度数
obj是以下其中之一
- Java数组或对象
- .NET类型System.String或System.Object的数组
c = cell(2, 5); % 创建一个 2 x 5 的元胞数组
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
5、 访问单元数组
有两种方法可以引用单元格数组的元素-
- 将索引括在第一个方括号()中,以引用单元格集
- 将索引括在大括号{}中,以引用单个单元格中的数据
当您将索引括在第一个括号中时,它指的是单元格的集合。
圆括号中的单元格数组索引是指单元格集
c = cell(2, 5); % 创建一个 2 x 5 的元胞数组
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; % 给元胞数组赋值
% 索引是从 1 开始的
c(1, 1) % 引用单元格集
% 您也可以使用大括号索引来访问单元格的内容
c{1, 1} % 引用单元格中的数据
c{1, 2:4}
十一、 冒号
colon(