/* * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab * Copyright (C) 2008 - INRIA - Arnaud TORSET * * This file must be used under the terms of the CeCILL. * This source file is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt * */ #include #ifndef WITHOUT_LAPACK #include "lapack.h" #else #include "division.h" #endif #include "determ.h" #include "multiplication.h" #include "subtraction.h" #include "addition.h" floatComplex cdeterma(floatComplex *in, int size){ #ifndef WITHOUT_LAPACK int i=0,info=0; doubleComplex *inCopy,out_tmp; int *vectPivot; floatComplex out, tmp1,tmp2; /*Calculation of the determinant*/ switch(size){ case 2 : out = cdiffs(cmuls(in[0],in[3]),cmuls(in[1],in[2])); break; case 3 : /*regle de Sarrus*/ out=FloatComplex(0,0); /*Addition part*/ tmp1 = cmuls(in[0],in[4]); tmp2 = cmuls(tmp1,in[8]); out = cadds(out,tmp2); tmp1 = cmuls(in[1],in[5]); tmp2 = cmuls(tmp1,in[6]); out = cadds(out,tmp2); tmp1 = cmuls(in[2],in[3]); tmp2 = cmuls(tmp1,in[7]); out = cadds(out,tmp2); /*Subtraction part*/ tmp1 = cmuls(in[0],in[5]); tmp2 = cmuls(tmp1,in[7]); out = cdiffs(out,tmp2); tmp1 = cmuls(in[1],in[3]); tmp2 = cmuls(tmp1,in[8]); out = cdiffs(out,tmp2); tmp1 = cmuls(in[2],in[4]); tmp2 = cmuls(tmp1,in[6]); out = cdiffs(out,tmp2); break; default : /*We must have a doubleComplex matrix cause zgetrf accept only double parameters*/ /*Copy the input matrix*/ inCopy=(doubleComplex*)malloc((unsigned int)(size*size)*sizeof(doubleComplex)); for (i=0;i