线性方程组直接LU求解 python3程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jingtaoqian8521/article/details/79880861
'''
高等工程数学只LU三角分解
'''

from numpy import*

def decA(A):
    A=array(A)#读入矩阵
    n=len(A)
    L=zeros((n,n))#创建同等大小的矩阵L U
    U=zeros((n,n))
    U[0,:]=A[0,:]#直接赋予LU矩阵比较明显的元素,免去后边计算麻烦
    L[:,0]=A[:,0]/U[0,0]#L矩阵的第一列
    for i in range(n):
        L[i,i]=1#这里可以在前边创建矩阵时直接创建等大的单位阵
    for row in range(n-1):
        flag=1#标志位,强制后边L相关元素只计算一次
        for col in range(row,n-1):
            U[row+1,col+1]=A[row+1,col+1]-dot(L[row+1,:],U[:,col+1])#计算U矩阵非零元素
            if (row+2<n)&(flag==1):#计算L矩阵非零元素
                for k in range(1,row+2):
                    L[row+2,k]=(A[row+2,k]-dot(L[row+2,:],U[:,k]))/U[k,k]
                    '''
                    以上公式参考高等工数
                     '''
            flag+=1#标志位自加,以免重复计算同一位置元素
    print(U)#打印
    print(L)
                
def main():#测试函数
    A=[[33.2237, 7.4701, 0.4199,11.5280,1.2960],  
       [39.5138, 15.1115, 1.4448,12.5720,2.4040],  
       [45.6841,24.6433, 3.3232,13.5180,3.6460],
       [51.3802,36.2127,6.3807,14.3360,5.0520],
       [54.8785,49.7818,11.2896,14.8160,6.7200]]#数据来源于高等工程数学例题
    decA(A)
    B=[[2,2,2],
       [3,2,4],
       [1,3,9]]
    decA(B)
main()

猜你喜欢

转载自blog.csdn.net/jingtaoqian8521/article/details/79880861