2016-10-11 64 views
0

我目前正在研究一個代碼來查找值C,然後我將與其他參數進行比較。但是,每當我嘗試運行我的代碼時,都會收到此錯誤:ValueError:數學域錯誤。我不確定爲什麼我收到這個錯誤,但我認爲這是我設置我的等式的方式。也許有更好的方法來寫它。這是我的代碼:ValueError:使用對數時的數學域錯誤

import os 
import math 


path = "C:\Users\Documents\Research_Papers" 

uH2 =5 
uHe = 3 
eH2 = 2 
eHe = 6 

R = ((uH2*eH2)/(uHe*eHe)) 

kH2=[] 
kHe=[] 

print(os.getcwd()) # see where you are 
os.chdir(path) # use a raw string so the backslashes are ok 
print(os.getcwd()) # convince yourself that you're in the right place 
print(os.listdir(path)) # make sure the file is in here 
myfile=open("[email protected]","r") 
lines=myfile.readlines() 

for x in lines: 
    kH2.append(x.split(' ')[1]) 
    kHe.append(x.split(' ')[0]) 
myfile.close() 
print kH2 
print kHe 

g = len(kH2) 
f = len(kHe) 
print g 
print f 

for n in range(0,7): 
    C = (((math.log(float(kH2[n]),10)))-(math.log(float(kHe[n]),10)))/math.log(R,10) 
    print C 

然後它返回這一行說有一個域錯誤。

C = (((math.log(float(kH2[n]),10)))-(math.log(float(kHe[n]),10)))/math.log(R,10) 

ValueError: math domain error 

另外,對於文本文件,我只是用6位數字的隨機列表現在,因爲我試圖讓我的代碼工作之前,我把號碼的真正名單。我使用的數字是:

5 10 4 2 
6 20 1 2 
7 30 4 2 
8 40 3 2 
9 23 1 2 
4 13 6 2 
+2

調試提示 - 將複雜的線條分解成小塊,直到找出錯誤。 – enderland

+0

我懷疑你使用的是Python 2.如果是這樣,那麼'R'將爲0.將R =((uH2 * eH2)/(uHe * eHe))改爲R = float(uH2 * eH2)/ UHE * EHE)'。例如,請參閱[此問題](http://stackoverflow.com/questions/2958684/python-division)以獲取詳細信息。 –

+0

沃倫現在似乎與您的建議一起工作。謝謝你的建議。另外,感謝您的建議enderland。 – Cosmoman

回答

0

嘗試檢查日誌內的值是否爲正值,因爲日誌函數的非正值是域錯誤。

希望這會有所幫助。