MATLAB学习笔记(三)

MATLAB的矩阵运算

本人今天主要学习的内容是:
1.矩阵运算的基本规则
2.从矩阵中提取数据
3.利用矩阵变量进行数值计算
4.创建和使用特殊矩阵

1.矩阵的定义

1)直接定义矩阵有两种定义方式均可

>> C = [1,2,3;3,4,5;4,5,6]
C =
     1     2     3
     3     4     5
     4     5     6
>> C = [1,2,3
3,4,5
4,5,6]
C =
     1     2     3
     3     4     5
     4     5     6

2)如果一行有太多的元素需要跨行去写,则省略号表示本行未完,转入下一行

>> A = [1,2,3,...
3,4,5]
A =
     1     2     3     3     4     5

3)可以用已经定义的矩阵来定义其他矩阵

>> B = [1,2];
>> S = [3,B]
S =
     3     1     2
>> T = [30,10,20;S]
T =
    30    10    20
     3     1     2

4)可以通过圆括号加标号来修改矩阵元素的值

>> S(1) = 0
S =
     0     1     2

5)可以通过圆括号加标号来增加矩阵元素


>> S(4) = 5
S =
     0     1     2     5
>> S(8) = 8
S =
     0     1     2     5     0     0     0     8

2.冒号的使用

1)可以使用冒号定义等差矩阵,使用两个参数或者三个参数。两个参数的默认步长为1,三个参数的步长为第2个参数

>> H = 1:8
H =
     1     2     3     4     5     6     7     8
>> time = 0.0:0.5:2.0
time =
         0    0.5000    1.0000    1.5000    2.0000

2)提取数据功能。个人以为类似于Python中的list的切片功能,只不过这里是矩阵而不是数组。
定义矩阵:

>> M = [1,2,3,4,5;
       2,3,4,5,6;
       3,4,5,6,7]
M =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7

提取第一列:

>> x = M(:,1)
x =
     1
     2
     3

提取第四列:

>> y = M(:,4)
y =
     4
     5
     6

提取第一行

>> z = M(1,:)
z =
     1     2     3     4     5

提取第二行和第三行:

>> w = M(2:3,:)
w =
     2     3     4     5     6
     3     4     5     6     7

提取第2行和第3行中第4列和第5列的元素:

>> w = M(2:3,4:5)
w =
     5     6
     6     7

使用M(:)可以把原矩阵转换成一个长的列矢量,注意,原矩阵并没有改变其存储方式,仅仅是表示形式而已:

>> M(:)
ans =
     1
     2
     3
     2
     3
     4
     3
     4
     5
     4
     5
     6
     5
     6
     7
>> M
M =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7

提取单个元素,既可以用行下标和列下标来提取,也可以直接使用序号来提取。序号是指从M(:)中的第几个元素。如下例中两种方法是等价的

>> M(2,3)
ans =
     4
>> M(8)
ans =
     4

3.特殊矩阵

1)全零矩阵zeros

>> zeros(3)
ans =
     0     0     0
     0     0     0
     0     0     0
>> zeros(3,2)
ans =
     0     0
     0     0
     0     0
>> 

2)全1矩阵ones

>> ones(3)
ans =
     1     1     1
     1     1     1
     1     1     1
>> ones(3,2)
ans =
     1     1
     1     1
     1     1
>> 

【注】全0矩阵和全1矩阵常用作占位矩阵,用于程序的循环结构,这样可以提高运行速度

>> ones(1,5)
ans =
     1     1     1     1     1
>> b = ans * pi
b =
    3.1416    3.1416    3.1416    3.1416    3.1416
>> zeros(1,5)
ans =
     0     0     0     0     0
>> b = ans + pi
b =
    3.1416    3.1416    3.1416    3.1416    3.1416
>> 

3)对角矩阵
用函数diag可以提取矩阵主对角线上的元素

>> A = [1,2,3;3,4,5;1,2,3]
A =
     1     2     3
     3     4     5
     1     2     3
>> diag(A)
ans =
     1
     4
     3

用diag使用两个参数可以提取非主对角线上的元素,正数代表主对角线上方,负数代表主对角线下方。

>> A
A =
     1     2     3
     3     4     5
     1     2     3
>> diag(A,1)
ans =
     2
     5
>> diag(A,-1)
ans =
     3
     2
>> 

若输入的是矢量而不是矩阵,则函数diag会把矢量作为对角线元素而生成一个新的矩阵,并将矩阵的其他元素置零

>> B = [1,2,3];
>> diag(B)
ans =
     1     0     0
     0     2     0
     0     0     3
>> 

通过定义第二个参数,可以把矢量中的元素定义成矩阵中的任何一个对角线

>> diag(B,1)
ans =
     0     1     0     0
     0     0     2     0
     0     0     0     3
     0     0     0     0

4)魔方矩阵

函数用法
fliplr对矩阵的列进行左右对称翻转
flipud对矩阵的行进行上下对称翻转
magic(m)创建一个m*m的魔方矩阵

魔方矩阵时一种很有趣但是没有实际用途的特殊矩阵,在魔方矩阵中,所有的行列已经对角线元素之和均相等

>> A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> sum(A)  %按列求和
ans =
    34    34    34    34
>> sum(A')  %转置后按列求和
ans =
    34    34    34    34
>> sum(diag(A))  %对角线元素求和
ans =
    34
>> fliplr(A)  %对矩阵的列进行左右对称翻转
ans =
    13     3     2    16
     8    10    11     5
    12     6     7     9
     1    15    14     4
>> sum(diag(A))  %对角线元素的和
ans =
    34
>> 

MATLAB中可以产生任何大于2*2的魔方矩阵,魔方矩阵的解不是唯一的,也可能有其他的解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值