作为在Haskell中使用矢量库进行练习的一种方法,我正在尝试重写我之前用C语言编写的Nelder-Mead最小化算法.到目前为止,我在翻译某些矢量操作时遇到了一些麻烦.
例如,考虑一个函数,该函数从n + 1列表中找出n个向量的质心(过滤掉一个索引),
在C中,这可以写成
static void get_centroid(double **s, int n, int iz,
double *C)
{
for (int i = 0; i < n+1; i++) {
if (i != iz) {
for (int j = 0; j < n; j++)
C[j] += s[i][j];
}
}
for (int j = 0; j < n; j++)
C[j] /= n;
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其翻译成Haskell,最后得到以下内容
import Data.Vector
import qualified Data.Vector as V
type Node = Vector Double
type Simplex = Vector Node
centroid :: Simplex -> …Run Code Online (Sandbox Code Playgroud) haskell ×1