python矩阵的分解及其应用(LU分解)

目录

1、代码

2、结果


1、代码

author:hewang
qq:207962168

import numpy as np 
from scipy import linalg
def getMatrix(epsion):
    A=np.array([[epsion,1],[1,0]],dtype=np.float64)
    return A 
def getRHS():
    b=np.array([[1],[3.0]],dtype=np.float64)
    return b
def LUsolution(A,b,epsion):
    L=np.array([[1,0],[1/epsion,1]],dtype=np.float64)
    U=np.array([[epsion,1],[0,-1/epsion]],dtype=np.float64)
    y=np.linalg.solve(L,b)
    x=np.linalg.solve(U,y)
    return L,U,x
def LUPivotsolution(A,b,epsion):
    P=np.array([[0,1],[1,0]],dtype=np.float64)
    b=np.matmul(P,b)
    L=np.array([[1,0],[epsion,1]],dtype=np.float64)
    U=np.array([[1,0],[0,1]],dtype=np.float64)
    y=np.linalg.solve(L,b)
    x=np.linalg.solve(U,y)
    return L,U,x
def printDetails(L,U,x):
    print("L")
    print(L)
    print("U")
    print(U)
    print("solution of Ax=b is:")
    print(x)


def main():
   
    #epsion =1.0*2**(-52)
    #epsion =1.01*2**(-52)
    epsion =1.1*2**(-57)
    A=getMatrix(epsion)
    b=getRHS()
    print("epsilon:{}".format("%lf",epsion))
    print("=====WITHOUT pivot======")
    L,U,x=LUsolution(A,b,epsion)
    printDetails(L,U,x)
    print("=====WITH PIVOT=====")
    L,U,x=LUPivotsolution(A,b,epsion)
    printDetails(L,U,x)

if __name__ == '__main__':
    main()


2、结果

epsilon:%lf
=====WITHOUT pivot======
L
[[1.00000000e+00 0.00000000e+00]
 [1.31013807e+17 1.00000000e+00]]
U
[[ 7.63278329e-18  1.00000000e+00]
 [ 0.00000000e+00 -1.31013807e+17]]
solution of Ax=b is:
[[0.]
 [1.]]
=====WITH PIVOT=====
L
[[1.00000000e+00 0.00000000e+00]
 [7.63278329e-18 1.00000000e+00]]
U
[[1. 0.]
 [0. 1.]]
solution of Ax=b is:
[[3.]
 [1.]]

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值