Polynomial writing (Scilab gateway)

How to write matrices of polynomials in a gateway.

Calling Sequence

Input argument profile:

SciErr createMatrixOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal)
SciErr createComplexMatrixOfPoly(void* _pvCtx, int _iVar, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)

Named variable profile:

SciErr createNamedMatrixOfPoly(void* _pvCtx, const char* _pstName, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal)
SciErr createNamedComplexMatrixOfPoly(void* _pvCtx, const char* _pstName, char* _pstVarName, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)

Arguments

:_pvCtx Scilab environment pointer, pass in “pvApiCtx” provided by
api_scilab.h.
: :_iVar Position in the Scilab memory where you want to put the
variable

: :_pstName Name of the variable for “named” functions. : :_pstVarName Variable name in polynomials (Scilab5: 4 characters

max)

: :_iRows Number of rows of the new variable : :_iCols Numbers of columns of the new variable : :_piNbCoef Number of coefficient for each polynomial. : :_pdblReal Address of array of double* with real part of coefficient

(size: _iCols * _iRows)
: :_pdblImg Address of array of double* with imaginary part of
coefficient (size: _iCols * _iRows)
: :SciErr Error structure where is stored errors messages history and
first error number.

:

Description

This help describes how matrix of polynomials can be handled through the Scilab API.

Gateway Source

#include "api_scilab.h"
int write_poly(char *fname,unsigned long fname_len)
{
    SciErr sciErr;
    //output variable info : polinomial matrix 2 x 4
    //[ x + 2                   x^2 - 4x + 5    4x^3 - 14x^2 + 18 ;
    //  2x^3 - 12x^2 + 64       1               8x^5 + 32x^3]
    int iRows               = 2;
    int iCols               = 3;
    //varname "x"
    char pstVarName[2]      = {"x"};
    //coeficient array
    int piNbCoef[6]         = {2,4,3,1,4,6};
    //data array
    double *pdblReal[6]     = {0};
    double pdblPoly0[2]     = {2,1};
    double pdblPoly1[4]     = {64,0,-12,2};
    double pdblPoly2[3]     = {5,-4,1};
    double pdblPoly3[1]     = {1};
    double pdblPoly4[4]     = {18,0,-14,4};
    double pdblPoly5[6]     = {0,0,0,32,0,8};
    pdblReal[0]             = pdblPoly0;
    pdblReal[1]             = pdblPoly1;
    pdblReal[2]             = pdblPoly2;
    pdblReal[3]             = pdblPoly3;
    pdblReal[4]             = pdblPoly4;
    pdblReal[5]             = pdblPoly5;

    sciErr = createMatrixOfPoly(pvApiCtx, nbInputArgument + 1, pstVarName, iRows, iCols, piNbCoef, pdblReal);
    if(sciErr.iErr)
    {
        printError(&sciErr, 0);
        return 0;
    }

    //assign allocated variables to Lhs position
    AssignOutputVariable(1) = nbInputArgument + 1;
    return 0;
}

Scilab test script

p_ref = [2 5 18 1 -4 0 0 1 -14 0 0 4 0 0 0 0 0 0;64 1 0 0 0 0 -12 0 0 2 0 32 0 0 0 0 0 8];
l = `list`_();
a = write_poly();
p = `coeff`_(a);
if `or`_(p <> p_ref) then `error`_("failed"), end

Table Of Contents

This Page