我試圖計算以下求和,其中分別爲Q的功能之前計算求和在python使用遞歸函數
f_j,f_j
和q=sin(theta)
where theta varies[0,90]
,和r_ij
是bewteen每兩個元件我做的相應距離這個計算。
我最初使用sum()
函數,但它並沒有精確地工作,因爲它返回一個浮點數,但是由於q正在改變,並且沒有求和它,所以我期待一個數組!我放棄了它。
我的第二種方法是計算這個求和的遞歸函數,但是我得到很多錯誤,不知道我的代碼有什麼問題,因爲我所有的語法都是正確的,我不知道爲什麼我會得到錯誤或錯誤一個接一個的價值!
theta=arange(radians(0.5), radians(40.010), radians(0.03))
q=sin(theta)
f_q_1= 2*exp(-3*pow(q,2))+4*exp(-5*pow(q,2))+1.95
f_q_2=...
.
f_q_i(or j).
atom_positions= open('coordinates.txt','r')
lines = atom_positions.readlines()
for i in range(0, len(lines)):
line = lines[i]
values = line.split(" ")
for j in range(0,len(lines)):
if j<>i:
nextLine = lines[j]
nextLineValues = nextLine.split(" ")
r =sqrt((float(values[5])-float(nextLineValues[5]))**2 + (float(values[6])
-float(nextLineValues[6]))**2+(float(values[7])-float(nextLineValues[7]))**2)
line_len = len(lines)
def I_tot(line_len,i,f_i,f_j,r):
I=0
if i<line_len:
I=I+(f_i*f_j*sin(q*r)/(q*r))
return I + I_tot(line_len,i,f_i,f_j,r)
else:
return I
else:
plot(2*theta,I_tot)
show()
atom_positions.close()
錯誤:
RuntimeError: maximum recursion depth exceeded while calling a Python object
+這個問題不是以前在這裏問,當我檢查了,無法找到解決我的問題遞歸求和問題重複。
我自己也嘗試了功能
def I_tot():
I=0
for i in range(0,len(lines)):
I=I+(f_i*f_j*sin(q*r)/(q*r))
return I
但我不知道是否能給予我正確的總和與否,因爲我到底得的圖形是遠離我的期望,並表示這個總和不應該是正確的。
這看起來像一個無限遞歸,沒有變化的變化。 – M4rtini
我想你在這裏解決的辦法不正確,爲什麼要通過遞歸? – Netwave
'sum'有什麼問題?爲該表達式返回一個浮點數對我來說似乎相當合理。畢竟,'罪'將會浮出水面。如果你不想使用浮動,你可以將它轉換爲int。 – M4rtini