zoukankan      html  css  js  c++  java
  • LU分解和求解线性方程组

     1 # coding:utf8
     2 import numpy as np
     3 
     4 def lu(mat):
     5     r,c=np.shape(mat)
     6     s=min(r,c)
     7     for k in range(s):
     8         x=1.0/mat[k][k]  # 将后续除法变成乘法
     9         for i in range(k+1,r):
    10             mat[i][k]=mat[i][k]*x  # L[1:][0]*U[0][0]=A[1:][0];A[0][:]=mat[0][:]
    11         for i in range(k+1,r):
    12             for j in range(k+1,c):
    13                 # U[1][2]*L[1][1]=A[1][2]-U[0][2]*L[1][0];L[1][1]=1
    14                 # L[2][1]*U[1][1]=A[2][1]-U[0][1]*L[2][0];下一个k时mat[i][j]/mat[k][k](i>j)
    15                 mat[i][j]=mat[i][j]-mat[k][j]*mat[i][k]
    16     return mat,c
    17 
    18 def solve(A,b):
    19     mat,n=lu(A)  # LU合并
    20     print mat  # [[16, 4, 8], [0.25, 4.0, -6.0], [0.5, -1.5, 9.0]]
    21     Z= np.zeros(n)  # L*Z=b U*X=Z
    22     X= np.zeros(n)
    23     Z[0]=b[0]
    24     for i in range(1,n):
    25         sumup=0
    26         for tmp in range(0,i):
    27             sumup+=mat[i][tmp]*Z[tmp]
    28         Z[i]=(b[i]-sumup)
    29     X[n-1]=Z[n-1]/mat[n-1][n-1]
    30     for i in range(n-2,-1,-1):
    31         sumup=0
    32         for tmp in range(i+1,n):
    33             sumup+=mat[i][tmp]*X[tmp]
    34         X[i]=(Z[i]-sumup)/mat[i][i]
    35     return X
    36 
    37 A=[[16,4,8],[4,5,-4],[8,-4,22]]
    38 y=[-4,3,10]
    39 print "The result of the fomula is:"+str(solve(A,y))  # [-2.25  4.    2.  ]
  • 相关阅读:
    nginx 域名跳转一例~~~(rewrite、proxy)
    军哥 LNMP 常见问题
    Zabbix安装
    PHP远程连接mysql
    Zend Studio 下载
    军哥LNMP优化
    网络流量监控分析工具 Ntopng 安装
    Linux VPS禁止某个IP访问
    DDoS deflate
    MySQL数据库的优化
  • 原文地址:https://www.cnblogs.com/qw12/p/6078578.html
Copyright © 2011-2022 走看看