我是一名研究生,我的一位教授不喜欢他的学生使用"黑盒子"当我们可以轻松地“#34;我们自己编写一个函数。
所以我需要能够在Matlab中编写一个函数,它通常能够获取输入矩阵的反转(可能大小为100x100到500x500)。我唯一的另一个指导是:"你应该使用迭代方法,而你的函数输入应该是你想要反转的矩阵和指定数量的容忍误差。您可以使用任何您想要的错误估算器。"
环顾四周,我发现了很多估算技术,可以让我们直接求解Ax = b而不是求解A ^ -1(想想Gauss-Seidel方法)。我唯一的其他提示是,将输入矩阵解构为上三角形,对角线和下三角形元素,然后以某种方式将它们全部单独反转可能是有用的。
显然,我没想到有人会给我一个代码。我想要的是,如果有人有一个很好的资源,可以给我一些基本的数值矩阵反演技术,我可以形成一个Matlab代码。
答案 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]
在前面的步骤之后,第一列中的零将为您带来a11。
现在,在row3中添加a22 / a32 * row2。这会将a32更改为零。重复所有关注的行。
在所有LARGER列上重复上一步。
您必须推广此方法以对大于3x3的基质进行操作,但模式应该很简单。完成步骤1-5后,将留下上三角矩阵。现在,你开始倒退了。您将第3行的一部分添加到第1行和第2行以将其第三列更改为零,然后将第2行的一部分更改为第1行以将第1行的第3列更改为零(再次将其概括为此可用于处理X由X matricies。
完成后,您将在左侧留下一个对角矩阵。将每一行乘以一个因子,将其更改为单位矩阵。
右边的结果是你的倒置矩阵!您必须找到将可接受的错误纳入其中的方法。