我是一名研究生,当我们可以自己“轻松”编写函数时,我的一位教授不喜欢他的学生使用“黑匣子”函数。

因此,我需要能够在Matlab中编写一个函数,该函数通常可以采用输入矩阵的逆函数(大小可能为100x100至500x500)。 我唯一拥有的其他指导是:“您应该使用迭代方法,而函数输入应该是您要求逆的矩阵和指定数量的可容忍误差。您可以使用任何想要的误差估计器。”

环顾四周,我发现了许多估计技术,这些技术使我们可以直接求解Ax = b,而不是求解A ^ -1(认为是高斯-塞德尔方法)。 我仅有的另一个提示是,将输入矩阵解构为上三角,对角和下三角元素,然后以某种方式分别将它们全部反转可能会很有用。

显然,我不希望有人给我代码。 我要问的是,如果有人拥有一个很好的资源,可以为我提供某种基本的数值矩阵求逆技术,我可以将其转化为Matlab代码。

===============>>#1 票数:1 已采纳

高斯-乔丹消除法(请参阅http://mathworld.wolfram.com/Gauss-JordanElimination.html )可以解决问题。 这不是一个简单的实现,但是我敢肯定,您可以通过一些努力使它正常工作。 请注意,以下是该算法的非常 非正式的草图:

  • 从[AI]开始

    [a11 a12 a13:1 0 0]

    [a21 a22 a23:0 1 0]

    [a31 a32 a33:0 0 1]

  • 将a21 / a11 *第1行添加到第2行

[a11 a12 a13:1 0 0]

[0 XXX YYY:第一个]

[a31 a32 a33:0 0 1]

  • 对第三行执行相同的操作(即,将a31 / a11 * row1添加到row3)

完成上述步骤后,第一列中的零将使您领先a11。

  • 现在,将a22 / a32 * row2添加到row3。 这会将a32更改为零。 在所有以下行上重复。

  • 在所有更大的列上重复上一步。

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

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

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

  ask by user2785214 translate from so

未解决问题?本站智能推荐: