47 #include <Bpp/Numeric/Matrix/MatrixTools.h> 53 K80::K80(
const NucleicAlphabet* alpha,
double kappa) :
54 AbstractParameterAliasable(
"K80."),
56 kappa_(kappa), r_(), l_(), k_(), exp1_(), exp2_(), p_(size_, size_)
58 addParameter_(
new Parameter(
"K80.kappa", kappa, &Parameter::R_PLUS_STAR));
66 kappa_ = getParameterValue(
"kappa");
154 case 0 :
return 0.25 * (1. +
exp1_) + 0.5 *
exp2_;
155 case 1 :
return 0.25 * (1. -
exp1_);
156 case 2 :
return 0.25 * (1. +
exp1_) - 0.5 *
exp2_;
157 case 3 :
return 0.25 * (1. -
exp1_);
163 case 0 :
return 0.25 * (1. -
exp1_);
164 case 1 :
return 0.25 * (1. +
exp1_) + 0.5 *
exp2_;
165 case 2 :
return 0.25 * (1. -
exp1_);
166 case 3 :
return 0.25 * (1. +
exp1_) - 0.5 *
exp2_;
172 case 0 :
return 0.25 * (1. +
exp1_) - 0.5 *
exp2_;
173 case 1 :
return 0.25 * (1. -
exp1_);
174 case 2 :
return 0.25 * (1. +
exp1_) + 0.5 *
exp2_;
175 case 3 :
return 0.25 * (1. -
exp1_);
181 case 0 :
return 0.25 * (1. -
exp1_);
182 case 1 :
return 0.25 * (1. +
exp1_) - 0.5 *
exp2_;
183 case 2 :
return 0.25 * (1. -
exp1_);
184 case 3 :
return 0.25 * (1. +
exp1_) + 0.5 *
exp2_;
244 double k_2 =
k_ *
k_;
254 case 0 :
return r_2/4. * (
exp1_ + 2. * k_2 *
exp2_);
255 case 1 :
return r_2/4. * (-
exp1_);
256 case 2 :
return r_2/4. * (
exp1_ - 2. * k_2 *
exp2_);
257 case 3 :
return r_2/4. * (-
exp1_);
263 case 0 :
return r_2/4. * (-
exp1_);
264 case 1 :
return r_2/4. * (
exp1_ + 2. * k_2 *
exp2_);
265 case 2 :
return r_2/4. * (-
exp1_);
266 case 3 :
return r_2/4. * (
exp1_ - 2. * k_2 *
exp2_);
272 case 0 :
return r_2/4. * (
exp1_ - 2. * k_2 *
exp2_);
273 case 1 :
return r_2/4. * (-
exp1_);
274 case 2 :
return r_2/4. * (
exp1_ + 2. * k_2 *
exp2_);
275 case 3 :
return r_2/4. * (-
exp1_);
281 case 0 :
return r_2/4. * (-
exp1_);
282 case 1 :
return r_2/4. * (
exp1_ - 2. * k_2 *
exp2_);
283 case 2 :
return r_2/4. * (-
exp1_);
284 case 3 :
return r_2/4. * (
exp1_ + 2. * k_2 *
exp2_);
301 p_(0, 1) = 0.25 * (1. -
exp1_);
303 p_(0, 3) = 0.25 * (1. -
exp1_);
306 p_(1, 0) = 0.25 * (1. -
exp1_);
308 p_(1, 2) = 0.25 * (1. -
exp1_);
313 p_(2, 1) = 0.25 * (1. -
exp1_);
315 p_(2, 3) = 0.25 * (1. -
exp1_);
318 p_(3, 0) = 0.25 * (1. -
exp1_);
320 p_(3, 2) = 0.25 * (1. -
exp1_);
360 double k_2 =
k_ *
k_;
const Matrix< double > & getdPij_dt(double d) const
double d2Pij_dt2(size_t i, size_t j, double d) const
double dPij_dt(size_t i, size_t j, double d) const
RowMatrix< double > exchangeability_
The exchangeability matrix of the model, defined as . When the model is reversible, this matrix is symetric.
This class implements a state map where all resolved states are modeled.
RowMatrix< double > rightEigenVectors_
The matrix made of right eigen vectors (by column).
Vdouble eigenValues_
The vector of eigen values.
Vdouble freq_
The vector of equilibrium frequencies.
Partial implementation of the ReversibleSubstitutionModel interface.
K80(const NucleicAlphabet *alpha, double kappa=1.)
RowMatrix< double > leftEigenVectors_
The matrix made of left eigen vectors (by row) if rightEigenVectors_ is non-singular.
RowMatrix< double > generator_
The generator matrix of the model.
double Pij_t(size_t i, size_t j, double d) const
double rate_
The rate of the model (default: 1). The generator (and all its vectorial components) is independent o...
void updateMatrices()
Compute and diagonalize the matrix, and fill the eigenValues_, leftEigenVectors_ and rightEigenVecto...
const Matrix< double > & getPij_t(double d) const
const Matrix< double > & getd2Pij_dt2(double d) const