MATLAB基础(二)向量与矩阵

本文详细介绍了MATLAB的基础知识,包括行向量和列向量的创建、冒号运算符、Linspace函数、矩阵变量的构造、特殊矩阵函数、元素引用与修改、基本运算(加减乘除、逻辑运算)、以及逻辑向量的使用方法。
摘要由CSDN通过智能技术生成

一个矩阵的维数为r x c,其中r为行向量的个数,c是列向量的个数。

1.行向量与列向量

(1)创建行向量

>> v=[1 2 3 4]

v =

     1     2     3     4

>> w=[1,2,3,4]

w =

     1     2     3     4

(2)冒号运算符和Linspace函数

若向量中的值有规律,可用冒号运算符循环访问

>> v=1:9

v =

     1     2     3     4     5     6     7     8     9

>> v=1:2:9

v =

     1     3     5     7     9
  • 其中v=1:2:9中的2为步长
  • 在此情况下,不需要用 [ ] 来定义向量

linspace函数创建一个线性间隔的空间,linspace(x,y,n)创建一个从xyn个值的向量

>> linspace(3,100,4)

ans =

    3.0000   35.3333   67.6667  100.0000

logsapce函数创建一个对数间隔的向量,logspace(x,y,n)创建一个从x^10y^10n个值的向量,
若n被忽略,则默认为100个点。

(3)引用与修改元素

MATLAB中索引从1开始

1 2 3 4 5 6 7 8 9 10

>> v

v =

     1     3     5     7     9

>> v(3)

ans =

     5
     
>> c=v(2:5)

c =

     3     5     7     9

任何向量都可以通过索引送入另一个向量,索引不需要按顺序

>> v([1 5 3])

ans =

     1     9     5
  • 向量[1 5 3]被称为索引向量,指定的是原始向量
  • 通过指定向量中的索引或下标,可以改变向量元素中存储的值:v[4]=10
  • 通过引用一个现状还不存在的向量,可以拓展一个向量
  • 如果向量的结尾和指定的元素之间还有空,则用0填充

(4)创建列向量

可以通过将值放在方括号中,用分号( ;)隔开

>> b=[1;2;3;4;5]
b =
     1
     2
     3
     4
     5


没有直接的方法使用冒号运算符得到列向量,但可以通过转置

>> r=1:3
r =
     1     2     3
>> c=r.'
c =
     1
     2
     3
  • c'——共轭转置
  • c.'——转置

2.矩阵变量

(1)创建矩阵变量

行向量的值用空格或逗号隔开,不同的行用分号隔开
>> mat=[1,2,3;4,5,6]
mat =
     1     2     3
     4     5     6
  • 每行值的个数必须相等
  • 行里能使用冒号运算符
  • 不同行间也可以使用回车键替代分号

(2)创建特殊矩阵的函数

①zeros函数

产生全0矩阵,即零矩阵

>> zeros(3)
ans =
     0     0     0
     0     0     0
     0     0     0
②ones函数

产生全1的矩阵,即幺矩阵

>> ones(3)
ans =
     1     1     1
     1     1     1
     1     1     1
③eye函数

产生对角线为1的矩阵。当矩阵为方阵时,得到一个单位矩阵

>> eye(3)
ans =
     1     0     0
     0     1     0
     0     0     1
④rand函数

产生(0,1)区间均匀分布的随机矩阵

>> rand(3)
ans =
    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

也可以传递两个参数明确指定行列数

>> rand(2,3)
ans =
    0.9649    0.9706    0.4854
    0.1576    0.9572    0.8003
⑤randi函数

使用randi能够生成随机整数矩阵,并且可以指定范围与生成矩阵的维数

>> randi([20,30],2,3)
ans =
    21    30    30
    24    28    27
>> randi([10,20],2)
ans =
    10    20
    19    17
⑥randn函数

产生均值为0,方差为1的标准正态分布随机矩阵

>> randn(3)
ans =
   -0.2414   -0.8649    0.6277
    0.3192   -0.0301    1.0933
    0.3129   -0.1649    1.1093
⑦magic函数

幻方矩阵:产生行、列、对角线和相等的方阵

>> magic(3)
ans =
     8     1     6
     3     5     7
     4     9     2
⑧diag函数

取得矩阵的对角线元素,或生成以该向量为对角的矩阵

>> magic(4)
ans =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> diag(ans)
ans =
    16
    11
     6
     1
>> diag(ans)
ans =
    16     0     0     0
     0    11     0     0
     0     0     6     0
     0     0     0     1

通过diag(a,n)中的n也可以控制取得对角线平行线上的元素

>> diag(magic(4),1)
ans =
     2
    10
    12

类似的有:
triu(A)函数,生成上三角矩阵(为A中对应元素),其余元素为0
tril(A)函数,生成下三角矩阵,其余元素为0

(3)引用与修改矩阵元素

①下标索引
>> mat=[2:4;3:5]
mat =
     2     3     4
     3     4     5
>> mat(2,3)
ans =
     5
>> mat(1:2,2:3)
ans =
     3     4
     4     5

注意创建矩阵时使用方括号 [ ]
引用矩阵时使用圆括号()

利用冒号 :,可以引用矩阵所有的行和列

mat =
     2     3     4
     3     4     5
>> mat(1,:)
ans =
     2     3     4
②线性索引

MATLAB在内存中存储矩阵是以列为主的顺序分配的(逐列式的),故线性索引提取元素时是按列进行的。

a =
   100    77
    28    14
    
>> a(1)
ans =
   100
   
>> a(2)
ans =
    28
    
>> a(3)
ans =
    77
    
>> a(4)
ans =
    14
③修改

一个矩阵的任何子集都能修改,只要将要赋给的子集与被修改的子集具有相同数量的行和列即可。

>> a(3)=11
a =
   100    11
    28    14

也可以改变一个矩阵的整行或整列

>> a(2,:)=[2 3]
a =
   100    11
     2     3

(4)维数

①length函数

length函数返回向量中元素的个数

b =
     1     2     3     4
>> length (b)
ans =
     4

对于一个矩阵,length函数返回行、列向量中较大的那个

c =
     1     2     3
     4     5     6
>> length(c)
ans =
     3
②size函数

size函数返回行、列向量的个数

>> size(c)
ans =
     2     3

也可以用一个向量来接受这两个返回量

>> [m,n]=size(c)
m =
     2
n =
     3
③numel函数

返回数组(向量或矩阵)所有元素的个数

c =
     1     2     3
     4     5     6
>> numel(c)
ans =
     6

MATLAB还有一个内置表达end,用来提取向量中的最后一个元素

>> c(1,end)
ans =
     3
>> c(end)
ans =
     6
④reshape函数

reshape函数可以改变一个矩阵的维数

>> magic(4)
ans =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> reshape(ans,2,8)
ans =
    16     9     2     7     3     6    13    12
     5     4    11    14    10    15     8     1


下面介绍几个特殊的改变矩阵维数的函数:
fliplr函数从左到右“翻转”矩阵;
flipud函数上下”翻转“矩阵;
rot90函数逆时针90°旋转矩阵
repmat用来创建一个矩阵:repmat(mat,m,n)

a =
     1     2
     3     4
>> fliplr(a)
ans =
     2     1
     4     3
>> fliplr(ans)
ans =
     1     2
     3     4
>> rot90(ans)
ans =
     2     4
     1     3
>> repmat(ans,3,2)
ans =
     2     4     2     4
     1     3     1     3
     2     4     2     4
     1     3     1     3
     2     4     2     4
     1     3     1     3

(5)空向量

 >> evec=[]
evec =
     []
>> length (evec)
ans =
     0

可以通过连接给空向量添加值

>> evec=[evec 4]
evec =
     4
>> evec=[evec 11]
evec =
     4    11

空向量可用于删除向量中的元素

b =
     1     2     3     4
>> b(2)=[]
b =
     1     3     4

3.矩阵的基本运算

(1)矩阵的加减法

矩阵与标量的加减等于矩阵中所有元素与此标量的加减.

c =
     1     2     3
     4     5     6
>> c+2
ans =
     3     4     5
     6     7     8

(2)矩阵的乘法

①正常乘(*)

C = A*B 是 A 和 B 的矩阵乘积。如果 A 是 m×p 矩阵,B 是 p×n 矩阵,则 C 是通过以下公式定义的 m×n 矩阵:
在这里插入图片描述

②数乘(*)

用这个常数去乘矩阵的每一个元素

c =
     1     2     3
     4     5     6
>> 3*c
ans =
     3     6     9
    12    15    18
③点乘(.*)

要求两个矩阵有相同的维数,对应元素相乘

d =
     3     6     9
    12    15    18
>> c
c =
     1     2     3
     4     5     6
>> x=d.*c
x =
     3    12    27
    48    75   108
④标量积(dot)

返回 A 和 B 的标量点积(内积)
语法

C = dot(A,B)
C = dot(A,B,dim)

dim:按指定维数dim求两矩阵的标量积
沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。

考虑两个二维输入数组:A 和 B:

dot(A,B,1) 将 A 和 B 的列视为向量,并返回对应列的点积。

dot(A,B,2) 将 A 和 B 的行视为向量,并返回对应行的点积。
在这里插入图片描述

如果 dim 大于 ndims(A),则 dot 返回 conj(A).*B

⑤向量积(cross)

返回 A 和 B 的叉积
cross(A,B)
cross(A,B,dim)

⑥混合积

dot(A,cross(B,C))

⑦卷积(conv)

conv(A,B)

⑧解卷积

[q,r]=deconv(B,A)

⑨张量积(kron)

kron(A,B)

(3)矩阵的除法

①左除( \ )

AB是线性方程组AX=B中的系数矩阵和常数矩阵时,A \ B是方程组AX=B的解

②右除

AB是线性方程组XA=B中的系数矩阵和常数矩阵时,B \ A是方程组XA=B*的解

③元素左除

A .\ B 是指B的个元素除以A的对应元素

④元素右除

A ./ B 是指A的个元素除以B的对应元素

4、逻辑向量

(1) 逻辑表达式

逻辑向量使用产生真/假的关系表达式

a =

     5     8
     4     8

>> isg=a>6

isg =

  2×2 logical 数组

   0   1
   0   1

结果是一个0、1组成的向量,可以在该isg向量上进行数值运算,但其类型是逻辑型。


这个逻辑向量可以用来索引原始向量:

>> a(isg)

ans =

     8
     8

(2)逻辑内置函数

①true、false函数

可以创建全逻辑1或0的向量或矩阵

>> false(2)

ans =

  2×2 logical 数组

   0   0
   0   0

>> true (1,5)

ans =

  1×5 logical 数组

   1   1   1   1   1
②any、all函数

任意元素为逻辑真(非零),any函数返回逻辑真
所有元素为非零时,all函数返回逻辑真

③find函数

find函数返回满足规定条件的索引下标

>> find(b>5)

ans =

     4     5     6

>> find(a>4)

ans =

     1
     3
     4

(对矩阵使用线性索引)

④isequal函数

两向量相等则返回1,否则返回0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值