Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
5.3.0 - Français

Change language to:
English - 日本語 - Português

Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
However, this page did not exist in the previous stable version.

Manuel Scilab >> API Scilab > Low level functions > Sparse matrix reading (Scilab gateway)

Sparse matrix reading (Scilab gateway)

How to read sparse matric in a gateway.

Calling Sequence

Input argument profile:

SciErr getSparseMatrix(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal)
SciErr getComplexSparseMatrix(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg)

Named variable profile:

SciErr readNamedSparseMatrix(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal)
SciErr readNamedComplexSparseMatrix(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg)

Arguments

_pvCtx

Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h.

_piAddress

Address of the Scilab variable.

_pstName

Name of the variable for "named" functions.

_piRows

Return number of rows.

_piCols

Return number of columns.

_piNbItem

Return number of non zero value.

_piNbItemRow

Return number of item in each rows (size: _iRows).

_piColPos

Return column position for each item (size: _iNbItem).

_pdblReal

Return address of real data array (size: _iCols * _iRows) For "Named" function, _pdblReal must be allocated before calling function.

_pdblImg

Return address of imaginary data array (size: _iCols * _iRows) For "Named" function, _pdblImg must be allocated before calling function.

SciErr

Error structure where is stored errors messages history and first error number.

Description

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

Gateway Source

int read_sparse(char *fname,unsigned long fname_len)
{
    SciErr sciErr;
    int i,j,k;
    int* piAddr            = NULL;

    int iRows            = 0;
    int iCols            = 0;
    int iNbItem            = 0;
    int* piNbItemRow    = NULL;
    int* piColPos        = NULL;

    double* pdblReal    = NULL;
    double* pdblImg        = NULL;

    CheckRhs(1,1);

    sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
    if(sciErr.iErr)
    {
        printError(&sciErr, 0);
        return 0;
    }

    if(isVarComplex(pvApiCtx, piAddr))
    {
        sciErr = getComplexSparseMatrix(pvApiCtx, piAddr, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
    }
    else
    {
        sciErr = getSparseMatrix(pvApiCtx, piAddr, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal);
    }

    if(sciErr.iErr)
    {
        printError(&sciErr, 0);
        return 0;
    }

    sciprint("Sparse %d item(s)\n", iNbItem);

    k = 0;
    for(i = 0 ; i < iRows ; i++)
    {
        for(j = 0 ; j < piNbItemRow[i] ; j++)
        {
            sciprint("(%d,%d) = %f", i+1, piColPos[k], pdblReal[k]);
            if(isVarComplex(pvApiCtx, piAddr))
            {
                sciprint(" %+fi", pdblImg[k]);
            }
            sciprint("\n");
            k++;
        }
    }

    //assign allocated variables to Lhs position
    LhsVar(1) = 0;
    return 0;
}

Scilab test script

sp=sparse([1,2;4,5;3,10],[1 + 2*%i,2 - 3*%i,-3 + 4*%i]);
read_sparse(sp);
<< Polynomial writing (Scilab gateway) Low level functions Sparse writing (Scilab gateway) >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Wed Jan 26 16:24:18 CET 2011