MATLAB基础学习(02)

向量与矩阵

MATLAB中有很大一部分的内容都是用来解决线性代数问题!
1.向量
向量(vector)一维数值数组。
MATLAB允许创建列向量和行向量,列向量通过在方括号内把数值用分号(;)隔开来创建,对元素的个数没有限制,例如创建一个含有3个元素的向量,我们写成:

>>a=[2;3;4]
a=
  2
  3
  4

列向量的基本操作是通过引用创建时使用变量名来进行的,若我们要把一个列向量
乘上一盒数,这就叫做数量的乘法,假设我们要创建一个新的向量,它的元素是我们创建的向量a的元素的三倍,我们可以先定义一个数量(注意命令行末的分号禁止了输出)

>>c=3;
下一步,我们就像a是另一个变量一样进行计算
>>b=c*a
b=
   6
   3
   12

若要创建一个行向量,我们任然是把一组数值用方括号括起来,不过这次使用的分隔符是空格(space)或逗号(,)例如:

>>v=[1 6 9]
v=
   1  6  9
   或者试用逗号,例如
>>w=[3,4,5]
w=
   3  4  5

转置
我们用单引号(‘)代表转置操作,把列向量转化行向量的例子为:

>>a=[8;2;8];
>>y=a'
y=
  8  2  8
  加上一个(’)就代表转置,同理可以吧列向量转化为行向量

对向量进行四则运算
在执行加减法的操作的时候,两个向量之间必须类型相同,长度相同。并且直接引用变量名就可以执行操作。

从已存的变量创建大向量
MATLAB允许吧向量集合合并在一起创建新的向量,设m和n是已经存在的两个变量,各自带有a和b个元素,我们创建第三个变量w,它的前m个元素来自m,后n个元素来自v,新创建的元素一共有a+b个元素,这时可以写成w=[m;n];同理若创建合并形式的行向量,中间只需用逗号隔开。

>>A=[2;6;8];
>>B=[3;9;5];
>>D=[A;B]
D=
  2
  3
  5
  6
  8
  9
>>D=[A,B]
D=[2 3 5 6 8 9]

创建等差元素向量
有时需要创建带有等差元素的向量,差值q为一个实验,创建一个首元素为a;末元素为b的向量x的语法如下:
x=[a:q:b]

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

注意在MATLAB中的向量的乘方必须在幂运算符前(^)前加上英文句号(.)

y=x.^2

在创建等差数组的过程中,也可以适应负的递增量(即递减)。例如,我们创建一个从100到80,以5递减的过程

u=[100:-5:80]
u=
   100 95  90  85  80

我们也可以使用linspace命令创建行向量,这向量含有a到b之间间隔相等(等差)的n个元素。linspace(a,b)创建了a、b之间含有100个等差元素的向量,而linspace(a,b,n)创建了a,b之间含有n个等差元素的向量。不管是哪种形式,MATLAB自动确定元素之间的增量。
MATLAB还允许创建n个对数值间隔相同的行向量。使用格式为:
logspace(a,b,n)

>>logspace(1,2,5)
ans=
   10.0000   17.7828   31.6228  56.2341  100.0000
另一个例子
>>logspace(-1,1,6)
ans=
  0.1000  0.2512  0.6310  1.5849  3.9811  10.0000

特征化向量
①命令length返回向量中包含元素的个数,例如:
length命令既可以应用到行向量和列向量也能应用到矩阵

>>A=[2;3;4;5;6;7];
>>length(A)
ans=
     5
>>B=[1;1];
>>length(B)
ans=
    2

②使用max或者min命令还可以找出向量中数值最大和最小的元素

>>A=[2 3 4 5 6 7 8 9 10];
>>max(A)
ans=
    10
>>min(A)
ans=
    2

③向量的模
首先使用(.*)得到元素的平方,然后使用sum函数进行求和,最后对和使用sqrt进行开方

>>a=[0;3;4];
>>a.*a
ans=
   0
   9
   16
>>b=sum(a.*a)
b=
   25
   向量的模就是这个得数的平方根:
  >> mag=sqrt(a)
  mag=
     5

注意若变量中包含复数,计算向量的模的时候应该注意。要计算复数行向量的模,必须计算该向量的共轭复数向量。
④向量的绝对值、abs(向量)

>>a=[-1,-4,8]
b=abs(a)
b=
   1   4   8

向量的点乘和叉乘(数量积和向量积)
两个向量点乘可以使用dot(a,b)
点乘可以用来计算向量的模

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

对于带有复数元素的向量,dot也能正确计算
向量的另一个重要操作就是叉乘,这两个向量必须是三维的。例如

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

引用向量的元素,向量v的第i个元素可以用v(i)来引用,例如:

>>A=[12;14;25;6;67;78;5]
>>A(2)
ans=
    14
 >>A(5)
 ans=
     19
     若适应冒号——如v(:)——来引用向量,等于告诉MATLAB列出向量的所有元素:
     >>A(:)
     ans=
         12
         14
         25
         6
         67
         78
         5

我们还可以选出向量中某一范围内的元素,本节中我们一直使用的向量A有7个元素,可以用A(4:7)选择出第4到第7个元素构成一个新的,含有4个向量;

>>v=(4:7)
   v=
      6
      67
      78
      5

矩阵的基本操作
矩阵是两维数字数组,要在MATLAB中创建矩阵,输入的行各元素之间用空格或者逗号分隔,行末使用分号标记。

>>A=[-1,6;7,11]
A=
    -1  6
    7  11
    
>>B=[2,0,1;-1,7,4;3,0,1]
B=
    2   0   1
   -1   7   4
    3   0   1

向量的很多操作可以延伸到矩阵的操作,所有的带有n个元素的列向量是一个有一列n行的矩阵,所有的带有n个元素的行向量是一个有一行n列的矩阵。例如,数量相乘可以通过引用矩阵的名称来进行
常用的矩阵操作如下:

数乘数字*矩阵
加 or 减两个 矩阵的行数和列数相等
转置矩阵’
数组乘法.*实际上就是两个同型矩阵元素和元素的相乘
>>A=[12 3;-1 6];B=[4 2;9 1];
>>C=A.*B
C=
  48  6
  -9  6

end函数
它对于创建子数组的下标非常有用,当用到一个函数的下标时,end会返回下标最大值

矩阵相乘
①点乘,就是两个同型矩阵对应位置的元素进行相乘。(就是数组相乘)
②矩阵相乘,没有(.),是直接进行两个矩阵相乘
##注意事项
①把一个数字添加到一个数组上面(向量或矩阵)中,就是把数量值加到数组的每一个元素上面

>>a=[1 2 3 5];
>>b=2
>>=a+b
c=
   3  4  5  7

②我们也可以在数组上进行左除或者右除,因此两组数字必须同型。

>>a=[2 4 6 8];b=[2 2 3 1];
>>c=a ./ b
c=
  1 2 2 8

凡是我们能想到的数学操作,在MATLAB中都能通过数组实现
例如
求一个矩阵的平方

>>B=[2 4;-1 6]
>>B .^ 2
ans=
   4 16
   1 36

特殊类型的矩阵
单元矩阵就是一个对角线为非零元素但是其他元素为零的方形矩阵。创建一个n*n的单元矩阵就用 eye(n)

创建一个4*4的单位阵
>>eye(4)
ans=
    1   0   0   0
    0   1   0   0
    0   0   1   0
    0   0   0   1

零矩阵
要创建nn的零矩阵,输入zeros(n);另外可以输入zeros(m,n)创建mn的矩阵;
创建整个元素都为1的矩阵,只需要输入ones(n)或ones(m,n)即可分别创建nn和mn的矩阵。
引用矩阵元素
在MATLAB中,矩阵的单个元素或整列都能被引用

>>A=[1  2  3;4  5  6;7  8  9]
   我们可以使用A(m,n)选出第m行n列的元素,例如:
   >>A(2,3)
   ans=
       6
   要引用第i列的所有元素,我们输入A(:i)。例如,我们要选出第二列的所有元素
   >>A(: , 2)
   ans=
      2
      5
      8
要选出从第i列到第j列之间的所有元素,我们输入A(:,i:j)。下面的例子返回第2列和第3列的元素。
A(:,2:3)
ans=
   2   3
   5   6
   8   9
我们可以选出小块或子矩阵
仍然使用刚才的矩阵,选出第二行到第三行,第一列到第二列的矩阵。
>>A(2:3 , 1:2)
ans=
    4   5
    7   8
同时可以使用这些引用改变矩阵的值,下面让我们把第一行和第一列元素的值改为-6
>>A[1,1]=-6
A=
  -6  2  3
   4  5  6
   7  8  9

若在MATLAB中创建新的数组。只需要在方括号[]里面留空就行,可以用它来删除矩阵的行或者列。例如删除A的第二行:

>>A(2,:)=[]
A=
-8  2  3
 7  8  9
 本操作把3*3的矩阵变成了2*2的矩阵:

另外

>>E=A([1,1,1,1],:)
E=
   -6  2  3
   -6  2  3
   -6  2  3
   -6  2  3

下面这个例子引用两次A的第一行创建新矩阵:

F=A([1,2,1], :)
F=
   -6  2  3
    7  8  9
   -6  2  3

行列式与线性系统求解
几个常用的命令
1.求解矩阵行列式 det(A)
2.求逆矩阵inv(A)
3.求解矩阵的秩rank(A)
注意,求解逆矩阵的时候,要先判断det(A)是否为0
4.求矩阵方程的解,一般用左除的方式
5.当方程组具有无穷的解的时候(即det(A))不是0
此时可以使用伪逆矩阵来解这个方程。pinv(A)

>>A=[3  -2;6  -2]
A=
    3  -2
    6  -2
>>det(A)
ans=
    -6
    ......
    此处省略命令的输入方式

有一种魔方矩阵(幻方)是一种 n 2 n^2 n2形式的矩阵,矩阵的元素从1到 n 2 n^2 n2之间,并且行列的式的行和等于列和,使用magic命令可以计算出来

>>A=magic(8)
A =

    64     2     3    61    60     6     7    57
     9    55    54    12    13    51    50    16
    17    47    46    20    21    43    42    24
    40    26    27    37    36    30    31    33
    32    34    35    29    28    38    39    25
    41    23    22    44    45    19    18    48
    49    15    14    52    53    11    10    56
     8    58    59     5     4    62    63     1
此时要化简阶梯型矩阵
需要命令
rref(magic(8))

ans =

     1     0     0     1     1     0     0     1
     0     1     0     3     4    -3    -4     7
     0     0     1    -3    -4     4     5    -7
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0

矩阵的分解
MATLAB可以快速的对矩阵进行LU,OR或者SVD分解,
对矩阵进行LU分解写成:
[L,U]=lu(A)

>> A=[-1 2 0;4 1 8;2 7 1];
>> [L,U]=lu(A)

L =

   -0.2500    0.3462    1.0000
    1.0000         0         0
    0.5000    1.0000         0


U =

    4.0000    1.0000    8.0000
         0    6.5000   -3.0000
         0         0    3.0385

另外我们还可以使用LU分解求线性方程组,假设A是某个方程组的系数矩阵
b=[12 -8 6]’
方程组的解可以通过两次左除得到
x=U(L\b)

>> b=[12;-8;6];
>> x=U\(L\b)

x =

   -6.9367
    2.5316
    2.1519

练习题
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值