本文整理汇总了C++中Matrice::ObtenirValeur方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrice::ObtenirValeur方法的具体用法?C++ Matrice::ObtenirValeur怎么用?C++ Matrice::ObtenirValeur使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrice
的用法示例。
在下文中一共展示了Matrice::ObtenirValeur方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Inverse
/*
* La fonction inverse utilise l'élimination de Gauss-Jordan pour générer une matrice inverse :
* pour cela on utilise le pseudo-code trouver à cette adresse : http://fr.wikipedia.org/wiki/%C3%89limination_de_Gauss-Jordan#Pseudocode
* On effectue les opérations sur la matrice à inverser et sur une matrice identité de même dimension.
* Lorsque l'algorithme est terminé, la matrice identité a pris les valeurs de la matrice inverse.
* La matrice à inverser a pris les valeurs de sa matrice échelonnée réduite.
*/
Matrice Matrice::Inverse() const
{
int r = -1; //Attention au indices décalés dans notre logiciel (0 -> -1)
Matrice inversible(*this);
Matrice resultat = Identite();
for(int j = 0; j < m_colonnes; j++)
{
//Recherche du maximum
int k = r + 1; //<Position du maximum
for(int i = k + 1; i < m_lignes; i++) // pas besoin de comparer la case de la ligne k avec elle-même
{
if(fabs(inversible.ObtenirValeur(i, j)) > fabs(inversible.ObtenirValeur(k, j)))
k = i;
}
if(inversible.ObtenirValeur(k, j) != 0.f) //Si le max est != de 0
{
//Incrémentation de r
r++;
//Echange des lignes k et r
inversible = inversible.InversionLignes(r, k);
resultat = resultat.InversionLignes(r, k);
//Division de la ligne r par A[r,j]
float coeff = inversible.ObtenirValeur(r, j); //< A[r,j]
//On stocke la valeur avant dans la variable coeff car elle est susceptible d'être modifiée par la division
for(int l = 0; l < m_colonnes; l++)
{
inversible.FixerValeur(r, l, inversible.ObtenirValeur(r, l) / coeff);
resultat.FixerValeur(r, l, resultat.ObtenirValeur(r, l) / coeff);
}
//On parcourt toutes lignes
for(int i = 0; i < m_lignes; i++)
{
if(i == r) //sauf la ligne r
continue;
//Soustraction de la ligne i par la ligne r multipliée par le coeff i;j
float coeffIJ = inversible.ObtenirValeur(i, j); //< A[i,j]
//Pour les mêmes raisons que l'on garde A[r,j] dans coeff, on garde A[i,j] dans coeffIJ.
for(int l = 0; l < m_colonnes; l++)
{
inversible.FixerValeur(i, l, inversible.ObtenirValeur(i, l) - inversible.ObtenirValeur(r, l) * coeffIJ);
resultat.FixerValeur(i, l, resultat.ObtenirValeur(i, l) - resultat.ObtenirValeur(r, l) * coeffIJ);
}
}
}
}
return resultat;
}