MATLAB学习笔记(三)

来源:互联网 发布:无尽之剑3宝石数据修改 编辑:程序博客网 时间:2024/05/01 14:54

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,33,4,54,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) = 0S =     0     1     2

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

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

2.冒号的使用

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

>> H = 1:8H =     1     2     3     4     5     6     7     8>> time = 0.0:0.5:2.0time =         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>> MM =     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 * pib =    3.1416    3.1416    3.1416    3.1416    3.1416>> zeros(1,5)ans =     0     0     0     0     0>> b = ans + pib =    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使用两个参数可以提取非主对角线上的元素,正数代表主对角线上方,负数代表主对角线下方。

>> AA =     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的魔方矩阵,魔方矩阵的解不是唯一的,也可能有其他的解。

0 0
原创粉丝点击