多項式の書き込み (Scilabゲートウェイ) ゲートウェイに多項式の行列を書き込む方法.

## 呼び出し手順

入力引数プロファイル:

    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)

## 引数

_pvCtx

  Scilab環境ポインタ, api_scilab.h により定義された "pvApiCtx"で指定.

_iVar

  変数を保存するScilabメモリの位置

_pstName

  "名前指定"関数の場合の変数名.

_pstVarName

  多項式の変数名 (Scilab5: 最大4文字)

_iRows

  新規変数の行数

_iCols

  新規変数の列数

_piNbCoef

  各多項式の係数の数.

_pdblReal

  係数の実部を保持する double*の配列のアドレス (大きさ: _iCols * _iRows)

_pdblImg

  係数の虚部を保持する double*の配列のアドレス (大きさ: _iCols * _iRows)

SciErr

  エラー構造体で,エラーメッセージ履歴と最初のエラー番号を格納します.

## 説明

このヘルプはScilab APIにより多項式の行列を処理する方法を示します.

## ゲートウェイのソース

    #include "api_scilab.h"
    int write_poly(char *fname,void* pvApiCtx)
    {
        SciErr sciErr;
        //出力変数情報 : 多項式の行列 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"};
        //係数の配列
        int piNbCoef[6]         = {2,4,3,1,4,6};
        //データ配列
        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(pvApiCtx) + 1, pstVarName, iRows, iCols, piNbCoef, pdblReal);
        if(sciErr.iErr)
        {
            printError(&sciErr, 0);
            return 0;
        }
        //確保された変数を左辺に代入
        AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
        return 0;
    }

## Scilab テストスクリプト

    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