[初学笔记]矩阵

来源:互联网 发布:在线询问医生软件 编辑:程序博客网 时间:2024/06/12 18:04

1 建立矩阵和引用矩阵

(1)在MATLAB中,创建了一个矩阵输入逗号或空格分隔的数字在每一行元素,并用分号来标记每行末尾。

(2)要引用 mth 行 nth 列的一个元素,我们这样写: a (m,n)


>> a = [1 2 3; 4 5 6 ; 7 8 9 ]
a (2 , 3 )
a =
     1     2     3
     4     5     6
     7     8     9

ans =
     6


(3)引用m列中的所有元素,我们A型(m)。


>> a(:,3)
ans =
     3
     6
     9
>> a (3,: )
ans =
     7     8     9

(4)让我们创建一个较小的矩阵中的元素,第二和第三列:


>> a (:,2:3 )
a (2:3,:)
ans =
     2     3
     5     6
     8     9

ans =
     4     5     6
     7     8     9


(5)以同样的方式,则可以创建一个子矩阵的一个子部分的矩阵。

>> a = [1 2 3 4 5; 6 7 8 9 0; 5 4 3 2 1; 0 9 8 7 6];
sa = a(1:3,3:4)
sa =
     3     4
     8     9
     3     2


(6)可以删除整行或整列的矩阵分配一组空方括号[]该行或列。基本上,[]表示一个空数组。


>> a = [1 2 3 4 5; 6 7 8 9 0; 5 4 3 2 1; 0 9 8 7 6];
a (3,: ) = [ ]
a (:,3 ) = [ ]
a =
     1     2     3     4     5
     6     7     8     9     0
     0     9     8     7     6

a =
     1     2     4     5
     6     7     9     0
     0     9     7     6

(7)复制矩阵,顺序可以更换

>>
a = [1 2 3; 4 5 6 ; 7 8 9 ]
b = a ([2,3,2,3],:)
c = a (:,[2,3,2,3])
d = a (:, [2,1,2,1])
a =
     1     2     3
     4     5     6
     7     8     9

b =
     4     5     6
     7     8     9
     4     5     6
     7     8     9

c =
     2     3     2     3
     5     6     5     6
     8     9     8     9

d =
     2     1     2     1
     5     4     5     4
     8     7     8     7



2 矩阵的运算

(1)矩阵的加减法
可以参照向量的加减法
必须要有相同的行数和列数

>>
a = [1 2 3; 4 5 6 ; 7 8 9 ];
b = [4 5 6 ; 7 8 9 ; 1 2 3 ];
c = a + b
d = a - b
c =
     5     7     9
    11    13    15
     8    10    12

d =
    -3    -3    -3
    -3    -3    -3
     6     6     6

(2)矩阵的除法

必须要有相同的行数和列数

Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\B是A的逆矩阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.

一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。


两种方法的计算方式是不一样的,但是结果是一样的


>>
a = [1 2 ; 3 4 ];
b = [5 6 ; 7 8 ];
R = b/a
L = a\b
r = b * inv (a)
l = inv(a) * b

R =
   -1.0000    2.0000
   -2.0000    3.0000

L =
    -3    -4
     4     5

r =
   -1.0000    2.0000
   -2.0000    3.0000

l =
   -3.0000   -4.0000
    4.0000    5.0000


当矩阵和向量相除时,就要留意是行向量还是列向量了,那么用的左除和右除也不一样

>>
>> a = [1 2 ; 3 4 ];
b = [ 5 , 6];
c = [ 5 ; 6 ];

R = b/a
R =
   -1.0000    2.0000

>> R = c\a
R =
    0.3770    0.5574


下面是两个矩阵的每个位置上的数对应相除,如1行1个,对应相除
使用 点除法

>> a = [1 2 3; 4 5 6 ; 7 8 9 ];
b = [4 5 6 ; 7 8 9 ; 1 2 3 ];
b.\a
ans =
    0.2500    0.4000    0.5000
    0.5714    0.6250    0.6667
    7.0000    4.0000    3.0000
>> a.\b
ans =
    4.0000    2.5000    2.0000
    1.7500    1.6000    1.5000
    0.1429    0.2500    0.3333
>> a./b
ans =
    0.2500    0.4000    0.5000
    0.5714    0.6250    0.6667
    7.0000    4.0000    3.0000
>> b./a
ans =
    4.0000    2.5000    2.0000
    1.7500    1.6000    1.5000
    0.1429    0.2500    0.3333


matlab中不同行列数矩阵除法问题

https://www.zybang.com/question/eb6d97956a55e9b581e9ba143072e771.html
假如矩阵A=[a,b,c],B如图中所示,我想用A中的第一个元素a除以矩阵B中的第一行每个元素,用b除以B中第二行每个元素,c除以B中第三行每个元素,依次类推.请问高手们,把矩阵A和B做如何变换,能保证得到图中矩阵C.

说明:前提是要保证矩阵A的元素个数和矩阵B的行数相等,而矩阵B的列数程序已经考虑到了,可以是任意列数.



A = [72 36 12];
B = [1 2 3 1; 3 4 1 1; 4 2 1 1];
[X, Y] = meshgrid(B(1, :), A); % B(1, :)主要是为了获取B的列数
C = Y ./ B

结果:
C =
72 36 24 72
12 9 36 36
3 6 12 12


(3)矩阵的标量操作
加减乘除法
>> a = [1 2 3; 4 5 6 ; 7 8 9 ];
b = 5 ;
c = a + b
d = a - b
e = a * b
f = a/b
q = a\b
c =
     6     7     8
     9    10    11
    12    13    14

d =
    -4    -3    -2
    -1     0     1
     2     3     4

e =
     5    10    15
    20    25    30
    35    40    45

f =
    0.2000    0.4000    0.6000
    0.8000    1.0000    1.2000
    1.4000    1.6000    1.8000

下面有一则报错~~~~

Error using  \
Matrix dimensions must agree.

(4)矩阵的转置
和向量的转置是一样的,都是用符号 '
>>
b = [21 22 23;24 25 26; 27 28 29];
a = b'
a =
    21    24    27
    22    25    28
    23    26    29


(5)矩阵的串联
可以连接两个矩阵创建一个更大的矩阵。一对括号“[]”是连接运算符。

MATLAB允许两种类型的串联:

  • 水平串联

  • 垂直串联

当连接两个矩阵那些使用逗号分开,他们只是附加水平。它被称为水平串联。

另外,如果连接两个矩阵那些使用分号分开,他们被追加垂直。它被称为垂直串连。


>>
>> a = [1 2 3; 4 5 6 ; 7 8 9 ];
b = [21 22 23;24 25 26; 27 28 29];
c = [1 2 ; 4 5 ; 6 7 ];
d = [1 2 ; 4 5];
e = [a,b]
f = [a;b]
g = [a,c]
h = [a d]
e =
     1     2     3    21    22    23
     4     5     6    24    25    26
     7     8     9    27    28    29

f =
     1     2     3
     4     5     6
     7     8     9
    21    22    23
    24    25    26
    27    28    29

g =
     1     2     3     1     2
     4     5     6     4     5
     7     8     9     6     7
Error using horzcat
Dimensions of matrices being concatenated are
not consistent.


另外,可以看到d矩阵无法跟 和它不同列数或者行数的矩阵 进行串联


(6)矩阵的乘法

考虑两个矩阵A和B,如果A是m×n的矩阵,B是n x p矩阵,他们可以相乘产生一个m×n的矩阵C.矩阵乘法的是可能只有当A是列数n的数量相等在b行n

在矩阵乘法中,具有相应的列中的第二矩阵乘以第一矩阵中的行的元素。

第(i,j)个位置中的每个元素,将所得的矩阵C,是在第i行的第一矩阵具有第二矩阵的第j列中的相应元素的产品的元素的总和。

MATLAB中,矩阵乘法使用*运算符。


不需要对准

>> a = [1 2 3; 4 5 6 ; 7 8 9 ];
b = [21 22 23;24 25 26; 27 28 29];
c = [1 2 ; 4 5 ; 6 7 ];
d = a * b
e = a * c
d =
   150   156   162
   366   381   396
   582   606   630

e =
    27    33
    60    75
    93   117


下面是两个矩阵,每个矩阵对应的位置相乘(可参照矩阵除法的部分)
比如矩阵a=[a1;a2;a3;a4],  b=[b1;b2;b3;b4]
可以实现a.*b=[a1*b1;a2*b2;a3*b3;a4*b4]

使用点乘法

>> a = [1 2 3 ];
b = [21 22 23];
b.*a
ans =
    21    44    69
>> a.*b
ans =
    21    44    69