2015-09-21 55 views
-1

我正在寫一些代碼來計算流體中兩個粒子之間的相互作用。獲得新位置的主要公式取決於其他3個函數,它們爲公式提供了必要的組件。使用不同的參數對公式進行迭代?

公式基本上是:

new position = old position + Important_matrix * Important_Force + (other force)^2 

這是我的代碼的基本佈局:

initial position of particle 1 = [1,1,1] 
initial position of particle 2 = [2,2,2] 

def GetImportantMatrix(position of first particle, position of second particle): 
'code here' 
return the_important_matrix 

def GetImportantForce(the_important_matrix): 
'code here' 
return important_force 

def GetOtherForce(): 
'code here' 
return other_force 

def getnewposition(initial position of part. 1, initial position of part. 2, the_important_matrix, important_force, other_force, iterations): 

??? 

我的實際問題是:我怎麼實現的公式功能,使其自動調用其他函數來獲取它需要的變量,而在每次迭代後更新?例如,我將如何去調用其他函數以確保當前函數獲取所需信息,並且每次都正確更新。

我見過一些這樣的例子,我在其他代碼片段中看過,但我無法弄清楚如何將它應用到我的代碼,因爲位置變量每次都會改變,這也使得其他變量每次都會改變。

我希望有道理嗎?我對Python很陌生,至今仍在學習,如果你們能指點我的任何資源來幫助我,我會很感激。

+0

我不太明白你的意思,請你進一步解釋這一行請'每次都改變位置變量,並且這也會使其他變量每次都改變' – DorElias

+0

調用每個函數,將返回值賦給一個變量,使用最終方程中的變量。 – wwii

回答

0

您的getnewposition代碼可以是這個樣子

def getnewposition(pos1, pos2): 
    importantMatrix = getImportantMatrix(pos1,pos2) 
    return pos + importantMatrix + getImportantForce(importantMatrix) + pow(getOtherForce(),2) 

然後爲你的主代碼,你需要調用是getnewposition與位置變量作爲你的論點,當您需要。

或類似的東西。我不確定你的意思,所以如果你澄清我可以幫助更多。

+0

首先,感謝您的幫助,我很感激。 我試過你的方法,但不幸的是得到了一個維度的錯誤,因爲我正在使用的數量是數組。現在我得到了iPython的錯誤:'操作數不能與形狀(2,3)(1,6)一起播放。' –

+0

我試圖編輯我之前的評論,但我花了太長時間。我直接從我試圖編輯的編輯中複製它: 編輯:忘了添加剩餘的消息。 我如何知道Numpy說哪些變量不能一起播放?如在中,我怎麼知道哪些變量(甚至哪些操作,乘法或加法)由於維度誤差而無法執行? –

+0

手動對其進行故障排除,一次消除一件事物,直到它運行,然後將它們添加回去 –