将Octave值返回Scilab

时间:2015-08-04 08:24:18

标签: c++ octave scilab

我正在编写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添加到上一行。我哪里错了?

0 个答案:

没有答案