矩阵列主元三角分解

一,列主元三角分解定理

如果A为非奇异矩阵,则存在排列矩阵P使 PA=LU,其中L为下三角矩阵,U为上三角矩阵,即A=P-1LU

二,列主元三角分解Python代码

# 自己原创
def pivot_lu_decomposition(coefficient_matrix: np.ndarray, right_hand_side_vector: np.ndarray):
    """
    实现方程Ax=b系数矩阵A的pivoted LU decomposition
    :param coefficient_matrix: 初始系数矩阵A
    :param right_hand_side_vector: 初始常数列向量b
    :return: 排列矩阵P,单位下三角矩阵L,上三角矩阵U,常数列向量b
    """
    # first step: evaluate the lu decomposition condition
    rows, columns = coefficient_matrix.shape
    if rows == columns:  # judge if it is a square matrix
        for k in range(rows):  # 判断各阶顺序主子式是否为0
            if det(coefficient_matrix[:k + 1, :k + 1]) == 0:
                raise Exception("cannot generate LU decomposition")
        else:
            # pivot LU decomposition
            lower_triangular_matrix = np.eye(rows)
            permutation_matrix = np.eye(rows)
            for k in range(rows - 1):
                max_index = np.argmax(abs(coefficient_matrix[k:, k]))
                coefficient_matrix[[k, max_index + k], :] = coefficient_matrix[[max_index + k, k], :]
                right_hand_side_vector[[k, max_index + k], :] = right_hand_side_vector[[max_index + k, k], :]
                permutation_matrix[[k, max_index + k], :] = permutation_matrix[[max_index + k, k], :]
                for row in range(k + 1, rows):
                    multiplier = coefficient_matrix[row, k] / coefficient_matrix[k, k]
                    coefficient_matrix[row, k:] += -multiplier * (coefficient_matrix[k, k:])
                    right_hand_side_vector[row] += -multiplier * right_hand_side_vector[k]
                    lower_triangular_matrix[row, k] = multiplier
    else:
        raise Exception("ERROR:please pass a square matrix.")

    return permutation_matrix, lower_triangular_matrix, coefficient_matrix, right_hand_side_vector
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值