;+ ; NAME:determ3 ; ; PURPOSE: computes the determinant of n 3 by 3 arrays ; ; CATEGORY: no DO loops and better accuracy ; ; CALLING SEQUENCE:2 cases: ; res = determ2(z2ds) ; res = determ2(in00, in01, in02, in10, in11, in12, in20, in21, in22) ; ; INPUTS: ; z2ds: an 3*3*n array ; or ; in00, in01, in02, in10, in11, in12, in20, in21, in22: the nine n ; elements arrays defined as: ; in00 = z2ds[0, 0, *] ; in01 = z2ds[0, 1, *] ; in02 = z2ds[0, 2, *] ; in10 = z2ds[1, 0, *] ; in11 = z2ds[1, 1, *] ; in12 = z2ds[1, 2, *] ; in20 = z2ds[2, 0, *] ; in21 = z2ds[2, 1, *] ; in22 = z2ds[2, 2, *] ; ; OUTPUTS: n elements array, the determinent of each 3*3 arrrays ; ; EXAMPLE: ; ; a=findgen(3,3,5) ; print, determ3(a^2) ; FOR i=0,4 DO print, determ((a[*,*,i])^2) ; IDL solution ; ; MODIFICATION HISTORY: ; S. Masson (smasson@lodyc.jussieu.fr) ; July 11th, 2002 ;- FUNCTION determ3, in00, in01, in02, in10, in11, in12, in20, in21, in22 ; compile_opt idl2, strictarrsubs ; IF n_params() EQ 1 THEN BEGIN in00save = temporary(in00) in00 = in00save[0, 0, *] in01 = in00save[0, 1, *] in02 = in00save[0, 2, *] in10 = in00save[1, 0, *] in11 = in00save[1, 1, *] in12 = in00save[1, 2, *] in20 = in00save[2, 0, *] in21 = in00save[2, 1, *] in22 = in00save[2, 2, *] ENDIF a01 = -determ2(in10[*], in20[*] $ , in12[*], in22[*]) a11 = determ2(in00[*], in20[*] $ , in02[*], in22[*]) a21 = -determ2(in00[*], in10[*] $ , in02[*], in12[*]) res = in01[*]*a01+in11[*]*a11+in21[*]*a21 IF n_params() EQ 1 THEN in00 = temporary(in00save) RETURN, res END