当前位置 : 主页 > 编程语言 > 其它开发 >

Matlab基本语法(二)

来源:互联网 收集:自由互联 发布时间:2022-07-22
目录 Matlab语法(二) 九、 矩阵 1、 创建矩阵 2、 操作矩阵 3、 矩阵运算 3.1 加减法 3.2 除法 3.3 标量运算 3.4 矩阵转置 3.5 矩阵串联 3.6 矩阵乘法 3.7 行列式 3.8 逆矩阵 4、 生成矩阵 生成

目录
  • 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语法(二) 九、 矩阵 1、 创建矩阵

矩阵是数字的二维数组。

在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);  % 创建幻方矩阵

幻方矩阵:magic square是一个正方形,当其元素按行,列或对角线相加时,会产生相同的和。

十、 数组 1、 创建数组

创建数组的方式类似于创建矩阵的方式

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、 数组函数 功能 作用 length 向量长度或最大数组维数 ndims 数组维数 numel 数组元素数 size 数组维数 iscolumn 确定输入是否为列向量 isempty 确定数组是否为空 ismatrix 确定输入是否为矩阵 isrow 确定输入是否为行向量 isscalar 确定输入是否为标量 isvector 确定输入是否为向量 blkdiag 根据输入参数构造块对角矩阵 circshift 循环移位数组 ctranspose 复共轭转置 diag 对角矩阵和矩阵的对角线 flipdim 沿指定的维度翻转数组 fliplr 从左到右翻转矩阵 flipud 上下翻转矩阵 ipermute 倒置 N-D 数组的维数 permute 重新排列N-D数组的维数 repmat 复制和切片数组 reshape 重塑数组 rot90 将矩阵旋转90度 shiftdim 移动维度 issorted 确定集合元素是否按排序顺序 sort 按升序或降序对数组元素排序 sortrows 按升序对行进行排序 squeeze 删除单例维度 transpose 转置 vectorize 向量化表达
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(

上一篇:php 获取缩略图
下一篇:没有了
网友评论