線形方程式のパイソン--Jacobi反復アルゴリズムの複数の線形方程式の反復アルゴリズムの複数のPythonで実装反復アルゴリズム--Gauss・ザイデル反復アルゴリズム

マルチリニア式(テンソル)のアルゴリズム原理反復こちらを参照してください。確認したい場合は、原則として一部を共有を明らかにしない、メッセージを残してください

ガウス-ザイデル反復アルゴリズム:線形方程式のPythonの複数の反復アルゴリズム--Gauss -ザイデル反復アルゴリズムを実装

インポートのNPとしてnumpyの
 インポート

1.1ヤコビ反復アルゴリズム

DEF Jacobi_tensor_V2(A、B、デルタ、M、N - 、M):
    スタート = time.perf_counter() 開始タイミング 
    = 0検索に所定のステップ数以内収束をマーキングするための 
    X-np.ones =(N-)反復を起動 
    Xが= np.ones(N-) は、反復の中間結果を格納するために使用される 
    D = np.ones(N-) **アックスを格納するための対角部(M2)の 
    M1、M1 = 
    M2 = 2- M
      I におけるレンジ(M):
         プリント' X- ' 、X-)
        A = np.copy(A)
        得**(M-2)のアックス
         J における範囲(M-2):
            A = np.dot(A、X-)
        )2-M(D与える** Dxの(M-2)+(L 'U- +')X **(M-2)
        のための J 範囲( N-):
            D [J] = [J、J] 
            A [J、J] = M2 * A [J、J]
         反復的に更新
        するための J 範囲(N):
            X [J] =(B [J] -np.dot([J]、X-))/(M1 * D [J])
        は、精度要件を満たしているか否かを判断する
        場合 np.max(np.fabs(XX))< デルタ:
            探す = 1つの。
             BREAKの  
        X- = NP .copy(X)
    終了 = time.perf_counter()終了タイミング
    を印刷時間:、END- スタート)
     を印刷反復は、私は)
     を返す私は、開始・終了を、X-を探します

 

1.2生成関数生成関数とベクトルbの量:

 

DEF Creat_A(mは、N-): テンソル生成 
    サイズ= np.full(M、N-)
    X- = np.ones(N-)
     しながら 1 ランダムに生成されたテンソル所定形状A 
        A = np.randomを。 randint(-49,50、サイズ= サイズ)
         ループのうちその場合要件を満たすために、非特異かどうかをDxと**(M-2)を分析、 
        D = np.copy(A)
         のため I1 におけるレンジ(N):
              I2 におけるレンジ(N):
                 IF!I1 = I2:
                    D [I1、I2] = 0
         のための I における範囲(M-2 ):
                D = np.dot(D、X-)
        DET = np.linalg.det(D)
         IF DET =!0:
             BREAKの
    対角テンソルAは、支配的なので、対角面10回延長された
    ため I1 における範囲(N)
         のために I2 :レンジ(N)
             IF I1 == I2:
                [I1、I2] = [I1、I2] * 10
     プリント' A:' プリント(A)
     を返すAのおよび所与のXアックス**(M-1)に係る= Bは、 ベクトルBを生成DEF Creat_b(X、M): =


np.copy(A)
     のための I における範囲(M-1 ): = np.dot(X)
     の印刷' B:' プリントは、(A)
     を返します

 

1.3 S対称テンソル生成機能:

 

DEF Creat_S(M、N-): 対称テンソルBの生成 
    サイズ= np.full(M、N-)
    S = np.zeros(サイズ)
     を印刷' S ' 、S)の
     ための I 範囲(4 ):
        生成Nベクトルであり 
        、A = np.random.random(N)* np.random.randint(-5,6- 
        B = np.copy(A)
        回ランクの対称テンソルを取得する外積のために1-Aをmと量B 
        のための J における範囲(1-M。 ):
            B = 外部(B、A)
        異なるB重畳低ランクテンソルS 
        S = S + B
    印刷' S:' プリント(S)
     リターンS
 DEF :(B)外
    C = []
     のための I におけるB:
        c.append(iは * A)
     リターンnp.array(c)を
     返します

 

1.4実験A

 

DEF TEST_1():
    デルタ = 0.01 精密 
    。M = 3 の順序 
    。N- = 3 の寸法A 
    M = 200である#の反復ステップの最大数 
    X_real np.array =([2,3,4 ])
    A = Creat_A(M、N-)
    B = Creat_b(A、X_real、M)
    Jacobi_tensor_V2(A、B、デルタ、M、N-)

 

おすすめ

転載: www.cnblogs.com/Fengqiao/p/Jacobi_tensor.html