2013-05-03 3 views
-1

파이썬에서는 문제가 있습니다. 파이썬 2.X를 사용하고 나누기에 어려움이 있다는 것을 알고 있기 때문에 나는 from __future__ import division을 추가했으며 지금까지는 잘 작동합니다. 하지만이 프로젝트에서 int를 float로 덮어 쓰려고 할 때 작동하지 않는다는 것을 알았습니다. 더 작은 프로젝트에서 테스트했지만 제대로 작동했습니다.파이썬은 int를 float로 덮어 쓰지 않습니다.

여기에 무엇이 잘못되었는지 실마리가 있습니까? b[j]을 변경하지 않습니다

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

답변

3

이유 라인

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

코드에서 그 시점에서, (A[j][i]) 그것을 밖으로 인쇄 해보십시오 0입니다 당신이 볼 수 있다는 것입니다. 전 라인에

봐 : 당신은 A[i][i]을 취소 할 수 있습니다

A[j][i] = A[j][i] - (A[j][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

+0

@ ShuftY 확실한 것. 옆에있는 녹색 체크 표시를 클릭하여 대답을 승인 된 것으로 표시 할 수 있다는 것을 잊지 마십시오. –

관련 문제