Blame view

fvn_sparse/UMFPACK/Include/umfpack_get_determinant.h 6.12 KB
422234dc3   daniau   git-svn-id: https...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  /* ========================================================================== */
  /* === UMFPACK_get_determinant ============================================== */
  /* ========================================================================== */
  
  /* -------------------------------------------------------------------------- */
  /* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
  /* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
  /* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
  /* UMFPACK_get_determinant contributed by David Bateman, Motorola, Paris. */
  /* -------------------------------------------------------------------------- */
  
  int umfpack_di_get_determinant
  (
      double *Mx,
      double *Ex,
      void *NumericHandle,
      double User_Info [UMFPACK_INFO]
  ) ;
  
  UF_long umfpack_dl_get_determinant
  (
      double *Mx,
      double *Ex,
      void *NumericHandle,
      double User_Info [UMFPACK_INFO]
  ) ;
  
  int umfpack_zi_get_determinant
  (
      double *Mx,
      double *Mz,
      double *Ex,
      void *NumericHandle,
      double User_Info [UMFPACK_INFO]
  ) ;
  
  UF_long umfpack_zl_get_determinant
  (
      double *Mx,
      double *Mz,
      double *Ex,
      void *NumericHandle,
      double User_Info [UMFPACK_INFO]
  ) ;
  
  /*
  double int Syntax:
  
      #include "umfpack.h"
      void *Numeric ;
      int status ;
      double Mx, Ex, Info [UMFPACK_INFO] ;
      status = umfpack_di_get_determinant (&Mx, &Ex, Numeric, Info) ;
  
  double UF_long Syntax:
  
      #include "umfpack.h"
      void *Numeric ;
      UF_long status ;
      double Mx, Ex, Info [UMFPACK_INFO] ;
      status = umfpack_dl_get_determinant (&Mx, &Ex, Numeric, Info) ;
  
  complex int Syntax:
  
      #include "umfpack.h"
      void *Numeric ;
      int status ;
      double Mx, Mz, Ex, Info [UMFPACK_INFO] ;
      status = umfpack_zi_get_determinant (&Mx, &Mz, &Ex, Numeric, Info) ;
  
  complex int Syntax:
  
      #include "umfpack.h"
      void *Numeric ;
      UF_long status ;
      double *Mx, *Mz, *Ex, Info [UMFPACK_INFO] ;
      status = umfpack_zl_get_determinant (&Mx, &Mz, &Ex, Numeric, Info) ;
  
  packed complex int Syntax:
  
      Same as above, except Mz is NULL.
  
  Author: Contributed by David Bateman, Motorola, Paris
  
  Purpose:
  
      Using the LU factors and the permutation vectors contained in the Numeric
      object, calculate the determinant of the matrix A.
  
      The value of the determinant can be returned in two forms, depending on
      whether Ex is NULL or not.  If Ex is NULL then the value of the determinant
      is returned on Mx and Mz for the real and imaginary parts.  However, to
      avoid over- or underflows, the determinant can be split into a mantissa
      and exponent, and the parts returned separately, in which case Ex is not
      NULL.  The actual determinant is then given by
  
        double det ;
        det = Mx * pow (10.0, Ex) ;
  
      for the double case, or
  
        double det [2] ;
        det [0] = Mx * pow (10.0, Ex) ;	    // real part
        det [1] = Mz * pow (10.0, Ex) ;	    // imaginary part
  
      for the complex case.  Information on if the determinant will or has
      over or under-flowed is given by Info [UMFPACK_STATUS].
  
      In the "packed complex" syntax, Mx [0] holds the real part and Mx [1]
      holds the imaginary part.  Mz is not used (it is NULL).
  
  Returns:
  
      Returns UMFPACK_OK if sucessful.  Returns UMFPACK_ERROR_out_of_memory if
      insufficient memory is available for the n_row integer workspace that
      umfpack_*_get_determinant allocates to construct pivots from the
      permutation vectors.  Returns UMFPACK_ERROR_invalid_Numeric_object if the
      Numeric object provided as input is invalid.  Returns
      UMFPACK_WARNING_singular_matrix if the determinant is zero.  Returns
      UMFPACK_WARNING_determinant_underflow or
      UMFPACK_WARNING_determinant_overflow if the determinant has underflowed
      overflowed (for the case when Ex is NULL), or will overflow if Ex is not
      NULL and det is computed (see above) in the user program.
  
  Arguments:
  
      double *Mx ;   Output argument (array of size 1, or size 2 if Mz is NULL)
      double *Mz ;   Output argument (optional)
      double *Ex ;   Output argument (optional)
  
          The determinant returned in mantissa/exponent form, as discussed above.
  	If Mz is NULL, then both the original and imaginary parts will be
  	returned in Mx. If Ex is NULL then the determinant is returned directly
  	in Mx and Mz (or Mx [0] and Mx [1] if Mz is NULL), rather than in
  	mantissa/exponent form.
  
      void *Numeric ;	Input argument, not modified.
  
  	Numeric must point to a valid Numeric object, computed by
  	umfpack_*_numeric.
  
      double Info [UMFPACK_INFO] ;	Output argument.
  
  	Contains information about the calculation of the determinant. If a
  	(double *) NULL pointer is passed, then no statistics are returned in
  	Info (this is not an error condition).  The following statistics are
  	computed in umfpack_*_determinant:
  
  	Info [UMFPACK_STATUS]: status code.  This is also the return value,
  	    whether or not Info is present.
  
  	    UMFPACK_OK
  
  	        The determinant was successfully found.
  
  	    UMFPACK_ERROR_out_of_memory
  
  		Insufficient memory to solve the linear system.
  
  	    UMFPACK_ERROR_argument_missing
  
  		Mx is missing (NULL).
  
  	    UMFPACK_ERROR_invalid_Numeric_object
  
  		The Numeric object is not valid.
  
  	    UMFPACK_ERROR_invalid_system
  
  		The matrix is rectangular.  Only square systems can be
  		handled.
  
  	    UMFPACK_WARNING_singluar_matrix
  
  		The determinant is zero or NaN.  The matrix is singular.
  
  	    UMFPACK_WARNING_determinant_underflow
  
  	        When passing from mantissa/exponent form to the determinant
  		an underflow has or will occur.  If the mantissa/exponent from
  		of obtaining the determinant is used, the underflow will occur
  		in the user program.  If the single argument method of
  		obtaining the determinant is used, the underflow has already
  		occurred.
  
  	    UMFPACK_WARNING_determinant_overflow
  
  	        When passing from mantissa/exponent form to the determinant
  		an overflow has or will occur.  If the mantissa/exponent from
  		of obtaining the determinant is used, the overflow will occur
  		in the user program.  If the single argument method of
  		obtaining the determinant is used, the overflow has already
  		occurred.
  
  
  */