I'm trying to calculate the determinant of a matrix using the SciDet function, but apparently it's just been removed. How can I calculate the determinant of a matrix in Scilab via C code in another way?
Code:
#include "api_scilab.h" // Header file for using SciLab API functions#include "Scierror.h" // Header file for handling SciLab errors#include "BOOL.h" // Header file for using BOOL type#include "localization.h" // Header file for string localizationstatic const char fname[] = "det"; // Function nameint sci_det(scilabEnv env, int nin, scilabVar* in, int nopt, scilabOpt* opt, int nout, scilabVar* out){ int i = 0; // Loop variable int n = 0; // Dimension of the system double* A = NULL; // Coefficient matrix int info; // Error code variable double determinant = 1.0; // Determinant /* Check the number of input and output arguments */ if (nin != 1 || nout != 1) { Scierror(77, _("%s: Wrong number of input or output arguments: 1 input and 1 output expected.\n"), fname); // Error message output return 1; // Return 1 in case of error } /* Check the types of input arguments */ if (scilab_isDouble(env, in[0]) == 0 || scilab_isMatrix2d(env, in[0]) == 0 || scilab_isComplex(env, in[0]) == 1) { Scierror(999, _("%s: Wrong type for input argument. Double matrix expected.\n"), fname); // Error message output return 1; // Return 1 in case of error } /* Get the dimensions of the coefficient matrix */ int rowA = 0, colA = 0; scilab_getDim2d(env, in[0], &rowA, &colA); // Get matrix dimensions n = rowA; // Store the dimension /* Check that matrix A is square */ if (rowA != colA) { Scierror(999, _("%s: Matrix of coefficients must be square.\n"), fname); // Error message output return 1; // Return 1 in case of error } /* Get data from the input argument */ scilab_getDoubleArray(env, in[0], &A); // Get data from the input matrix /* Calculate the determinant */ // Your determinant calculation code here return 0; // Return 0 upon successful execution}
Compile:
files = ["foo6.c"];ilib_build('build_lib',['det','sci_det','csci6'],files,[]);--> exec("loader.sce"); Failed reference for dynamic library '/home/zoow/Рабочийстол/ScilabAPI/Matrix/Test//libbuild_lib.so'.There's been a mistake: /home/zoow/Рабочийстол/ScilabAPI/Matrix/Test//libbuild_lib.so: undefined symbol: sciDetFailed reference for dynamic library '/home/zoow/Рабочийстол/ScilabAPI/Matrix/Test//libbuild_lib.so'.There's been a mistake: /home/zoow/Рабочийстол/ScilabAPI/Matrix/Test//libbuild_lib.so: undefined symbol: sciDeton line 15 of the executable /home/zoow/Рабочийстол/ScilabAPI/Matrix/Test/loader.sceaddinter: The shared archive has not been downloaded: (null)
I am able to calculate the determinant in code, but I need to calculate it in Scilab and pass the value to C.