目录
向量基本知识
列向量:
a=[2;1;4]
数量乘法:
a=[2;1;4]
c=3
b=c*a
横向量:
a=[2,1,4]
或是:
a=[2 1 4]
转置
直接举例子:
a=[2;1;4]
b=a'
得到:
b =
2 1 4
行向量转化为列向量也是一样的。
【向量也可以相加减,这里不说了】
两个向量可以组合成一个向量:
a=[2,3,4]
b=[5,6,7]
c=[a,b]
得到:
c =
2 3 4 5 6 7
横向量列向量都可以。
等差元素向量语法:x=[xi:q:xe]例如:
a=[1:5:20]
得到:
a =
1 6 11 16
递增或递减都是可以的。
等差也可以使用linspace(a,b)这表示在a和b之间含有100个等差元素的向量。
linspace(a,b,n)表示a和b之间含有n个等差元素的向量。
甚至可以允许n个对数值相隔相同的行向量,格式为logspace(a,b,n),例如:
logspace(1,3,3)
得到:
ans =
10 100 1000
%表示10的一次幂与10的3次幂之间的3个数
特征化向量
1.命令length返回向量中包含元素的个数:
x=[3;4;5;6]
length(x)
输出:4
将length换成max或min求最大值或者最小值。
2.求向量的模:
首先,先别着急,介绍一下点乘(为了进行数组之间的乘法):
x=[3;4;5;6]
m=x.*x
输出:
m =
9
16
25
36
求这个干什么的呢?众所周知,向量的模的公式为:
所以我们需要v^2再求和
x=[3;4;5;6]
m=sum(x.*x)
输出:
m =
86
再求平方根:
x=[3;4;5;6]
m=sum(x.*x)
n=sqrt(m)
得到:
n =
9.2736
好的,一般向量会求模了,复数的怎么办?
要计算复数行向量的模,必须先计算该向量的共轭复数向量。
数学方法我们应该都会:
求复数的共轭复数,相乘再开根号。那么在代码中会使用就可以了呀:
x=[i;4i+1;9i;3+5i]
m=x'
n=sum(x.*m)
b=sqrt(n)
【这里部分知识还没学,后面应该会有】
输出:
b =
4.3827 - 0.4563i 8.9458 + 0.1677i 13.1482 - 1.3690i 10.4933 + 1.7630i
会说,我们求的不是模吗,这是个什么东西?好吧,我也不知道,改正方法倒是知道(个人觉得可能是必须是向量才能真正的被加到一起:
先使用conj向量计算共轭复数的向量:
x=[i;4i+1;9i;3+5i]
m=conj(x)
b=sum(x.*m)
y=sqrt(b)
输出:
y =
11.5326
只不过就是修改了那么一步。
其实在这里我们是以繁琐的方法来做的——只是为了演示方法和一些matlab命令, 后续,会学到如何自动计算向量的模。
3.求向量的绝对值,使用abs命令:
x=[4,5,-7]
y=abs(x)
输出:
y =
4 5 7
向量的点乘和叉乘:
1.点乘:
使用dot(a,b)命令计算:
a = [1;4;7]; b = [2;-1;5];
c = dot(a,b)
得到:
c =
33
与
a = [1;4;7]; b = [2;-1;5];
m=sum(a.*b)
答案相同所以dot也可以在求模中使用,甚至会更快一点。
j=[0;3;4]
f=dot(j,j)
mag=sqrt(f)
复数也可以哦:
u = [-i; 1 + i; 4 + 4i];
m=dot(u, u)
sqrt(m)
%对比一下上一种求法:
u = [i; 1+2i; 4];
v = conj(u)
b = sum(v.*u)
magu = sqrt(b)
%简洁了不少
2.叉乘:
要计算向量的叉乘,这两个向量必须是的三维的。例如:
A = [1 2 3]; B = [2 3 4];
C = cross(A, B)
得到:
C =
-1 2 -1
叉乘过程:
(a,b,c)×(x,y,z)=(bz-cy,cx-az,ay-bx)
观察:第一个位置是第一个向量的2×第二个向量的3-第二个向量的3×第一个向量的2
后面同样的规律。为什么?
引用向量元素:
A = [12; 17; -2; 0; 4; 4; 11; 19; 27];
>> A(2)
ans =
17
>> A(8)
ans =
19
%自行体会
>> A(:)
ans =
12
17
-2
0
4
4
11
19
27
>> v = A(4:6)
v =
0
4
4
矩阵基本操作:
怎样将这样的一个矩阵用matlab表示出来呢?
A = [-1,6; 7, 11]
好像前面有说过。
得到:
A =
-1 6
7 11
在向量中使用的很多操作也可以延伸到矩阵操作:
%数乘:
A = [-2 2; 4 1]
C = 2*A
%得到:
C =
-4 4
8 2
%相加减不演示了【前提是行数和列数相等】
转置:
C = [-4 4;8 2]
B=C'
%得到:
C =
-4 4
8 2
B =
-4 8
4 2
如果矩阵包含有复数元素,那么转置操作会自动计算复数的共轭值:
>> C = [1+i, 4-i; 5+2*i, 3-3*i]
C =
1.0000 + 1.0000i 4.0000 - 1.0000i
5.0000 + 2.0000i 3.0000 - 3.0000i
>> D = C'
D =
1.0000 - 1.0000i 5.0000 - 2.0000i
4.0000 + 1.0000i 3.0000 + 3.0000i
如果要转置复数矩阵的而不计算它的共轭值,那么我们使用(.'):
>> D = C.'
D =
1.0000 + 1.0000i 5.0000 + 2.0000i
4.0000 - 1.0000i 3.0000 - 3.0000i
我们可以进行数组相乘,注意这不是矩阵相乘。我们使用与向量相乘相同的符号(.*)。
>> A = [12 3; -1 6]; B = [4 2; 9 1];
>> C = A .* B
C =
48 6
-9 6
矩阵相乘(去掉.):
与数组相乘做对比:
>> A = [2 1; 1 2]; B = [3 4; 5 6];
>> A .* B %数组相乘
ans =
6 4
5 12
>> A * B %矩阵相乘
ans =
11 14
13 16
矩阵相乘的方法:
第一个矩阵第一行的每个数字,各自乘以第二个矩阵第一列对应位置的数字,然后将乘积相加。
所以规定:第一个矩阵的的行数等于第二个矩阵的列数。
按照这样的方法,得到新的矩阵的位置。图片来自:博主wmy0217_
其他操作
1.matlab允许你把数量添加到一个数组(向量或矩阵)中,即把数加到数组的每个元素中:
>> A = [1 2 3 4];
>> b = 2;
>> C = b + A
C =
3 4 5 6
2.也可以在数组上进行左除和右除。这时数组元素与元素匹配相除,因此两数组必须等大:
>> A = [2 4 6 8]; B = [2 2 3 1];
>> C = A ./ B
C =
1 2 2 8
左除同理。
3.可以对每个元素进行平方:
>> B = [2 4; -1 6]
B =
2 4
-1 6
>> B .^ 2
ans =
4 16
1 36
单位矩阵:
n×n,且对角线全为1,其他为0:
eye(5)
得到:
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
要创建全零矩阵:要创建 n×n 的零矩阵,我们输入 zeros(n)。我们还可以输入 zeros(m, n)创建 m×n 的矩阵,当然也完全可以创建整个元素都为 1 的矩阵:输入 ones(n)或ones(m,n)即可。
引用矩阵元素:
A = [1 2 3; 4 5 6; 7 8 9]
A(2,3)
%自行体会,得到:
ans =
6
要引用第 i 列的所有元素,输入 A(:,i)。例如,我们要选出第二列的所有元素:
A(:,2)
要选出从第 i 列到第 j 列之间的所有元素,我们输入 A(:,i:j)。下面的例子返回第二和第三列的元素:
A(:,2:3)
也可以选出小块或子矩阵。仍然用刚才的矩阵,我们选出第二到第三行同时处于第一和第二列的元素,写成:
A(2:3,1:2)
ans =
4 5
7 8
也可以通过这些引用改变矩阵的值。让我们把第一行第一列元素的值改为-8:
>> A(1,1) = -8
A =
-8 2 3
4 5 6
7 8 9
要在matlab中创建空数组,只需在方括号[]里留空即可。它可以用来删除矩阵的行或列。让我们删除 A 的第二行:
>> A(2,:)=[]
A =
-8 2 3
7 8 9
当然也可以通过引用矩阵中的行或列来创建新的矩阵。在本例中,我们复制 A 矩阵的第一行四次来创建一个新矩阵:
>> E=A([1,1,1,1],:)
E =
-8 2 3
-8 2 3
-8 2 3
-8 2 3
复制第一行所有列的意思。
下面这个例子引用两次 A 的第一行创建新矩阵:
>> A = [-8,2,3;7,8,9];
>> F = A([1,2,1],:)
F =
-8 2 3
7 8 9
-8 2 3
也可以是这一行的其中几个数:
A = [-8,2,3;7,8,9];
F = A([1,2,1],2:3)
得到:
F =
2 3
8 9
2 3
行列式与线性方程组求解:
matlab计算上式只需要使用det:
>> A = [1 3; 4 5];
>> det(A)
ans =
-7
行列式可以用来找出一个线性方程组是否有解。考虑下面的方程组:
5x + 2y - 9z = -18
-9x - 2y + 2z = -7
6x + 7y + 3z = 29
A = [5 2 -9; -9 -2 2; 6 7 3]
det(A)
得到:
ans =
437
不为0,代表方程有解:
A = [5 2 -9; -9 -2 2; 6 7 3]
b = [-18;-7;29]
A \ b
得出:
ans =
1.0000
2.0000
3.0000
方程的一种解法:
x - 2y + z = 12
3x + 4y +5z = 20
-2x + y +7z = 11
A = [1 -2 1; 3 4 5; -2 1 7]; b = [12; 20; 11];
C = [A b]
x = A \ b
得到:
x =
4.3958
-2.2292
3.1458
注意除号的方向。