目录
1.定义
Matlab以矩阵作为数据操作的基本单位。矩阵是由m*n个数aij(i=1,2,...,m;j=1,2,...,n)排成的m行n列数表,记成。称为m*n矩阵,也可以记成
或者
。i表示行数,j表示列数,若m=n,则该矩阵为n阶矩阵(n阶方阵)。
用这个方法创建矩阵时,需要注意以下几点:
- 输入矩阵时要以[]为其标识符;
- 矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或回车键分隔;
- 矩阵大小不需要预先定义;
- 若[]中无元素,表示空矩阵;
- 如果不想显示中间结果,可以用分号结束。
实例——创建矩阵
创建元素均是15的3*3矩阵。matlab程序如下:
>>a=[15 15 15;15 15 15;15 15 15]
a=
15 15 15
15 15 15
15 15 15
实例——创建复数矩阵
创建包含复数的矩阵A,其中,,matlab程序如下:
>> A=[[1,1+i,2];[2,3+2i,1]]
A =
1.0000 + 0.0000i 1.0000 + 1.0000i 2.0000 + 0.0000i
2.0000 + 0.0000i 3.0000 + 2.0000i 1.0000 + 0.0000i
2.矩阵的生成
矩阵的生成除了直接输入法,还可以利用M文件生成法和文本文件生成法等。
1.利用M文件创建
当矩阵的规模比较大时,直接输入法就显得笨拙,出差错也不易修改。为了解决这些问题,可以将所要输入的矩阵按格式先写入一文本文件中,以m为其扩展名,即M文件。
M文件是一种可以在matlab 环境下运行的文本文件,它可以分为命令式文件和函数式文件两种。在此处主要用到的是命令式M文件,用它的简单形式来创建大型矩阵。在matlab 命令行窗口中输入M文件名,所要输入的大型矩阵即可被输入到内存中。
实例——M文件矩阵
(1)编制一个名为gmatrix的矩阵。
(2)在M文件编辑器中编制一个名为sample.m的M文件。
(注:M文件中的变量名与文件名不能相同,否则会造成变量名和函数名混乱。)
>> sample.M
gmatrix=[378 89 90 83 382 92 29;
3829 32 9283 2938 378 839 29;
388 389 200 923 920 92 7478;
3829 892 66 89 90 56 8980;
7827 67 890 6557 45 123 35]
(3)运行M文件。在matlab命令行窗口中输入文件名,结果如下:
>> sample
gmatrix =
378 89 90 83 382 92 29
3829 32 9283 2938 378 839 29
388 389 200 923 920 92 7478
3829 892 66 89 90 56 8980
7827 67 890 6557 45 123 35
2.利用文本创建
即在文件夹(通常为work文件夹)中建立txt文件,在命令行窗口中直接调用这个文件名即可。
实例——创建生活用品矩阵
日用商品在三家商店中有不同的价格,其中,毛巾有三种3.5元、4元,5元;脸盆10元,15元,20元;单位量的售价用矩阵表示(行表示商店,列表示商品),用文本文件创建矩阵x。
(1)事先在记事本中建立文件并输入
3.5 4 5
10 15 20
(2)以goods.txt保存,在命令行窗口中输入
>> goods
goods =
3.5000 4.0000 5.0000
10.0000 15.0000 20.0000
由创建商品矩阵X。
3.创建特殊矩阵
可以直接用函数来生成某些特定的矩阵,以下是常用函数:
eye(n) | 创建n*n单位矩阵 |
eye(m,n) | 创建m*n单位矩阵 |
eye(size(A)) | 创建与A维数相同的单位阵 |
ones(n) | 创建n*n全1矩阵 |
ones(m*n) | 创建m*n全1矩阵 |
one(size(A)) | 创建与A维数相同的全1阵 |
zeros(m*n) | 创建n*n全0矩阵 |
zeros(size(A)) | 创建与A维数相同的全0矩阵 |
rand(n) | 在[0,1]区间内创建一个n*n均匀分布的随机矩阵 |
rand(m*n) | 在[0,1]区间内创建一个m*n均匀分布的随机矩阵 |
rand(size(A)) | 在[0,1]区间内创建一个与A维数相同的均匀分布的随机矩阵 |
compan(P) | 创建系数向量是 P的多项式的伴随矩阵 |
diag(v) | 创建一向量v中的元素为对角的对角阵 |
hilb(n) | 创建n*n的Hilbert矩阵 |
magiic(n) | 生成n阶魔方矩阵 |
sparse(A) | 将矩阵A转化为稀疏矩阵形式 |
实例——生成特殊矩阵
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(3,2)
ans =
0 0
0 0
0 0
>> ones(3,2)
ans =
1 1
1 1
1 1
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> rand(3)
ans =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> rand(3,2)
ans =
0.9649 0.9572
0.1576 0.4854
0.9706 0.8003
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
>> hilb(3)
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> invhilb(3)
ans =
9 -36 30
-36 192 -180
30 -180 180
>>
4.矩阵元素的运算
1.矩阵元素的修改
矩阵中的元素与向量中的元素一样,可以进行抽取引用,编辑修改等操作。
命令名 | 说明 |
D=[A;B C] | A是原矩阵,B,C中包含要扩充的元素,D为扩充后的矩阵 |
A(m,:)=[] | 删除A的第m行 |
A(:,n)=[] | 删除A的第n行 |
A(m,n)=a;A(m,:)=[a b...];A(:,n)=[a b...] | 对A的第m行第n列的元素赋值;对A的第m行的元素赋值;对A的第n列赋值; |
实例——新矩阵的生成
修改矩阵元素,创建新矩阵
>> A=[1 2 3;4 5 6];
B=eye(2);
C=zeros(2,1);
D=[A;B C]
D =
1 2 3
4 5 6
1 0 0
0 1 0
>>
2.矩阵的变维
可以用符合:法和reshape函数法。reshape函数的调用形式如下:reshape(X,m,n),将已知矩阵变维成m行n列的矩阵。
实例——矩阵维度修改
演示矩阵的维度变换
>> A=1:12;
B=reshape(A,2,6)
B =
1 3 5 7 9 11
2 4 6 8 10 12
>> C=zeros(3,4);
C(:)=A(:)
C =
1 4 7 10
2 5 8 11
3 6 9 12
>>
3.矩阵的变向
Rot(90) | 将A逆时针方向旋转90° |
Rot(90,K) | 将A逆时针方向旋转90°,k可以是正整数或负整数 |
Fliplr(X) | 将X左右翻转 |
flipud(X) | 将X上下翻转 |
flipdim(X,dim)q | dim=1时对行翻转,dim=2时对列翻转 |
实例——矩阵的变向
>> A=1:12;
C=zeros(3,4);
C(:)=A(:)
C =
1 4 7 10
2 5 8 11
3 6 9 12
>> flipdim(C,1)
ans =
3 6 9 12
2 5 8 11
1 4 7 10
>> flipdim(C,2)
ans =
10 7 4 1
11 8 5 2
12 9 6 3
>>