我下载了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);
}
}
}如果我想把代码:“Tj = C2F(ddot)(&l,A+ ai + mA * j,&one,C+ ci -l+ 1,&minusone);”转换成c或c#,我该怎么做?
发布于 2015-12-29 18:15:13
在scilab的源代码中,C2F是一个宏用来从C调用Fortran函数。
它被声明为in machine.h。
实际上,这段代码可能会调用the Blass ddot function。
它,两个向量的点积是用Fortran做的。
https://stackoverflow.com/questions/29682012
复制相似问题