我正在编写c ++代码,将Octave函数输出返回到Scilab环境。
相关代码如下 -
//Pass values from Scilab to Octave
sciErr= getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal);
Matrix matrix_double = Matrix (iRows,iCols);
for (r=0;r<iRows;r++)
{
for(c=0;c<iCols;c++)
{
matrix_double(r,c)=(pdblReal[r]+c);
}
}
in(i-2)=octave_value (matrix_double);
octave_value_list out = feval (pstData[0], in, 1);//Call Octave function
dim_vector d = (out(0).matrix_value().dims()); //Get dimensions of Octave output
//Return Octave output to Scilab
if(out(0).is_double_type())
{
poutput = (double*)malloc(sizeof(double) * d(0) * d(1));
for(int l = 0 ; l < d(0) ; l++)
{
for(int m = 0 ; m < d(1) ; m++)
{
poutput[l+d(0)*m]=(out(0).matrix_value ()(l,m));
}
}
}
sciErr=createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, d(0), d(1),poutput);
free(poutput);
AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
ReturnArguments(pvApiCtx);
在Scilab控制台上,输入是
-->a=[1 24 92; 59 28 211]
a =
1. 24. 92.
59. 28. 211.
-->b=call_octave("transpose",a)
b =
1. 59.
2. 60.
3. 61.
对于任何Octave函数,输出的第一行都是正确的。后续行有1添加到上一行。我哪里错了?