Scilab 6.0.0
- Scilabヘルプ
- API Scilab
- legacy
- Low level functions
- AssignOutputVariable
- 論理値の読み込み (Scilabゲートウェイ)
- 論理値の書き込み (Scilabゲートウェイ)
- 論理値疎行列の読み込み (Scilabゲートウェイ)
- 論理値の疎行列の書き込み (Scilabゲートウェイ)
- CallOverloadFunction
- 変数の次元を確認 (Scilabゲートウェイ)
- CheckInputArgument
- CheckOutputArgument
- 変数リファレンス (Scilabゲートウェイ)
- 変数の次元 (Scilabゲートウェイ)
- 変数の型 (Scilabゲートウェイ)
- 複素数変数 (Scilabゲートウェイ)
- 行列型 (Scilab ゲートウェイ)
- deleteNamedVariable
- doubleの読み込み (Scilabゲートウェイ)
- doubleの書き込み (Scilabゲートウェイ)
- getNbInputArgument (Scilabゲートウェイ)
- getNbOutputArgument (Scilabゲートウェイ)
- ハンドルの読み込み (Scilab ゲートウェイ)
- ハンドルの書き込み (Scilab ゲートウェイ)
- 整数の精度 (Scilabゲートウェイ)
- 整数の読み込み (Scilab ゲートウェイ)
- 整数の書き込み (Scilabゲートウェイ)
- nbInputArgument (Scilab ゲートウェイ)
- ポインタの読み込み (Scilabゲートウェイ)
- ポインタの書き込み (Scilabゲートウェイ)
- 多項式の記号変数 (Scilabゲートウェイ)
- 多項式の読み込み (Scilabゲートウェイ)
- 多項式の書き込み (Scilabゲートウェイ)
- ReturnArguments
- 疎行列の読み込み (Scilab ゲートウェイ)
- 疎行列の書き込み (Scilab ゲートウェイ)
- 文字列の読み込み (Scilab ゲートウェイ)
- 文字列の書き込み (Scilab ゲートウェイ)
- UpdateStack
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.
doubleの読み込み (Scilabゲートウェイ)
ゲートウェイ内でdoubleの行列を読み込む方法.
呼び出し手順
入力引数プロファイル:
SciErr getMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal)
SciErr getComplexMatrixOfDouble(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg)
名前指定変数プロファイル:
SciErr readNamedMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal)
SciErr readNamedComplexMatrixOfDouble(void* _pvCtx, const char* _pstName, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg)
引数
- _pvCtx
Scilab環境ポインタ, api_scilab.hで定義される "pvApiCtx" を指定
- _piAddress
Scilab変数のアドレス.
- _pstName
"名前指定"関数の変数名.
- _piRows
返される行数.
- _piCols
返される列数.
- _pdblReal
返される実数データ配列のアドレス (大きさ: _iCols * _iRows). "名前指定" 関数の場合, _pdblReal は関数コール前にメモリを確保しておく必要があります.
- _pdblImg
- Return address of imaginary data array (size: _iCols * _iRows). For "Named" function, _pdblImg must be allocated before calling function.
- SciErr
エラー構造体で,エラーメッセージ履歴と最初のエラー番号を保持します.
説明
このヘルプはdoubleの行列をScilab APIにより処理する方法を示します.
ゲートウェイのソース
#include "api_scilab.h" int read_double(char *fname,void* pvApiCtx) { SciErr sciErr; int i; // 最初の変数の情報 : doubleの実数行列 int iType = 0; int iRows = 0; int iCols = 0; int iComplex = 0; int *piAddr = NULL; double* pdblReal = NULL; double* pdblImg = NULL; // 入力/出力引数を確認 CheckInputArgument(pvApiCtx, 1, 1); CheckOutputArgument(pvApiCtx, 1, 1); /************************ * 最初の変数 * ************************/ // 最初の引数の変数アドレスを取得 sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } // 型を確認 sciErr = getVarType(pvApiCtx, piAddr, &iType); if(sciErr.iErr || iType != sci_matrix) { printError(&sciErr, 0); return 0; } // 複素数かどうかを取得 iComplex = isVarComplex(pvApiCtx, piAddr); // 複素数かどうかを確認 if(iComplex) { // Scilabメモリから大きさとデータを取得 sciErr = getComplexMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal, &pdblImg); } else { // Scilabメモリから大きさとデータを取得 sciErr = getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal); } if(sciErr.iErr) { printError(&sciErr, 0); return 0; } // データを用いて処理を行う // 変数が複素数の場合,実部と虚部を交換し,それ以外は-1を乗じる if(iComplex) { sciErr = createComplexMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, pdblImg, pdblReal); } else { for(i = 0 ; i < iRows * iCols ; i++) { pdblReal[i] = pdblReal[i] * -1; } sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, pdblReal); } if(sciErr.iErr) { printError(&sciErr, 0); return 0; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; return 0; }
Scilab テストスクリプト
a = [ 0 1 2 3; .. 4 5 6 7; .. 8 9 10 11]; b = [ 23*%i, 1+22*%i, 2+21*%i, 3+20*%i, 4+19*%i, 5+18*%i; .. 6+17*%i, 7+16*%i, 8+15*%i, 9+14*%i, 10+13*%i, 11+12*%i; .. 12+11*%i, 13+10*%i, 14+9*%i, 15+8*%i, 16+7*%i, 17+6*%i; .. 18+5*%i, 19+4*%i, 20+3*%i, 21+2*%i, 22+1*%i, 23]; a2 = read_double(a); b2 = read_double(b); if or(a2 <> a * -1) then error("failed"), end if or(b2 <> (imag(b) + real(b) * %i)) then error("failed"), end
Report an issue | ||
<< deleteNamedVariable | Low level functions | doubleの書き込み (Scilabゲートウェイ) >> |