【MATLAB 入门指南 一】基本操作与矩阵输入

1.MATLAB 主界面

在这里插入图片描述

  • 如果语句以分号结束,MATLAB 会执行计算,但不在命令行窗口中显示输出。
  • 在空白命令行中按向上 (↑) 和向下箭头键 (↓) 可以重新调用以前的命令
  • 在键入命令的前几个字符之后按箭头键。例如,要重新调用命令 b = 2,请键入 b,然后按向上箭头键,会调出以 b 开头的所有历史命令

2. MATLAB 基本语法

2.1 变量

  • MATLAB 中的变量不需要声明.
  • 使用 = 为变量赋值
  • 如果未指定输出变量,MATLAB 将使用变量 ans(answer 的缩略形式)来存储计算结果。

2.2 变量名

  • 变量名对大小写敏感
  • 变量名的第一个字符必须为英文字母,其长度不能超过 31 个字符;
  • 变量名可以包含_、数字,但不能包含空格符、标点;

MATLAB 中有一些变量有其具体意义,不适合用作变量名.

变量意义
ans上一句的运算的结果
ij复数算子
inf无穷
eps浮点相对精度,即 1.0 到下一个浮点数之间的距离(值为2.2204e-16)
NaN非数字
pi圆周率 π
realmin最小浮点数 2−1022
realmax最大浮点数 (2−ε)21023
  • 通过将非零值除以零或计算明确定义的溢出(即超过 realmax)的数学表达式,会生成无穷值。通过尝试计算 0/0Inf-Inf 等没有明确定义的数值的表达式,会生成非数字
>> 0/0

ans =

   NaN

>> 5/0

ans =

   Inf

复数

复数包含实部和虚部,虚数单位是 -1 的平方根

>> sqrt(-1)

ans =

   0.0000 + 1.0000i

用 i 或者 j 表达虚部,用 j 最终的结果均为 i 来表达

>> c = [3+4i, 4+3j; -i, 10j]

c =

   3.0000 + 4.0000i   4.0000 + 3.0000i
   0.0000 - 1.0000i   0.0000 +10.0000i

除此以外,使用 iskeyword 命令可以查看 MATLAB 语言所有的关键字,这些关键字也不允许被用作变量名:

break、case、catch、classdef、continue、else、elseif、end、for、function、global、if、otherwise、parfor、persistent、return、spmd、switch、try、while

2.3 MATLAB 调用优先级

>> cos='This string'; % 注意这里是单引号,双引号表示字符串
cos(8)

ans =

    'r'

在这里插入图片描述

这里并没有触发内置函数 cos 的执行,而是当作了一个字符串变量

此时,若某函数被变量名所覆盖,则调用 clear <变量名> 可以取消绑定在该函数名上的变量名,并将此变量从工作区中清除

>> clear cos	% 清除绑定在 cos 上的变量
>> cos(8)		% 调用内置余弦函数运算得到-0.1455

ans =

   -0.1455

注:clear 是一个比较危险的命令,因为该命令后若不加参数,则表示清除当前工作区内的所有变量.

2.4 变量的类型

MATLAB 中的变量类型有: logicalcharnumericcellstruct 以及由他们组成的数组矩阵

在这里插入图片描述

2.5 numeric 型变量的显示格式

我们直接定义的数字型变量,默认是以 double 形式存储的.

我们可以通过 format <显示格式> 改变数字型变量的显示格式.

显示格式说明例子
short短定点格式.显示小数点后 43.1416
long固定的十进制格式,double类型变量显示小数点后15位,对float类型变量显示小数点后7位.3.141592653589793
shortE小数点后有4位数的短科学记数法3.1416e+00
longE长科学计数法.对double类型变量显示小数点后15位,对float类型变量显示小数点后7位.3.141592653589793e+00
bank小数点后有两位的货币格式3.14
hex十六进制格式400921fb54442d18
rat比例格式355/113
>> format long
>> pi

ans =

   3.141592653589793

>> format bank
>> pi

ans =

          3.14

>> format rat
>> pi

ans =

     355/113   

运算实例: 1 2 \frac{1}{2} 21 + 1 3 \frac{1}{3} 31 + 1 4 \frac{1}{4} 41

>> 1/2 + 1/3 + 1/4

ans =

    1.0833

>> format longE
>> ans

ans =

     1.083333333333333e+00

>> format rat
>> ans

ans =

      13/12   

2.6 MATLAB命令行

  • 行尾;在一行命令后使用可以使得此句不输出结果,仅保存在工作区
  • 其他命令:
命令作用
clc清除命令行窗口的所有命令
clear清除当前工作区内所有变量
clear <变量名>清除工作区指定变量
who列出工作区中的变量
whos列出工作区中的变量及大小和类型

3. MATLAB 数字运算

3.1 使用 MATLAB 计算数学表达式

  • 运算的优先级规则:同等优先级下从左向右运算,优先级顺序从高到低:
    • 括号()
    • 乘方^
    • 乘除法*/
    • 加减法+-

数学表达式求值实例:

数学表达式MATLAB命令
cos( ( 1 + 2 + 3 + 4 ) 3 5 \frac{\sqrt {(1 + 2 + 3 + 4)^3}}{5} 5(1+2+3+4)3 )cos(sqrt((1+2+3+4)^3/5))
sin( π \sqrtπ π ) + ln(tan(1))sin(sqrt(pi))+log(tan(1))
2 3.5 × 1.7 2^{3.5×1.7} 23.5×1.72^(3.5*1.7)
e s i n ( 10 ) e^{sin(10)} esin(10)exp(sin(10))

3.2 MATLAB 内置的数学函数

4. MATLAB 矩阵运算

4.1 矩阵定义与向量运用

4.1.2 矩阵定义

  • MATLAB 中,使用 [] 将待输入的矩阵内容括起来,使用空格 或逗号,分隔行内变量,使用;分隔每一行.

矩阵的定义:

MATLAB 命令结果
标量: 33
行向量: [1 2 3 4] [ 1 2 3 ] \begin{bmatrix} 1&2&3 \end{bmatrix} [123]
列向量: [1; 2; 3; 4] [ 1 2 3 4 ] \begin{bmatrix} 1\\ 2 \\ 3 \\ 4 \end{bmatrix} 1234
矩阵: [1 21 6; 5 17 9; 31 2 7] [ 1 21 6 5 17 9 31 2 7 ] \begin{bmatrix} 1&21&6\\ 5&17&9\\ 31 & 2 & 7\end{bmatrix} 153121172697

4.1.2 使用:运算符创建向量

使用冒号运算符:可以创建一个长向量,其语法如下:

冒号表达式结果
i:j [ i , i + 1 , i + 2 , . . . , j ] \begin{bmatrix} i,&i+1,&i+2,&...,&j\end{bmatrix} [i,i+1,i+2,...,j]
i:k:j [ i , i + k , i + 2 k , i + 3 k , . . . , j ] \begin{bmatrix} i,&i+k,&i+2k,& i + 3k, &...,&j\end{bmatrix} [i,i+k,i+2k,i+3k,...,j]

冒号运算符使用:

MATLAB命令结果
2:5 [ 2 3 4 5 ] \begin{bmatrix} 2&3&4&5 \end{bmatrix} [2345]
2:2:5 [ 2 4 ] \begin{bmatrix} 2&4\end{bmatrix} [24]
[1:5; 2:3:15; -2:0.5:0] [ 1 2 3 4 5 2 5 8 11 14 − 2 − 1.5 − 1 − 0.5 0 ] \begin{bmatrix} 1&2&3 & 4 & 5\\ 2&5&8 & 11 & 14 \\ -2 & -1.5 & -1 & -0.5 & 0\end{bmatrix} 122251.53814110.55140
'a':2:'z'‘acegikmoqsuwy’

4.1.3 函数生成矩阵

MATLAB命令结果
eye(n)n × n 的单位矩阵
zeros(n1, n2)n1 × n2 的零矩阵
ones(n1, n2)n1 × n2 的全 1 矩阵
diag(vector)得到一个以向量vector中内容为对角线的对角矩阵
linspace(x1,x2,n)生成区间为[x1, x2],有 n 个点的等差数列
magic(n)生成 n × n 的幻方矩阵
rand均匀分布的随机数
randn正态分布的随机数

4.2 矩阵的索引

  • MATLAB 中的矩阵是以列先序存储的.且索引下标从1开始.
  • 矩阵有两种索引方式: 按一维索引和按二维索引.对于一个一般的矩阵,其索引顺序如下:
    [ 1 或 ( 1 , 1 ) 4 或 ( 1 , 2 ) 7 或 ( 1 , 3 ) 2 或 ( 2 , 1 ) 5 或 ( 2 , 2 ) 8 或 ( 2 , 3 ) 2 或 ( 3 , 1 ) 6 或 ( 3 , 2 ) 9 或 ( 3 , 3 ) ] \begin{bmatrix} 1或(1,1)&4或(1,2)&7或(1,3)\\ 2或(2,1)&5或(2,2)&8或(2,3)\\ 2或(3,1) & 6或(3,2) & 9或(3,3)\end{bmatrix} 1(1,1)2(2,1)2(3,1)4(1,2)5(2,2)6(3,2)7(1,3)8(2,3)9(3,3)
  • 矩阵的索引可以使用冒号:,选取向量范围内的值
  • 矩阵的索引可以是一个或两个向量,表示选中向量内的所有行或所有列.

矩阵索引的规则:

原矩阵索引结果说明
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A(8)6以列开始,取第 8 个元素 (线性索引)
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A([1 3 5]) [ 1 7 5 ] \begin{bmatrix} 1&7& 5 \end{bmatrix} [175]取矩阵第 [1 3 5] 位置元素放入新矩阵的对应位置
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A([1 2; 3 4]) [ 1 4 7 2 ] \begin{bmatrix} 1&4 \\ 7 & 2 \end{bmatrix} [1742]取矩阵第 [1 2; 3 4] 位置元素放入新矩阵的对应位置
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A(3,2)8取矩阵第 3 行,第 2 列
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A([1,2], :) [ 1 2 3 4 5 6 ] \begin{bmatrix} 1&2 & 3 \\ 4 & 5 & 6 \end{bmatrix} [142536]取矩阵第[1,2]行的所有元素
A = [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7 & 8 & 9\end{bmatrix} 147258369 A([1 3], [1 2]) [ 1 2 7 8 ] \begin{bmatrix} 1&2 \\ 7 & 8 \end{bmatrix} [1728]取矩阵第[1 3]行,第[1 2]列的交叉项

注意:

  1. 引用数组外部元素,MATLAB 会引发错误
>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

>> A(4,5)
Index in position 2 exceeds array bounds. Index must not exceed 4.
  • 不过,可以在赋值语句左侧指定当前维外部的元素。数组大小会增大以便容纳新元素
>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

>> A(4,5) = 17

A =

     1     2     3     4     0
     5     6     7     8     0
     9    10    11    12     0
    13    14    15    16    17

4.3 矩阵的操作

4.3.1 值的改变

实例分析:
在这里插入图片描述

>> A = [1 21 6; 5 17 9; 31 2 7]

A =

       1             21              6       
       5             17              9       
      31              2              7       

>> A(1,2)=76

A =

       1             76              6       
       5             17              9       
      31              2              7       

>> A(3,2)=0

A =

       1             76              6       
       5             17              9       
      31              0              7       

>> A([1 2], [2 3]) = 0

A =

       1              0              0       
       5              0              0       
      31              0              7    

4.3.2 删除操作

删除某行或某列实例:
在这里插入图片描述

A =

       1              0              0       
       5              0              0       
      31              0              7   

>> A(3,:)

ans =

      31              0              7       

>> A(3,:) = []

A =

       1              0              0       
       5              0              0    
  • 如果删除矩阵中的单个元素,结果将不再是矩阵,将会导致错误
>> x = [1 2 3; 4 5 6; 7 8 9]

x =

     1     2     3
     4     5     6
     7     8     9

>> x(1, 2) = []
空赋值只能具有一个非冒号索引。
  • 使用单一下标可以删除一个元素或元素序列,并将其余元素重构为一个行向量
>> x(1:2:9) = []

x =

     4     2     8     6

4.3.3 矩阵拼接

  • 使用 , 将彼此相邻的数组串联起来称为水平串联,每个数组必须具有相同的行数
  • 如果各数组具有相同的列数,则可以使用; 垂直串联

在这里插入图片描述
拼接实例:

  • F = [A B; C; D] 表示把 A、B、C、D 放在一起形成一个新的增广矩阵

>>  A=[1 2;3 4]

A =

       1              2       
       3              4       

>> B=[9 9;9 9]

B =

       9              9       
       9              9       

>> C = [5 6 7 8]

C =

       5              6              7              8       

>> D = [-2 -1 0 1]

D =

      -2             -1              0              1       

>> F = [A B; C; D]

F =

       1              2              9              9       
       3              4              9              9       
       5              6              7              8       
      -2             -1              0              1  

4.3.5 矩阵运算符操作

运算符操作形式例子
+矩阵与向量相加A+B[6 3] + 2 = [8 5]
+矩阵与矩阵对应位置相加A+B[6 3] + [4 8] = [10 11]
-矩阵与向量相减A-B[6 3] - 2 = [4 1]
-矩阵与矩阵对应位置相减A-B[6 3] - [4 8] = [2 -5]
*矩阵乘法A*B[6 3] * [4 8]' = 48
.*矩阵与矩阵对应位置相乘A.*B[6 3] * [4 8] = [24 24]
/矩阵与矩阵右除(等价于A*inv(B))A/B[6 3] / [4 8] = 0.6
\矩阵与矩阵左除(等价于inv(A)*B)A\B[6 3] / [4 8] = [0.06667 1.3333; 0 0]
./矩阵与矩阵对应位置右除A./B[6 3] ./ [4 8] = [1.5 0.375]
.\矩阵与矩阵对应位置左除A.\B[6 3] .\ [4 8] = [0.6667 2.6667]
'矩阵的转置A'[6 3]' = [6; 3]
^矩阵与向量乘方A^B[1 2; 3 4]^3 = [37 54; 81 118]
.^矩阵与矩阵对应位置乘方A.^B[1 2; 3 4].^[1 2; 3 4] = [1 4; 27 256]

4.3.6 逻辑下标

  • 仅提取 x 中正常的数值
>> x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
>> L = isfinite(x)

L =

  1×14 logical 数组

   1   1   1   1   0   1   1   1   1   1   1   1   1   1

>> x(L)

ans =110

    2.1000    1.7000    1.6000    1.5000    1.9000    1.8000    1.5000    5.1000    1.8000    1.40001113

    2.2000    1.6000    1.8000
  • 提取比均值大三倍标准差的元素
>> x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
>> x = x(isfinite(x));
>> x = x(abs(x-mean(x)) <= 3*std(x))

x =110

    2.1000    1.7000    1.6000    1.5000    1.9000    1.8000    1.5000    1.8000    1.4000    2.20001112

    1.6000    1.8000
  • 将非质数设置为 0
>> x = [1 2 3; 4 5 6; 7 8 9]

x =

     1     2     3
     4     5     6
     7     8     9

>> x(~isprime(x)) = 0

x =

     0     2     3
     0     5     0
     7     0     0

4.3.7 矩阵操作的相关函数

常用函数:

函数作用说明文档
max数组的最大元素点击跳转
sum数组元素总和点击跳转
sort对数组元素排序点击跳转
sortrows对矩阵行或表行进行排序点击跳转
size数组大小点击跳转
find查找非零元素的索引和值点击跳转
perms产生所有可能的排列
  • find 函数:选取 x 矩阵中质数的位置
>> x = [1 2 3; 4 5 6; 7 8 9]

x =

     1     2     3
     4     5     6
     7     8     9

>> k = find(isprime(x))'

k =

     3     4     5     7
  • 使用以下命令按 k 确定的顺序将这些质数显示为行向量
>> x(k)

ans =

     7     2     5     3
  • 将 k 用作赋值语句的左侧索引时,会保留矩阵结构:
>> x(k) = NaN

x =

     1   NaN   NaN
     4   NaN     6
   NaN     8     9

4.4 高维矩阵

  • 先创建二维矩阵
>> A = [1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9
  • 添加第二页

>> A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]

A(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


A(:,:,2) =

    10    11    12
    13    14    15
    16    17    18
  • cat(dim, A, B) 函数可用于构造多维数组
>> B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])

B(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


B(:,:,2) =

    10    11    12
    13    14    15
    16    17    18


B(:,:,3) =

     3     2     1
     0     9     8
     5     3     7
  • 快速扩展多维数组的另一种方法是将一个元素赋给一整页
>> B(:,:,4) = 0

B(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


B(:,:,2) =

    10    11    12
    13    14    15
    16    17    18


B(:,:,3) =

     3     2     1
     0     9     8
     5     3     7


B(:,:,4) =

     0     0     0
     0     0     0
     0     0     0

高维数组中元素的访问

>> A

A(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


A(:,:,2) =

    10    11    12
    13    14    15
    16    17    18
  • 只访问 A 的每一页上的第一列和第三列
>> C = A(:,[1 3],:)

C(:,:,1) =

     1     3
     4     6
     7     9


C(:,:,2) =

    10    12
    13    15
    16    18

操作高维数组

在这里插入图片描述

  • reshapereshape 逐列操作,沿 A 中各列连续逐一提取元素来创建新矩阵,从第一页开始,之后是第二页
>> A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2];
A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3];
>> B = reshape(A,[6 5])

B =

     1     3     5     7     5
     9     6     7     5     5
     8     5     2     9     3
     2     4     9     8     2
     0     3     3     8     1
     1     0     6     4     3
  • permute
>> M(:,:,1) = [1 2 3; 4 5 6; 7 8 9];
M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]

M(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


M(:,:,2) =

     0     5     4
     2     7     6
     9     3     1
  • 使用 permute 函数,通过在第二个参数中指定维度顺序,将每一页上的行下标和列下标交换。M 的原始行现在是列,原始列现在是行。

>> P1 = permute(M,[2 1 3])

P1(:,:,1) =

     1     4     7
     2     5     8
     3     6     9


P1(:,:,2) =

     0     2     9
     5     7     3
     4     6     1
  • 将 M 的行下标和页下标交换
>> P2 = permute(M,[3 2 1])

P2(:,:,1) =

     1     2     3
     0     5     4


P2(:,:,2) =

     4     5     6
     2     7     6


P2(:,:,3) =

     7     8     9
     9     3     1
  • repmat 函数:创建一个 2×3×1×4 数组
>> A = repmat(5,[2 3 1 4])

A(:,:,1,1) =

     5     5     5
     5     5     5


A(:,:,1,2) =

     5     5     5
     5     5     5


A(:,:,1,3) =

     5     5     5
     5     5     5


A(:,:,1,4) =

     5     5     5
     5     5     5
>> size(A)

ans =

     2     3     1     4
  • squeeze 函数:消除长度为 1 的维度
>> B = squeeze(A)

B(:,:,1) =

     5     5     5
     5     5     5


B(:,:,2) =

     5     5     5
     5     5     5


B(:,:,3) =

     5     5     5
     5     5     5


B(:,:,4) =

     5     5     5
     5     5     5
>> size(B)

ans =

     2     3     4

4.5 构建表

>> n = (0:9)';
>> pows = [n  n.^2  2.^n]

pows =

     0     0     1
     1     1     2
     2     4     4
     3     9     8
     4    16    16
     5    25    32
     6    36    64
     7    49   128
     8    64   256
     9    81   512

注意事项

MATLAB 命令说明
diary将命令行窗口文本记录到日志文件中
home发送光标复位
commandwindow选择命令行窗口
commandhistory打开命令历史记录窗口
  • 新手容易犯错,打开 MATLAB 之后,请按 CTRL+Q 这个组合键,是不是发现MATLAB关闭了?

Reference

[1] MATLAB 官方文档

[2] MATLAB01:基本的数学运算与矩阵运算

[3] MATLAB(一)基本操作与矩阵输入

[4] MATLAB使用教程(一)——从零开始,基础,数据类型——新手来看

[5]【经验分享】CSDN如何修改文字的字体、大小以及颜色

[6] CSDN如何编辑数学公式

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值