矩阵LU分解中,Crout分解法的python实现

Crout分解法的原理

LU分解法分为Doolittle分解法和Crout分解法,其中这里只介绍Crout分解。

LU分解法的介绍如下图

在这里插入图片描述

这里有一个具体的实例

在这里插入图片描述

算法描述

在这里插入图片描述

Crout分解法的python代码

import numpy as np

def Crout(a, b):
    cout = 0
    m, n = a.shape
    if (m !=n ):
        print("无法用Crout。")#保证方程个数等于未知数个数
    else:
        l = np.zeros((n,n))
        u = np.zeros((n,n))
        s1 = 0
        s2 = 0

        for i in range(n):
           l[i][0] = a[i][0]
           u[i][i] = 1
        for j in range(1, n):
            u[0][j] = a[0][j] / l[0][0]
        for k in range(1, n):
            for i in range(k, n):
                for r in range(k): s1 += l[i][r] * u[r][k]
                l[i][k] = a[i][k] - s1
                s1 = 0        #每次求和完要初始化s1=0
            for j in range(k+1, n):
                for r in range(k): s2 += l[k][r] * u[r][j]
                u[k][j] = (a[k][j] - s2) / l[k][k]
                s2 = 0        #每次求和完要初始化s2=0
        print(u)
        print(l)

    #顺代求解
        y = np.zeros(n)
        s3 = 0
        y[0] = b[0] / l[0][0]  # 先算第一位的x解
        for k in range(1, n):
            for r in range(k):
                s3 += l[k][r] * y[r]
            y[k] = (b[k]-s3) / l[k][k]
            s3 = 0

        #回代求解
        x = np.zeros(n)
        s4 = 0
        x[n-1] = y[n-1]
        for k in range(n-2, -1, -1):
            for r in range(k+1, n):
                s4 += u[k][r] * x[r]
            x[k] = y[k] - s4
            s4 = 0

        for i in range(n):
               print("x" + str(i + 1) + " = ", x[i])
        print("x" " = ", x)



if __name__ == '__main__':      #当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
    a = np.array([[2,4,2,6],[4,9,6,15],[2,6,9,18],[6,15,18,40]])
    b = np.array([9,23,22,47])
    Crout(a, b)


  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值