Functions | |
template<typename eT , typename T1 , typename T2 > | |
bool | solve (Mat< eT > &X, const Base< eT, T1 > &A_in, const Base< eT, T2 > &B_in) |
Solve a system of linear equations, i.e., A*X = B, where X is unknown. For a square matrix A, this function is conceptually the same as X = inv(A)*B, but is done more efficiently. The number of rows in A and B must be the same. B can be either a column vector or a matrix. This function will also try to provide approximate solutions to under-determined as well as over-determined systems (non-square A matrices). | |
template<typename eT , typename T1 , typename T2 > | |
Mat< eT > | solve (const Base< eT, T1 > &A_in, const Base< eT, T2 > &B_in) |
bool solve | ( | Mat< eT > & | X, | |
const Base< eT, T1 > & | A_in, | |||
const Base< eT, T2 > & | B_in | |||
) | [inline] |
Solve a system of linear equations, i.e., A*X = B, where X is unknown. For a square matrix A, this function is conceptually the same as X = inv(A)*B, but is done more efficiently. The number of rows in A and B must be the same. B can be either a column vector or a matrix. This function will also try to provide approximate solutions to under-determined as well as over-determined systems (non-square A matrices).
Definition at line 33 of file fn_solve.hpp.
References Base< elem_type, derived >::get_ref(), Mat< eT >::n_rows, Mat< eT >::reset(), auxlib::solve(), auxlib::solve_od(), and auxlib::solve_ud().
Referenced by solve().
00034 { 00035 arma_extra_debug_sigprint(); 00036 00037 const unwrap<T1> tmp1(A_in.get_ref()); 00038 const unwrap<T2> tmp2(B_in.get_ref()); 00039 00040 const Mat<eT>& A = tmp1.M; 00041 const Mat<eT>& B = tmp2.M; 00042 00043 arma_debug_check( (A.n_rows != B.n_rows), "solve(): number of rows in A and B must be the same" ); 00044 00045 bool status; 00046 00047 if(A.n_rows == A.n_cols) 00048 { 00049 status = auxlib::solve(X, A, B); 00050 } 00051 else 00052 if(A.n_rows > A.n_cols) 00053 { 00054 arma_extra_debug_print("solve(): detected over-determined system"); 00055 status = auxlib::solve_od(X, A, B); 00056 } 00057 else 00058 { 00059 arma_extra_debug_print("solve(): detected under-determined system"); 00060 status = auxlib::solve_ud(X, A, B); 00061 } 00062 00063 if(status == false) 00064 { 00065 X.reset(); 00066 } 00067 00068 return status; 00069 }
Mat<eT> solve | ( | const Base< eT, T1 > & | A_in, | |
const Base< eT, T2 > & | B_in | |||
) | [inline] |
Definition at line 76 of file fn_solve.hpp.
References arma_print(), Mat< eT >::reset(), and solve().
00077 { 00078 arma_extra_debug_sigprint(); 00079 00080 Mat<eT> X; 00081 const bool status = solve(X, A_in, B_in); 00082 00083 if(status == false) 00084 { 00085 arma_print("solve(): solution not found"); 00086 00087 X.reset(); 00088 } 00089 00090 return X; 00091 }