78 lines
2.5 KiB
C++
78 lines
2.5 KiB
C++
/** @file matrix.hpp
|
|
* @brief Function prototypes for creating tridiagonal matrices.
|
|
*
|
|
*
|
|
*
|
|
* @author Cory Alexander Balaton (coryab)
|
|
* @author Janita Ovidie Sandtrøen Willumsen (janitaws)
|
|
* @bug No known bugs
|
|
*/
|
|
#ifndef __MATRIX__
|
|
#define __MATRIX__
|
|
|
|
#include <armadillo>
|
|
|
|
/** @brief Create a tridiagonal matrix.
|
|
*
|
|
* create_tridiagonal creates a tridiagonal matrix by first creating a matrix,
|
|
* filled with zeros, of size NxN where N is the size of the main diagonal
|
|
* matrix. Then it will fill all the values from the vector parameters into
|
|
* the matrix and return it.
|
|
*
|
|
* @param a Vector for the lower diagonal of size N-1
|
|
* @param d Vector for the main diagonal of size N
|
|
* @param e Vector for the upper diagonal of size N-1
|
|
*
|
|
* @return arma::matrix
|
|
* */
|
|
arma::mat create_tridiagonal(
|
|
const arma::vec& a,
|
|
const arma::vec& d,
|
|
const arma::vec& e);
|
|
|
|
/** @brief Create a tridiagonal matrix.
|
|
*
|
|
* This is an overload that takes doubles for the diagonals instead of
|
|
* vectors. It will create 3 vectors that are filled with the signature
|
|
* provided in the arguments, and then call create_tridiagonal with the
|
|
* vectors as the arguments.
|
|
*
|
|
* @param n The dimensions of the tridiagonal matrix
|
|
* @param a The signature for the lower diagonal
|
|
* @param d The signature for the main diagonal
|
|
* @param e The signature for the upper diagonal
|
|
*
|
|
* @return arma::matrix
|
|
* */
|
|
arma::mat create_tridiagonal(int n, double a, double d, double e);
|
|
|
|
/** @brief Create a symmetric tridiagonal matrix.
|
|
*
|
|
* create_symmetric_tridiagonal creates a symmetric tridiagonal matrix by
|
|
* calling create_tridiagonal with the same signature for the off-diagonals.
|
|
*
|
|
* @param n The dimensions of the tridiagonal matrix
|
|
* @param a The signature for the off diagonals
|
|
* @param d The signature for the main diagonal
|
|
*
|
|
* @return arma::matrix
|
|
* */
|
|
arma::mat create_symmetric_tridiagonal(int n, double a, double d);
|
|
|
|
/** @brief Find the off-diagonal element with the largest absolute value.
|
|
*
|
|
* max_offdiag_symmetric find the element with the largest absolute value
|
|
* that isn't in the diagonal. Since this function assumes that the matrix
|
|
* that is given is symmetrical, we only need to loop through the upper
|
|
* diagonals of the matrix.
|
|
*
|
|
* @param A Symmetric matrix
|
|
* @param k Variable to store the row of the return value
|
|
* @param l Variable to store the column of the return value
|
|
*
|
|
* @return Double
|
|
* */
|
|
double max_offdiag_symmetric(arma::mat& A, int& k, int& l);
|
|
|
|
#endif
|