Matlab中矩阵的建立、引用、删除、转置,inv求逆

矩阵的建立

  1. 利用直接输入法建立矩阵:
    将矩阵的元素用 中括号 括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。
>> A=[1,2,3;4,5,6;7,8,9]
A =
     1     2     3
     4     5     6
     7     8     9
  1. 利用已建好的矩阵建立更大的矩阵:
    一个大矩阵可以由已经建立好的小矩阵拼接而成。
>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C=[A,B;B,A]
C =
     1     2     3    -1    -2    -3
     4     5     6    -4    -5    -6
     7     8     9    -7    -8    -9
    -1    -2    -3     1     2     3
    -4    -5    -6     4     5     6
    -7    -8    -9     7     8     9

拓展:复数矩阵,可以用实部矩阵和虛部矩阵构成复数矩阵。

>> A=[1,2,3;4,5,6];
>> B=[6,7,8;9,10,11];
>> C=A+B*i
C =
   1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i
   4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i

冒号表达式:
产生数组,可理解为行数为1的特殊矩阵。

>> x=linspace(0,4,5)
x =
     0     1     2     3     4
>> x=linspace(0,6,5)
x =
         0    1.5000    3.0000    4.5000    6.0000
//可见linspace函数是均匀分配的。

结构矩阵和单元矩阵

1. 结构矩阵
格式为:(有点像C中的 结构体)
结构矩阵名.成员名=表达式

>> a(1).x1=10;  a(1).x2='lu';  a(1).x3=[11,21;34,78];
>> a(1)
ans = 
  包含以下字段的 struct:

    x1: 10
    x2: 'lu'
    x3: [2×2 double]
    
>> a(2).x1=11;  a(2).x2='liu';  a(2).x3=[12,22;35,79];
>> a
a = 
  包含以下字段的 1×2 struct 数组:

    x1
    x2
    x3    

所以啊,Matlab中的a(i)相当于C中的a[i]数组。
[1,5] 类似于离散中的集合{1,5}
[1:5] 是一种缩写,表示{1,2,3,4,5}

2.单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来。

>> b={10,'lu',[11,21;34,78];11,'liu',[12,22;35,79]};
>> b
b =
  2×3 cell 数组

    {[10]}    {'lu' }    {2×2 double}
    {[11]}    {'liu'}    {2×2 double}

矩阵元素的引用

1. 通过下标来引用矩阵的元素
A(3,2)表示A矩阵第3行第2列的元素。和C中二维数组不同的是,矩阵下标都是从1开始的。

>> A=[1,2,3;4,5,6];
>> A(2,3)
ans =
     6
>> A(4,5)=10
A =
     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0    10

注意这里和C也有不同,它不存在越界问题,如果越界会自动扩展矩阵,并默认矩阵中元素为0.

2. 通过序号来引用矩阵的元素
在 Matlab中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。

>> A=[1,2,3;4,5,6];
>> A(2)
ans =
     4
     >> A
A =
     1     2     3
     4     5     6   //C语言中是按行存储的,注意区分。

在这里插入图片描述

sub2ind函数:

>> A=[8,6,2;14,5,7]
A =
     8     6     2
    14     5     7
>> i=sub2ind(size(A),2,3)
i =          //这里的size(A)也可以用[2,3]代替
     6       //此处即A(2,3)可以用A(6)代替

也可以得到多个序号组成的矩阵:

>> A=[8,6,2;14,5,7];
>>  i=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
i =
     1     2
     6     4       A(1,1)即A(1);A(2,1)即A(2);
                   A(2,3)即A(6);A(2,2)即A(4)

ind2sub函数:

>>  A=[8,6,2;14,5,7];
>> [i,j]=ind2sub([2,3],6)
i =
     2
j =
     3
>> [i,j]=ind2sub(size(A),[1,2,6,4])
i =
     1     2     2     2
j =
     1     1     3     2

利用冒号表达式获得子矩阵

特别地有A( : ),即将矩阵A的每一列元素堆叠起来,成为一个列向量。

>> A=[1:5;6:10;11:15]
A =
     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
>> A(1:2,:)       //第1 2行的全部元素
ans =
     1     2     3     4     5
     6     7     8     9    10
>> A(1:2,1:2:5)    //第1 2行 1 3 5列的元素
ans =
     1     3     5
     6     8    10

end运算符:表示某一维的末尾元素下标

>> A=[1:5;6:10;11:15]
A =
     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
>> A(end,:)
ans =
    11    12    13    14    15
>> A(end,end)
ans =
    15

利用空矩阵删除矩阵的元素

空矩阵是指没有任何元素的矩阵。

>> x=[]
x =
     []               x即为一个空矩阵
>> A=[1:5;6:10;11:15]
A =
     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
>> A(:,[2,4])=[]
A =
     1     3     5
     6     8    10
    11    13    15

表示删除第2列和4列的元素。

改变矩阵的形状

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。

>>  A=[1:5;6:10;11:15]
A =
     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
>> B=reshape(A,5,3)
B =
     1    12     9
     6     3    14
    11     8     5
     2    13    10
     7     4    15

这里可以和前面学的A( : ) 结合起来,将矩阵A的全部元素形成一个列向量。即不输出A( : ),而是将其重定向赋值给B。

>> A=[1:3;4:6]
A =
     1     2     3
     4     5     6
>> B=A(:)
B =
     1
     4
     2
     5
     3
     6

inv函数

使用inv时,必须对象为方阵,得到矩阵的逆矩阵。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值