2013-05-03 71 views
-1

我在Python中遇到了一些麻煩。使用Python 2.X並知道它在分割時遇到了一些困難,這就是爲什麼我加入了from __future__ import division並且它迄今爲止工作正常。但我注意到,當我想在這個項目中用浮點數覆蓋一個int值時,它不起作用,我在一個較小的項目中測試了它,但在那裏工作正常。Python不會用float覆蓋int

有沒有人有線索有什麼不對?

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) 
+0

'float'比'int'寬(大)? – Shark 2013-05-03 14:29:29

回答

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 division已經用過。如果已包含from __future__ import division,則A[j][i]將始終爲0.如果未包含,則A[j][i]將不爲0-,而是(A[j][i])/(A[i][i]),在以下行中,將爲

+0

哦人 - .- ...謝謝:) – ShuftY 2013-05-03 14:42:51

+0

@ShuftY當然可以。不要忘記,您可以通過點擊旁邊的綠色複選標記來將答案標記爲已接受。 – 2013-05-03 14:43:40