Sto lavorando su una libreria (nel mio tempo libero) che spero di aprire presto. Uno degli elementi nella libreria è un metodo per calcolare il determinante di una data matrice di input. Per questo, ho creato un sottoprogetto chiamato "LUDecomposition" perché userò LU Decomposition per calcolare il Determinante.
Ora, il mio approccio migliore era:
-
Avere una classe "LUDecomposition" che calcola la LU Decomposizione di un segnale di input
-
Avere un'altra classe "Determinante" che usa
LUDecomposition
per il calcolo e poi restituisce questo.
Attualmente è contenuto in un file e, "Determinante" sta ereditando da "LUDecompostion" ma non sembra corretto, poiché la relazione non ha senso. LUDecomposition
- > CAN BE/IS A
Determinant
Ma non vedo altre opzioni se non quella di avere un metodo all'interno della "Decomposizione LU" e di restituirlo da lì. MA l'unico problema è che, se non volessi che gli utenti della libreria / interfaccia conoscessero come viene calcolato il determinante?
#include <iostream>
#include <vector>
typedef std::vector<double> Vector;
namespace LUDecomposition {
class LUDecompostion {
public:
LUDecompostion();
template<typename Inverse>
LUDecompostion(Inverse begin, Inverse end)
: matrix_input(begin, end)
{
const size_t matrix_size = matrix_input.size();
this->upper.resize(matrix_size, std::vector<double>(matrix_size));
this->lower.resize(matrix_size, std::vector<double>(matrix_size));
Solve();
}
void Solve();
std::vector<Vector> getUpper();
std::vector<Vector> getLower();
protected:
std::vector<Vector> matrix_input;
std::vector<Vector> upper;
std::vector<Vector> lower;
};
/*
Class Determinant
*/
class Determinant : public LUDecomposition {
public:
Determinant();
template<typename Inverse>
Determinant(Inverse begin, Inverse end)
: matrix_input(begin, end)
{
/*
TO DO
TO DO
TO DO
*/
}
};
}
EDIT:
namespace LUP
{
class LUPDecomposition {
public:
LUPDecomposition()
{
}
string getLower()
{
return "This is the lower matrix";
}
string getUpper()
{
return "This is the upper matrix";
}
protected:
std::vector<double> data;
};
LUPDecomposition FactorMatrix()
{
return LUPDecomposition();
}
}