-1

ここで Python に問題が発生しました。Python 2.X を使用していて、除算に問題があることがわかっているため、追加from __future__ import divisionしたところ、これまでのところ問題なく動作しています。しかし、このプロジェクトで int を float で上書きしようとするとうまくいかないことに気付きました。小さなプロジェクトでテストしましたが、うまくいきました。

ここで何が問題なのか、誰にも手がかりがありますか?

A = [
  [3, 3, 3],
  [1, 1, 2],
  [1, 0, 3]
]
b = [0, 0, 3]     

def gauss_elim(A,b):
    print A[0], b[0]
    print A[1], b[1]
    print A[2], b[2]    
    n = len(A)
    temp = []
    temp_b = []
    MAX = 0
    te = [0,0,0]

    for i in range(0,n-1):
        k=i
        for a in range(i,n-1):               
            ### Pivotsearch Start ###               
            if math.fabs(A[a][i]) < math.fabs(A[a+1][i]):
                MAX = (a+1)
                temp = A[i]
                A[i] = A[MAX]
                A[MAX] = temp

                temp_b = b[i]
                b[i] =b[MAX]
                b[MAX]=temp_b                   
            ### Pivotsearch End ###               
        for j in range(i+1, n):                 
            if A[j][i] == 0:                
               continue

            A[j][i] = A[j][i] - ( A[j][i] /  A[i][i]  ) *  A[i][i]
            b[j] = ( b[j] - (A[j][i])/(A[i][i]) ) #<<<< DOES NOT OVERWRITE
            k = k + 1

    print 'done:'        
    print A[0], b[0]
    print A[1], b[1]
    print A[2], b[2]

gauss_elim(A,b)
4

1 に答える 1

3

ラインの理由

b[j] = ( b[j] - (A[j][i])/(A[i][i]) )

変わらないb[j]のは、コードのその時点で(A[j][i])は 0 です。印刷してみてください。

前の行を見てください:

A[j][i] = A[j][i] - ( A[j][i] /  A[i][i]  ) *  A[i][i]

をキャンセルすると、次のA[i][i]ものが得られます。

A[j][i] = A[j][i] - A[j][i]
A[j][i] = 0

が使用されているかどうかにかかわらず、この同じ結果がさまざまな方法で発生するため、混乱した可能性がありますfrom __future__ import divisionfrom __future__ import divisionが含まれている場合はA[j][i]常に 0 になります。含まれていない場合はA[j][i]0- にはなりませんが(A[j][i])/(A[i][i])、次の行で.

于 2013-05-03T14:33:35.967 に答える