2014-03-13 89 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没有分享的代码中的问题。 –