如何在MATLAB中选择高斯消元法求解Ax = b?

时间:2016-03-18 04:22:47

标签: matlab linear-algebra

我有一个关于求解线性方程Ax=b的问题,其中x未知,A是方阵NxN和非奇异矩阵。

矢量x可以通过

解决
x=inv(A)*b 

x=A\b 

在Matlab中,'\'命令调用一种算法,该算法取决于矩阵A的结构,并包括对A的属性的检查(小开销)。因此,它高度依赖于A结构。但是,A结构是未知的(即随机矩阵)。我想测量上述方程的复杂性。因此,为了公平比较,我需要修复我使用的方法。在这种情况下,我选择具有复杂度O(N^3)的高斯消元(GE)。我的问题是如何选择/修复方法(即GE)来解决上述方程?

1 个答案:

答案 0 :(得分:2)

一种方法是计算LU因子分解(假设A不对称)

{nnet}

其中L是具有单位对角线的下三角矩阵的排列,U是上三角形。这相当于高斯消元法。 然后,当你解决Ax = b时,你实际上先执行Ly = b然后执行Ux = y。 重要的是解决这些线性系统基本上是O(n ^ 2),而计算因子分解是O(n ^ 3)。因此,如果n很大,您只需测量计算LU分解所需的时间。

对于随机矩阵,您可以看到LU分解的复杂性,如

[L,U] = lu(A)

(将" 4"更改为更大或更小的内容,具体取决于您的电脑)。 在我的笔记本电脑上,我有这个结果

enter image description here

其中3的斜率(因此,O(n ^ 3)复杂度)相当清楚。