Matlab入门基础 note2——向量和矩阵基础

Matlab Chapter II

向量
*表示向量数乘;
'表示向量转置;
matlab允许向量和合并:w = [ u; v ]或者f = [ u v ]
我们可以用x = [0(初值):2(步长*可以为负):10(终止值)]来创造一个从0到10点偶数向量组:

>> x = [ 0; 2; 10]
x = 
	0	2	4	6	8	10

.^表示向量的乘方,而不能直接用^符号
linspace(a,b,n)可以创建a、b之间含有n个等差元素的向量;

向量运算
dot(a,b)或者.*均可以表示向量点乘;
我们可以用如下命令来计算向量的模:

>> J = [ 0; 3; 4];
mag = sqrt(dot(a,a))
mag =
	5

cross(A,B)表示向量的叉乘,叉乘的向量必须是三维的:

>> A = [ 1 2 3]; B = [ 2 3 4];
>> C = cross(A, B)
C =
	-1	2	-1

V(i)引用v的第i个元素;
v(:)将引用全部元素;
v(4:6)表示一定范围内的元素,例如:

>> v = A (4:6)
v =
	0
	4
	4

表示从A中选取第4个到第6个元素组成新的向量

矩阵
.*表示矩阵的数组乘法(而非矩阵乘法),意味着对应元素相乘;
*则表示矩阵乘法,它要求运算的矩阵符合矩阵相乘的条件;
./.\分别表示数组的右除和左除;
eye(n)可以创建nxn的单元矩阵,zeros(n)可以创建nxn的零矩阵,ones(n)可以创建nxn的1矩阵;

引用矩阵元素
Matlab中矩阵的单个元素或整列都可以被引用:
A = [ 1 2 3; 4 5 6; 7 8 9]
我们可以用`A(m,n)选出m行n列的元素:

>> A(2,3)
ans =
	6

可以用A(:,i)引用第i列的所有元素:

>> A (:,2)
ans =
	2
	5
	8
  • 可以用A(:,i:j)选出从第i列到第j列的所有元素;
  • 可以用A(m:n,i:j)或A([m,n],[i,j])选取子矩阵;

可以通过空数组来删除矩阵的行或列:

>> A(2,:)=[]
A = 
	1	2	3
	7	8	9

上述操作将3x3矩阵变为2x3矩阵;

行列式与线性求解
det(A)表示计算矩阵A的行列式:

>> A = [1 3; 4 5]
>> det(A) =
ans =
	-7

我们可以用行列式判断矩阵解的情况,当我们需要表示多个解时,我们就需要一组基础解系:
null()函数表示了矩阵的零空间,我们可以用null(A,'r')来返回一组有理基础解:

>> A = [3 0 -1 0; 8 0 0 -2; 0 2 -2 -1];
z=null(A)

z =

     700/4999  
     502/717   
     799/1902  
     601/1073 

>>y=null(A,'r')

y =

       1/4     
       5/4     
       3/4     
       1       
  • rank(A)=n 等价于 null(A)为nx0的空矩阵,即Ax=b有唯一解;

秩&逆矩阵

矩阵的秩是矩阵向量间线性无关性的度量,可以用rank(A)求出;

我们也可以通过秩来判断解的情况:

对于mxn阶矩阵Ax=b而言,当且仅当rank(A)=rank(A b)时系统有解; 如果秩等于n,则解唯一;如果秩小于n,则有无穷多解;

inv(A)表示A的逆矩阵,当且仅当det(A)不等于0时,逆矩阵才存在,我们称其为可逆矩阵或非奇异矩阵(这样的矩阵一定是满秩的);

  • matlab同样可以求伪逆矩阵(或广义逆矩阵):pinv(A)

梯形阵
rref(A)可以求出A的最简梯形阵,例如对于幻方矩阵而言,手算是十分复杂的,而matlab可以轻易处理:

>> A=magic(5)

A =

      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       

>> rref(A)

ans =

       1              0              0              0              0       
       0              1              0              0              0       
       0              0              1              0              0       
       0              0              0              1              0       
       0              0              0              0              1       
  • magic(n)是求一个n阶幻方矩阵的语法,这样的矩阵各行和列包括对角线的和都相等,我们不妨来验证一下

sum语法结构: sum(A,dim)
A表示矩阵, dim={1,2};1表示对列求和, 2表示对行进行求和

我们继续以刚刚的A为例:

>> sum(A,1)

ans =

      65             65             65             65             65       

>> sum(A,2)

ans =

      65       
      65       
      65       
      65       
      65       

再通过一个简单的循环对对角线求和:

>> e=0;d=0;
  for i=1:5; j=6-i;
  b=A(i,i); c=A(i,j);
  d=d+b; e=e+c;
  end;
e,d

e =

      65       


d =

      65       

不难看到行、列与对角线之和均相等

矩阵分解
matlab可以快速对矩阵进行各类分解:

  • [L,U]=lu(A)表示对A进行LU分解;
>> A= [-1 2 0; 4 1 8; 2 7 1];
[L,U]=lu(A)

L =

      -1/4            9/26           1       
       1              0              0       
       1/2            1              0       


U =

       4              1              8       
       0             13/2           -3       
       0              0             79/26    


猜你喜欢

转载自blog.csdn.net/RiptidePzh/article/details/112982611