什么“C2F(ddot)”在scilab中的含义

时间:2015-04-16 17:31:59

标签: scilab

我下载了scilab源代码,我对conv2如何工作感兴趣并希望将其转换为c#代码,但我不知道“C2F(ddot)”的含义及其工作原理。如果我将“C2F(ddot)”转换为c或c#代码我应该如何实现它。以下是scilab中的一些源代码

extern double C2F(ddot)(int *n, double *A, int *iA, double *B, int *iB);
/*--------------------------------------------------------------------------*/
void conv2_separable_R(double *R, int nR, double *C, int mC, double *A, int mA, int nA, double *Out, int mOut, int nOut, int edgM, int edgN, double *T)
{
    int ai = 0, tj = 0, ci = 0, rj = 0; /*current index over A,T,C and R */
    int i = 0, j = 0; /* loop variables*/
    int l = 0;
    int one = 1, minusone = -1;

    for (i = 0; i < mOut; i++ )
    {
        /*Compute  the 1-D conv A(i,:) and C  in T */
        ai = Max(0, i - edgM) ;
        ci = mC - 1 - Max(0, edgM - i);
        l = Min(ci + 1, mA - ai);
        for (j = 0; j < nA; j++ )
        {
            T[j] = C2F(ddot)(&l, A + ai + mA * j, &one, C + ci - l + 1, &minusone);
        }
        /*1-D convolution of T and  R */
        for (j = 0; j < nOut; j++ )
        {
            rj = nR - 1 - Max(0, edgN - j);
            tj = Max(0, j - edgN) ;
            l = Min(rj + 1, nA - tj);
            Out[i + j * mOut] = C2F(ddot)(&l, T + tj, &one, R + rj - l + 1, &minusone);
        }
    }
}

如果我想要转换代码:“T [j] = C2F(ddot)(&amp; l,A + ai + mA * j,&amp; one,C + ci-1 + 1,&amp; minusone); “进入c或c#,我该怎么做?

1 个答案:

答案 0 :(得分:0)

在scilab的来源中,C2F是一个用于从C调用Fortran函数的宏。

宣布in machine.h

实际上这段代码可能会调用the Blass ddot function

它,两个向量的点积在Fortran中完成......