LU分解转化成LDU分解的步骤

Doolittle分解(LU分解)转化成LDU分解的步骤

matlab只提供了计算LU分解的函数,需要计算LDU分解可以参照如下
这里的L D U是doolittle分解衍生的LDU
需要注意,Jacobi迭代法法里面和SOR方法的L D U是相加关系,并不适用于本方法,需要直接提取主对角元素和上下三角

lu
LU 矩阵分解
语法
[L,U] = lu(A)
[L,U,P] = lu(A)
[L,U,P] = lu(A,outputForm)
[L,U,P,Q] = lu(S)
[L,U,P,Q,D] = lu(S)
[___] = lu(S,thresh)
[___] = lu(___,outputForm)
说明
示例
[L,U] = lu(A) 将满矩阵或稀疏矩阵 A 分解为一个上三角矩阵 U 和一个经过置换的下三角矩阵 L,使得 A = L*U。

示例
[L,U,P] = lu(A) 还返回一个置换矩阵 P,并满足 A = P'*L*U。在此语法中,L 是单位下三角矩阵,U 是上三角矩阵。

示例
[L,U,P] = lu(A,outputForm) 以 outputForm 指定的格式返回 P。将 outputForm 指定为 'vector' 会将 P 返回为一个置换向量,并满足 A(P,:) = L*U。

示例
[L,U,P,Q] = lu(S) 将稀疏矩阵 S 分解为一个单位下三角矩阵 L、一个上三角矩阵 U、一个行置换矩阵 P 以及一个列置换矩阵 Q,并满足 P*S*Q = L*U。

[L,U,P,Q,D] = lu(S) 还返回一个对角缩放矩阵 D,并满足 P*(D\S)*Q = L*U。行缩放通常会使分解更为稀疏和稳定。

[___] = lu(S,thresh) 可结合上述任意输出参数组合指定 lu 使用的主元消去策略的阈值。根据指定的输出参数的数量,对 thresh 输入的要求及其默认值会有所不同。有关详细信息,请参阅 thresh 参数说明。

示例
[___] = lu(___,outputForm) 以 outputForm 指定的格式返回 P 和 Q。将 outputForm 指定为 'vector' 以将 P 和 Q 返回为置换向量。您可以使用上述语法中的任何输入参数组合。

那么,如何快速的将LU分解化为LDU分解
我们知道 LU分解和LDU分解的L是完全相同的,只需要改动U
将LU分解的U记作U~
U~=DU
其中D可得,为U的对角元素
由此可知 matlab的最简洁LDU分解代码

[L,U]=lu(A)
for i=1:n
  D(i,i)=U(i,i) 
end
U=D\U

示例

A=[4,-1,0,-1,0,0;-1,4,-1,0,-1,0;0,-1,4,0,0,-1;-1,0,0,4,-1,0;0,-1,0,-1,4,-1;0,0,-1,0,-1,4]
[m,n]=size(A)
D=eye(n)
[L,U]=lu(A)

for i=1:n
  D(i,i)=U(i,i) 
end
U=D\U

在此吐槽冯果忱 黄明游根本在60页偷懒没写
关联: matlab 数值分析 数值代数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值