MATLAB基础学习系列二——矩阵

矩阵的建立以及操作

1.矩阵的建立

1.直接输入法
a=[1 2 3] 或者 a=[1,2,3]
b=[1 2 3     
	4 5 6 
	7 8 9]  或者
b=[1 2 3;4 5 6;7 8 9]
%分号代表行,元素之间用空格或者逗号
注意:
在MATLAB中也可以用已经定义好的矩阵来定义其他矩阵。例如:
 C=[1 5]
 D=[6,C]
D =
 6     1     5

2.M文件建立矩阵
启动编辑器(输入edit命令,或者使用按钮)

3. %冒号运算符用于定义一个新矩阵或修改原有矩阵。
e1:e2:23
e1为初始值,e2为步长,e3为终止值,产生行向量,以e1开始,
>>A=1:2:7
 A= 
	1 3 5 7
%提取矩阵A1的第一列
>> A1=[1 2 3;11 12 13;21 22 23];
>> X=A1(:,1) %表示所有行的第一列
X =
     1
    11
    21

>>Y=A1(2:3,1:2) %表示第2行到第三行,从第一列到第二列
Y =
11    12
21    22

>>M=A(1,:)  %获取第一行 所有列的内容
>> C=A(1,2:3)  %获取第一行 2到3列的内容
>> D=A(1,2:end)  %获取第一行 2到最后的内容
>> D=A([1,2],[1,2])  %获取第一行第一列、第二列;第二行第一列第二列
>> D1=A(1,[1,2])  %获取第一行 第一列第二列的内容

5.linspace建立行向量
linspace(a,b,n)--a和b分别为行向量的第一个元素和最后一个元素,n为总元素,
省略n自动产生100个元素的行向量。

2.特殊矩阵

全零矩阵和全1矩阵常用做占位矩阵,用于程序的循环结构,这样可以提高运行速度。

2.1.全零矩阵—zeros函数

>>zeros(m)  %M*M的全零矩阵
>>zeros(m,n) %创建m*n的全零矩阵
>> zeros(3)
ans =
 0     0     0
 0     0     0
 0     0     0

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

2.2.全1矩阵–ones函数

>>ones(m) %创建m*m的全1矩阵
>>ones(m,n) %创建m*n的全1矩阵
>> ones(3)
ans =
 1     1     1
 1     1     1
 1     1     1

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

2.3.对角矩阵–diag函数(提取矩阵对角线上的元素)

>>diag(A) %提取二维矩阵A中的对角元素。
>> A=[1,2,3;4,5,6;7,8,9]
A =
 1     2     3
 4     5     6
 7     8     9	
>> diag(A)
ans =
 1
 5
 9
定义函数diag的第二个输入参数k,可以提取出其他对角线上的元素。若k为正数,则提取矩阵右上角对角线上的元素,若k为负数,则提取矩阵左下角对角线上的元素。
>> diag(A,1)
ans =
 2
 6

>> diag(A,2)
ans =
 3

>> diag(A,-1)
ans =
 4
 8
注:如果函数diag的输入不是二维矩阵,而是矢量,那么MATLAB会把输入矢量作为对角线元素产生一个新的矩阵,并将新矩阵的其他元素置为零。
>> B=[1,2,3]
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

2.4魔方矩阵–magic函数

在魔方矩阵中,所有的行,列以及对角元素之和均相等。

 >>magic(5)
ans =
17    24     1     8    15
23     5     7    14    16
4     6    13    20    22
10    12    19    21     3
11    18    25     2     9
扩展:
>> fliplr(A)  %对矩阵的列进行左右对称翻转
ans =
15     8     1    24    17
16    14     7     5    23
22    20    13     6     4
 3    21    19    12    10
 9     2    25    18    11

>> flipud(A) %对矩阵的行进行上下对称翻转
ans =
11    18    25     2     9
10    12    19    21     3
 4     6    13    20    22
23     5     7    14    16
17    24     1     8    15

2.5Hilbert矩阵

>>hilb(4)
ans =
   1              1/2            1/3            1/4     
   1/2            1/3            1/4            1/5     
   1/3            1/4            1/5            1/6     
   1/4            1/5            1/6            1/7   
>> format short
>>ans
ans =
   ans =
    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111

2.6Toeplitz矩阵

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

2.7 随机矩阵

1.随机数 rand 0-1 均匀分布的随机矩阵
2.randn 均值为0 方差为1 的标准正态分布的随机矩阵
>>S=0+(10-0)*rand(10,1) --0到10之间的随机数
%从a到b之间均匀的随机数
>>S=a+(b-a)*rand
>>y=u+sqrt(s)*randn %产生均值为u,方差为s的正态分布
>>y=0.6+sqrt(5)*randn %会产生5个序列
>>mean(y) %获取序列的均值
>>std(y) %获取序列的方差

3矩阵的操作

在矩阵中元素是以列的方式存放,下标从1开始(即从第一列开始)

3.1.矩阵元素的获取

A =
 1     2     3
11    12    13
23    24    25

>> A(2,3) %第二行,第三列的元素是13
>> A(3)   %索引为3的元素是23
>> [m,n]=find(A==3)---1,3--返回下标
>>in = find(A==11)--2---返回索引

ind2sub和sub2ind是matlab中下标与索引相互转换用的两个函数。
ind代表索引(index);sub代表下标(subscript),即行列值。
>>sub2ind(size(A),2,3)---8
>>[n,m]=ind2sub(size(A),8)---2,3

3.2.重排矩阵–使用reshape函数

H=reshape(A,9,1)--9行1列的矩阵
I=A(:) 这个效率高 排为列向量

3.3.矩阵转置 L=A’

3.4删除矩阵元素—对 对应的元素赋空置

>> A=[1,3,5;4,5,7;55,66,77] 
>>	 A(1,:)=[] ---删除第一行的元素

3.5矩阵扩展

A =
 4     5     7
55    66    77
>>C=repmat(A,2,1)--把A矩阵看做一个整体,增加两行一列

C =
 4     5     7
55    66    77
 4     5     7
55    66    77

>>D=repmat(A,2,2)
D =
 4     5     7     4     5     7
55    66    77    55    66    77
 4     5     7     4     5     7
55    66    77    55    66    77

3.6. 矩阵压缩—把重复的元素去除

>>F=[1 2 3 4 4 5 6 6 6 6]
>>F1=unique(F)
F1 =
 1     2     3     4     5     6

4.矩阵之间的运算

4.1简单运算

1.
矩阵之间的加法,减法运算,即对应元素之间的运算(两个矩阵的行和列相等)
2.点乘运算
矩阵的行列一样,对应元素相乘
3.矩阵间乘法
A(m*n)*B(n*m)--m*m

4.2求矩阵的行列式和逆

>>det(A) %求矩阵的行列式
>如果矩阵的行列式不为0,则可以求得矩阵的逆。
>>inv(A)

4.3求内积

%例如有两个矩阵求内积a,b
>>a=[1+5i;2;3+6i;7-2i];
>> b=[2-i;4+3i;3-i;6];
>>s=sum(conj(b).*a)
>>s1=b'*a
>>s=dot(b,a)
%以上三个命令的结果都是一样的。

4.4.矩阵的相似化简和分解

求解Jordan标准型,使用jordan函数
>> A=[0 3 3;-1 8 6;2 -14 -10];
>> jordan(A) %默认的结果为上三角形式
ans =
 0     0     0
 0    -1     1
 0     0    -1
>> [v j]=jordan(A)  
v =
 4    -3    -3
 2    -3    -2
 -2     4     2

j =
 0     0     0
 0    -1     1
 0     0    -1

4.5 求矩阵的特征值,使用eig函数

>> A=[1 0 i;0 2 0;-i 0 1];
>> eig(A)   %求解特征值
ans =
 0
 2
 2

>> [e d]=eig(A)  % e表示特征向量,d表示特征值
e =      
   0.0000 + 0.7071i   0.0000 + 0.7071i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 1.0000i
  -0.7071 + 0.0000i   0.7071 + 0.0000i   0.0000 + 0.0000i

d =      
 0     0     0
 0     2     0
 0     0     2

4.6.向量和矩阵的范数(范数指的是距离),使用norm函数

>> A=[0 3 3;-1 8 6;2 -14 -10];
>> norm(A,1)  %ans = 25 ,1范数
>> norm(A,2)   %ans = 20.4523 ,2范数
>> norm(A,inf)  %ans = 26 ,无穷范数
>> norm(A,'fro')  %ans = 20.4695 ,f范数

4.7函数矩阵,计算函数矩阵A(x)的一阶和二阶导数,其中A(x)为:

A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]
>> syms x  %创建了一个符号
A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]

>> diff(A) %求一阶导 
ans(x) =
[  cos(x), exp(x),   0]
[ -sin(x),    2*x, 1/x]

>> diff(A,2) %求二阶导
>> diff(ans) %对二阶导的结果求导,即三阶导

4.8矩阵函数,使用funm函数计算矩阵函数

有矩阵C=[0 1;0 -2],求expC,sinC,cosC
>> C=[0 1;0 -2];
>> expC=funm(C,@exp)
>> sinC=funm(C,@sin)
>>cosC=funm(C,@cos)

5.线性方程组的求解

x+2y+3z=5
x+4y+9z=-2
x+8y+7z=6
步骤一:建立矩阵等式左边按行排,常数项按列排
即:>> A=[1,2,3;1,4,9;1,8,7];
	>> B=[5,-2,6]';
	>> x=inv(A)*B  % A的逆乘以B
	或者
	>> x=A\B

你可能感兴趣的:(MATLAB基础学习矩阵,MATLAB中的矩阵运算,MATLAB矩阵操作,MATLAB矩阵,MATLAB运算)