template<class C>
Inverse.
Definition at line 446 of file MatrixTem.h. References Impala::Core::Matrix::MatrixTem< C >::_data, Impala::Core::Matrix::lubksb(), Impala::Core::Matrix::ludcmp(), Impala::Core::Matrix::MatrixTem< C >::nCol(), and Impala::Core::Matrix::MatrixTem< C >::nRow(). Referenced by Impala::Core::Matrix::MatrixTem< C >::covariance(), Impala::Core::Matrix::MatrixTem< C >::getCol(), Impala::Core::Matrix::MatrixTem< C >::getRow(), Impala::Core::Matrix::MatrixTem< C >::MatrixTem(), Impala::Core::Matrix::MatrixTem< C >::operator *(), Impala::Core::Matrix::MatrixTem< C >::operator+(), Impala::Core::Matrix::MatrixTem< C >::operator=(), Impala::Core::Array::regionDistance(), and Impala::Core::Matrix::MatrixTem< C >::t(). 00447 { 00448 if (nRow() != nCol()) { 00449 std::cerr << "Inverse: matrix is not square!." << std::endl; 00450 return MatrixTem<C>(0, 0); 00451 } 00452 00453 int size = nRow(); 00454 MatrixTem<C> m(size,size), tmp(*this); 00455 short* idx = new short [size]; 00456 double d; 00457 00458 if (!ludcmp(tmp._data, size, idx, &d)) { 00459 std::cerr << "Inverse: singular matrix can't be inverted." << std::endl; 00460 delete [] idx; 00461 return MatrixTem<C>(0,0); 00462 } 00463 00464 double * res = new double [size]; 00465 00466 for (int j = 0; j < size; j++) { 00467 for (int i = 0; i < size; i++) 00468 res[i] = 0.0; 00469 res[j] = 1.0; 00470 lubksb(tmp._data, size, idx, res); 00471 for (int i = 0; i < size; i++) 00472 m[i][j] = res[i]; 00473 } 00474 00475 delete [] res; 00476 delete [] idx; 00477 00478 return m; 00479 }
Here is the call graph for this function:
|