# 疎行列の例

### 説明

この例は疎行列変数を取得し,Scilabに返す方法を示します.

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

```#include "api_scilab.h"
int sparseExample(char *fname,void* pvApiCtx)
{
SciErr sciErr;
int iType   = 0;
int iRet    = 0;
CheckInputArgument(pvApiCtx, 1, 1);
CheckOutputArgument(pvApiCtx, 0, 1);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
{
int iRows           = 0;
int iCols           = 0;
int iNbItem         = 0;
int* piNbItemRow	= NULL;
int* piColPos       = NULL;
double* pdblReal	= NULL;
double* pdblImg		= NULL;
{
iRet = getAllocatedComplexSparseMatrix(pvApiCtx, piAddr, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
if(iRet)
{
freeAllocatedComplexSparseMatrix(piNbItemRow, piColPos, pdblReal, pdblImg);
return iRet;
}
sciErr = createComplexSparseMatrix(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal, pdblImg);
if(sciErr.iErr)
{
freeAllocatedComplexSparseMatrix(piNbItemRow, piColPos, pdblReal, pdblImg);
printError(&sciErr, 0);
return sciErr.iErr;
}
freeAllocatedComplexSparseMatrix(piNbItemRow, piColPos, pdblReal, pdblImg);
}
else
{
iRet = getAllocatedSparseMatrix(pvApiCtx, piAddr, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal);
if(iRet)
{
freeAllocatedSparseMatrix(piNbItemRow, piColPos, pdblReal);
return iRet;
}
sciErr = createSparseMatrix(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal);
if(sciErr.iErr)
{
freeAllocatedSparseMatrix(piNbItemRow, piColPos, pdblReal);
printError(&sciErr, 0);
return sciErr.iErr;
}
freeAllocatedSparseMatrix(piNbItemRow, piColPos, pdblReal);
}
AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
}
else
{
AssignOutputVariable(pvApiCtx, 1) = 0;
}
return 0;
}```

### Scilab テストスクリプト

```a = sparse([1,1;2,2;3,3], [1, 2, 3]);
b = sparse([1,1;2,2;3,3], [1 + 2 * %i, 3 , -4 * %i]);
if sparseExample(a) <> a then pause;end
if sparseExample(b) <> b then pause;end```
 Report an issue << freeAllocatedComplexSparseMatrix sparse string >>