我下载了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#,我该怎么做?
答案 0 :(得分:0)
在scilab的来源中,C2F
是一个用于从C调用Fortran函数的宏。
宣布in machine.h
。
实际上这段代码可能会调用the Blass ddot
function。
它,两个向量的点积在Fortran中完成......