当前位置: 首页>>代码示例>>C++>>正文


C++ Matrice::FixerValeur方法代码示例

本文整理汇总了C++中Matrice::FixerValeur方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrice::FixerValeur方法的具体用法?C++ Matrice::FixerValeur怎么用?C++ Matrice::FixerValeur使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Matrice的用法示例。


在下文中一共展示了Matrice::FixerValeur方法的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;
}
开发者ID:zer0tonin,项目名称:NF05lab,代码行数:61,代码来源:Matrice.cpp


注:本文中的Matrice::FixerValeur方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。