Revision ba125e3b
| utility/matrix.h | ||
|---|---|---|
| 192 | 192 |
|
| 193 | 193 |
double determinant() const |
| 194 | 194 |
{
|
| 195 |
if(N == 1) |
|
| 196 |
return cell(0, 0); |
|
| 197 |
|
|
| 198 |
float det = 0.0; |
|
| 199 |
for(int i = 0; i < N; i++ ) |
|
| 200 |
{
|
|
| 201 |
Matrix<N-1> minor = minor_matrix(0, i); |
|
| 202 |
det += (i%2==1?-1.0:1.0) * cell(0, i) * minor.determinant(); |
|
| 203 |
} |
|
| 195 |
// specialization for N == 1 given below this class |
|
| 196 |
double det = 0.0, sign = 1.0; |
|
| 197 |
for (int i = 0; i < N; ++i, sign = -sign) |
|
| 198 |
det += sign * cell(0, i) * minor_matrix(0, i).determinant(); |
|
| 204 | 199 |
return det; |
| 205 | 200 |
} |
| 206 | 201 |
|
| ... | ... | |
| 226 | 221 |
}; |
| 227 | 222 |
|
| 228 | 223 |
|
| 224 |
template<> |
|
| 225 |
inline double Matrix<1>::determinant() const |
|
| 226 |
{
|
|
| 227 |
return cell(0, 0); |
|
| 228 |
} |
|
| 229 |
|
|
| 229 | 230 |
}; |
| 230 | 231 |
|
| 231 | 232 |
#endif |
Also available in: Unified diff