44.ilu函数

在MATLAB中,提供了ilu函数实现矩阵的不完全LU分解,ilu生成一个单位下三角矩阵、一个上三角矩阵和一个置换矩阵。函数的语法格式为:

ilu(A,setup):计算A的不完全LU分解。setup是一个最多包含五个设置选项的输入结构体。这些字段必须严格按照表1-2所示方法命名。可以在此结构体中包含任意数目的字段,并以任意顺序定义这些字段。忽略任何其他字段。

表1-2 setup的五个设置选项

ilu(A,setup):返回L+U-speye(size(A)),其中L为单位下三角矩阵,U为上三角矩阵。

[L,U]=ilu(A,setup):分别在L和U中返回单位下三角矩阵和上三角矩阵。

[L,U,P]=ilu(A,setup):返回L中的单位下三角矩阵、U中的上三角矩阵和P中的置换矩阵。

【例1-46】根据例1-45,下面继续分析。

运行程序,输出错误提示如下:

     错误使用ilu
     存在等于零的主元,请考虑减小调降容差或考虑使用'udiag'选项。

MATLAB无法构造不完全LU,因为它将生成奇异因子,奇异因子作为预设子条件使用时毫无用处。

可以使用减小的调降公差重试,如错误消息所示。

由于bicg使相对残差趋向于4.1410e-014(rr1的值),因此fl1为0。当通过不完全LU分解(使用调降公差1e-6)预调节时,在第6次迭代(it1的值)中,相对残差小于规定容差1e-12。输出rv1(1)为norm(b),输出rv1(7)为norm(b-A∗x2)。

通过从初始估计值(迭代数0)起在每次迭代中绘制相对残差,可以跟踪bicg的进度。

运行程序,效果如图1-19所示。

图1-19 新的bicg轨迹图