Matlab矩阵求逆

时间:2014-04-20 00:59:35

标签: matlab matrix inverse

我是一名研究生,我的一位教授不喜欢他的学生使用"黑盒子"当我们可以轻松地“#34;我们自己编写一个函数。

所以我需要能够在Matlab中编写一个函数,它通常能够获取输入矩阵的反转(可能大小为100x100到500x500)。我唯一的另一个指导是:"你应该使用迭代方法,而你的函数输入应该是你想要反转的矩阵和指定数量的容忍误差。您可以使用任何您想要的错误估算器。"

环顾四周,我发现了很多估算技术,可以让我们直接求解Ax = b而不是求解A ^ -1(想想Gauss-Seidel方法)。我唯一的其他提示是,将输入矩阵解构为上三角形,对角线和下三角形元素,然后以某种方式将它们全部单独反转可能是有用的。

显然,我没想到有人会给我一个代码。我想要的是,如果有人有一个很好的资源,可以给我一些基本的数值矩阵反演技术,我可以形成一个Matlab代码。

1 个答案:

答案 0 :(得分:1)

高斯 - 乔丹消除(见http://mathworld.wolfram.com/Gauss-JordanElimination.html)可能会成功。这不是一个简单的实现,但我确信通过一些努力你可以让它工作。请注意以下是该算法的非常 非正式草图:

  • 以[A I]

    开头

    [a11 a12 a13:1 0 0]

    [a21 a22 a23:0 1 0]

    [a31 a32 a33:0 0 1]

  • 将a21 / a11 * row1添加到row2

[a11 a12 a13:1 0 0]

[0 XXX YYY:r s t]

[a31 a32 a33:0 0 1]

  • 对第三行做同样的事情(即将a31 / a11 * row1添加到第3行)

在前面的步骤之后,第一列中的零将为您带来a11。

  • 现在,在row3中添加a22 / a32 * row2。这会将a32更改为零。重复所有关注的行。

  • 在所有LARGER列上重复上一步。

您必须推广此方法以对大于3x3的基质进行操作,但模式应该很简单。完成步骤1-5后,将留下上三角矩阵。现在,你开始倒退了。您将第3行的一部分添加到第1行和第2行以将其第三列更改为零,然后将第2行的一部分更改为第1行以将第1行的第3列更改为零(再次将其概括为此可用于处理X由X matricies。

完成后,您将在左侧留下一个对角矩阵。将每一行乘以一个因子,将其更改为单位矩阵。

右边的结果是你的倒置矩阵!您必须找到将可接受的错误纳入其中的方法。