向量与矩阵

目录

向量基本知识

列向量:

横向量:

转置

等差元素向量语法:x=[xi:q:xe]例如:

特征化向量

1.命令length返回向量中包含元素的个数:

2.求向量的模:

向量的点乘和叉乘:

1.点乘:

2.叉乘:

 引用向量元素:

矩阵基本操作:

 矩阵相乘(去掉.):

其他操作

单位矩阵:

引用矩阵元素:

行列式与线性方程组求解:

方程的一种解法:


向量基本知识

列向量:

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

后面同样的规律。为什么?

可以看一下这个博主的转载:https://blog.csdn.net/july_unity/article/details/79265912?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%90%91%E9%87%8F%E5%8F%89%E4%B9%98&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-79265912.pc_search_mgc_flag&spm=1018.2226.3001.4187

 引用向量元素:

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×的零矩阵,我们输入 zeros(n)。我们还可以输入 zeros(mn)创建 m×的矩阵,当然也完全可以创建整个元素都为 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)

要选出从第 列到第 列之间的所有元素,我们输入 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(2,:)=[]
A =
 -8 2 3
 7 8 9

当然也可以通过引用矩阵中的行或列来创建新的矩阵。在本例中,我们复制 矩阵的第一行四次来创建一个新矩阵:

>> 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

 行列式可以用来找出一个线性方程组是否有解。考虑下面的方程组:

5+ 2- 9= -18

-9- 2+ 2= -7

6+ 7+ 3= 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

 注意除号的方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值