Implement functions to create our desired matrix
This commit is contained in:
parent
97d13c6d2d
commit
68e665748a
16
include/matrix.hpp
Normal file
16
include/matrix.hpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef __MATRIX__
|
||||||
|
#define __MATRIX__
|
||||||
|
|
||||||
|
#include <armadillo>
|
||||||
|
|
||||||
|
|
||||||
|
arma::mat create_tridiagonal(
|
||||||
|
const arma::vec& a,
|
||||||
|
const arma::vec& d,
|
||||||
|
const arma::vec& e);
|
||||||
|
|
||||||
|
arma::mat create_tridiagonal(int n, double a, double d, double e);
|
||||||
|
|
||||||
|
arma::mat create_symmetric_tridiagonal(int n, double a, double d);
|
||||||
|
|
||||||
|
#endif
|
||||||
38
src/matrix.cpp
Normal file
38
src/matrix.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include "matrix.hpp"
|
||||||
|
|
||||||
|
arma::mat create_tridiagonal(
|
||||||
|
const arma::vec& a,
|
||||||
|
const arma::vec& d,
|
||||||
|
const arma::vec& e)
|
||||||
|
{
|
||||||
|
int n = d.n_elem;
|
||||||
|
arma::mat A = arma::mat(n, n).fill(0.);
|
||||||
|
|
||||||
|
A(0,0) = d(0);
|
||||||
|
A(0,1) = e(0);
|
||||||
|
|
||||||
|
for (int i = 1; i < n-1; i++) {
|
||||||
|
A(i, i-1) = a(i-1);
|
||||||
|
A(i, i) = d(i);
|
||||||
|
A(i, i+1) = e(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
A(n-1,n-1) = d(n-1);
|
||||||
|
A(n-1, n-2) = a(n-1);
|
||||||
|
|
||||||
|
return A;
|
||||||
|
}
|
||||||
|
|
||||||
|
arma::mat create_tridiagonal(int n, double a, double d, double e)
|
||||||
|
{
|
||||||
|
arma::vec a_vec = arma::vec(n-1, arma::fill::ones) * a;
|
||||||
|
arma::vec d_vec = arma::vec(n-1, arma::fill::ones) * d;
|
||||||
|
arma::vec e_vec = arma::vec(n-1, arma::fill::ones) * e;
|
||||||
|
|
||||||
|
return create_tridiagonal(a_vec, d_vec, e_vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
arma::mat create_symmetric_tridiagonal(int n, double a, double d)
|
||||||
|
{
|
||||||
|
return create_tridiagonal(n, a, d, a);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user