2014-03-13 88 views
-1

我想根據下式來計算的Fortran 2個陣列之間的曼哈頓距離:曼哈頓距離的Fortran

d = Sum(|P(i)-R(i)|) 

所以,我提出用Fortran代碼:

function DistM(v, u, dim) 
    integer dim 
    real(8) v(dim), u(dim), DistM 
    DistM=sum(abs(v-u)) 
end function DistM 

我調用此函數通過使用此:

Coeff=DistM(tempvector1,tempvector2, dim) 

但這似乎並沒有工作(我沒有得到任何回報)。我也嘗試了2的權力,然後做它的sqrt,但它被困在sqrt然後(如果我運行它的步驟)。 我嘗試另一個功能,即一個工作(見這裏)之後,但是這一個不工作:(:

function Roznica(v, u, dim) 
     integer dim 
     real(8) v(dim), u(dim), Rozn 
     Rozn=sum((v-u)**2)/dim 
end function Roznica 

任何人的想法

+2

向我們展示您如何調用此功能。發佈SSCCE - http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions –

+0

更新高性能標記! – user3365108

+0

發佈SSCCE。並解釋你寫的意思*我沒有得到任何回報*。並將所有代碼格式化爲代碼。 –

回答

1

我就簡單寫一個曼哈頓距離函數也是這樣嗎? (與假定形數組,你不再需要使用自動數組像你一樣,提供的功能有顯式接口):

pure function L1(v) 
    real, intent(in) :: v(:) ! <- shape assumed from actual argument 
    real :: L1 
    L1 = sum(abs(v)) 
end function 

,然後如果你有兩個向量,你只需調用功能foo = L1(p - q)

+0

注意:這只是如何在現代Fortran中執行此操作的一個示例,而不是您的代碼無法正常工作的答案。正如H.P.馬克說,需要更多的信息。 – sigma

+0

感謝您提到這一點。我改變了它! 關於我的代碼:我在其他部分有一個愚蠢的小錯誤,所以現在我解決了它!感謝H.馬克說的東西(返回值的東西)。 無論如何感謝您的時間! – user3365108

+1

我已經低估了這個問題。它讓我感到無比憤怒,因爲我發現我浪費了我的時間去嘗試診斷OP沒有分享的代碼中的問題。 –