应用MATLAB求解线性代数题目(一)——行列式

MATLAB是基于矩阵的、用于进行数学和工程计算的系统。我们可以将MATLAB设想成某种技术计算的语言。MATLAB处理的所有变量都是矩阵。所以,运用MATLAB可以轻松地解决一些线性代数题目。

行列式的求解针对的是方阵,求解行列式应先定义一个矩阵(方阵)。

>> A=[2 1 2;-4 3 1;2 3 5]

A =

     2     1     2
    -4     3     1
     2     3     5

>> d=det(A)

d =

   10.0000

对于分块矩阵或者高阶矩阵,可以采用下面的这种方法:

我们先了解矩阵合并的方法:

C = [A,B] 
C = [A B]       % 横向合并,要求A,B矩阵行数一样。逗号或者空格都行。

C = [A;B]       % 纵向合并,要求A,B矩阵列数一样。用分号隔开。

求矩阵B的行列式:

>> A=[1 0;-1 2];
>> B=[1 0;0 1];
>> C=[1 0;-1 -1];
>> D=[4 1;2 0];
>> E=[A,B]

E =

     1     0     1     0
    -1     2     0     1


>> F=[C,D]

F =

     1     0     4     1
    -1    -1     2     0

>> ans=[E;F]

ans =

     1     0     1     0
    -1     2     0     1
     1     0     4     1
    -1    -1     2     0

>> d=det(ans)

d =

    -4

这种方法有点复杂,定义一个分块矩阵有另一种方法:


>> C = {[1],    [2 3 4];
     [5; 9], [6 7 8; 10 11 12]}

C =

  2×2 cell 数组

    {[       1]}    {1×3 double}
    {2×1 double}    {2×3 double}

>> D=cell2mat(C)

D =

     1     2     3     4
     5     6     7     8
     9    10    11    12

这里形成的C的数据类型是元胞数组。下面是MATLAB官方的介绍文档

元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号 () 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。

MATLAB中的元胞数组类似于C语言中的结构体,可以包含多种类型的变量。

元胞数组的定义:

>> C = {1,2,3;
     'text',rand(5,10,2),{11; 22; 33}}

C =

  2×3 cell 数组

    {[   1]}    {[          2]}    {[     3]}
    {'text'}    {5×10×2 double}    {3×1 cell}

元胞数组的引用:

>> C(2,1)  %引用时用圆括号,结果的数据类型为元胞数组

ans =

  1×1 cell 数组

    {'text'}

>> C{2,1}  %引用时用花括号,结果的数据类型为字符型

ans =

    'text'

顺便提一下与MATLAB的矩阵分块有关的函数,即mat2cell()和cell2mat()

mat2cell 函数就是将矩阵转化成胞元数组(cell array),用数学的语言讲就是矩阵分块。其意义和用法可以用 matlab 的帮助文档说清楚:

 该矩阵是60*50的;将行拆分为60=10+20+30,将列拆分为25+25.从而拆分为3*2个矩阵。

>> A

A =

     1     0     1     0
    -1     2     0     1
     1     0     4     1
    -1    -1     2     0

>> B=mat2cell(A,[1,1,2],[2,2]) 

B =

  3×2 cell 数组

    {1×2 double}    {1×2 double}
    {1×2 double}    {1×2 double}
    {2×2 double}    {2×2 double}

>> C=B(1,1)   %这里用的是小括号不会显示具体的内容

C =

  1×1 cell 数组

    {1×2 double}

>> D=B{1,1}  %这里用的是花括号

D =

     1     0

>> E=B(3,2)

E =

  1×1 cell 数组

    {2×2 double}

>> F=B{3,2}

F =

     4     1
     2     0

mat2cell()这个函数有一个比较有趣的地方。这里的2表示‘two’,就是谐音‘to’;MATLAB中有很多函数都是这样命名的。而mat表示矩阵,cell表示数据类型元胞数组,从字面意思理解这个函数的作用就是将矩阵转换为元胞数组数据类型。以此类推,cell2mat()函数的作用为将元胞数组转换为矩阵。

>> B

B =

  3×2 cell 数组

    {1×2 double}    {1×2 double}
    {1×2 double}    {1×2 double}
    {2×2 double}    {2×2 double}

>> A=cell2mat(B)

A =

     1     0     1     0
    -1     2     0     1
     1     0     4     1
    -1    -1     2     0

 我是小韩每天进步一点点,一名研0的研究生,刚开始写博客。希望和大家多多交流,一起进步!

求朋友点赞、收藏、关注哈,鼓励一下新人博主,或者提出建议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值