/* * 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" doubleComplex zdeterma(doubleComplex * in, int size){ #ifndef WITHOUT_LAPACK doubleComplex tmp1,tmp2,out; int i=0,info=0; doubleComplex *inCopy; int* vectPivot; switch(size){ case 2 : out = zdiffs(zmuls(in[0],in[3]),zmuls(in[1],in[2])); break; case 3 : /*regle de Sarrus*/ out=DoubleComplex(0,0); /*Addition Part*/ tmp1 = zmuls(in[0],in[4]); tmp2 = zmuls(tmp1,in[8]); out = zadds(out,tmp2); tmp1 = zmuls(in[1],in[5]); tmp2 = zmuls(tmp1,in[6]); out = zadds(out,tmp2); tmp1 = zmuls(in[2],in[3]); tmp2 = zmuls(tmp1,in[7]); out = zadds(out,tmp2); /*Subtraction Part*/ tmp1 = zmuls(in[0],in[5]); tmp2 = zmuls(tmp1,in[7]); out = zdiffs(out,tmp2); tmp1 = zmuls(in[1],in[3]); tmp2 = zmuls(tmp1,in[8]); out = zdiffs(out,tmp2); tmp1 = zmuls(in[2],in[4]); tmp2 = zmuls(tmp1,in[6]); out = zdiffs(out,tmp2); break; default : /*Allocate inCopy and Copy in in inCopy*/ inCopy=(doubleComplex*)malloc((unsigned int)(size*size)*sizeof(doubleComplex)); for (i=0;i