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