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