IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Affichage du contenu d'un vecteur + Calcul de covariance


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Par défaut Affichage du contenu d'un vecteur + Calcul de covariance
    Bonjour Tout Le Monde,

    J'essaie d'écrire un programme qui calcule la matrice de covariance et affiche le résultat. Au moment de l'exécution du code, le programme plante. J'ai un doute sur la définition des variables mais je ne sais pas où exactement.

    Voici mes deux fonctions qui calculent la moyenne et la covariance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    bool Gadp::ComputeMeanColumnVector(std::vector<double> &o_vMean )
    {
    	o_vMean.clear();
    	if(m_Matrix.size() != m_iNBColumn || m_Matrix[0].size() != m_iNBRow)
    		return false;
     
    	for(int i = 0; i < m_iNBColumn; i++)
    	{
    		double somme = 0;
    		for(int j = 0; j < m_iNBRow ; j++)
    		{
    			 somme += m_Matrix[i][j];  
    		}
    		double mean = somme/m_iNBRow;
    		o_vMean.push_back(mean);
    	}
    	return true;
    }
     
    const std::vector<std::vector<double> > Gadp::GetCovariance()
    {
     return m_var;
    }
     
    //  Cov(i,j) = sum[ (X-mean(Xi))* (Y - mean(Yj))]  /  n
    void Gadp::calCovariance()
    {                              
    	  int i,j,k;					
    	  double factor;
    	  ComputeMeanColumnVector(m_MeanMat);
    	  for(i=0;i<m_iNBRow; i++)
    		{ 
    			for(j=0;j<m_iNBColumn; j++)
    				{
    					factor=0;
    					for(k=0;k<m_iNBRow;k++)
    						{
    							factor+=(m_mat[k][i] - m_MeanMat[i])*(m_mat[k][j] - m_MeanMat[j]); 
    						}
    					m_var[i][j]= factor/m_iNBColumn;
     
                    }
       	    }
              return ;
    }
    Et pour afficher le résultat (après avoir cliqué sur un bouton), voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void CInterfaceDlg::OnBnClickedButton1(void)
    {
    	std::vector<double> l_vMean;
    	std::vector<std::vector<double> > l_coVar;
        m_gadp.calCovariance();
        l_coVar=m_gadp.GetCovariance();
     
    	CString strText;
    	CString aAfficher = _T("");
        CString temp;
     
    for( int i=0; i<l_coVar.size(); i++ )
    	{
    		for( int j=0; j<l_coVar[i].size(); j++ )
    			{
    				temp.Format("%.2f ", l_coVar[i][j]);
    				aAfficher += temp;
    			}
    		aAfficher += _T("\r\n");
    	}
     
    AfxMessageBox(aAfficher);
     
    	int i = m_gadp.GetNBRows();
    	// Insert the item, select every other item.
    	theCtrl.InsertItem(LVIF_TEXT|LVIF_STATE,i, strText,(i%2)==0?LVIS_SELECTED : 0, LVIS_SELECTED,0, 0);
     
    	// Initialize the text of the subitems.
    	for (unsigned int j=0;j<l_vMean.size();j++)
    	{
    		std::ostringstream l_oss;
    		l_oss << l_vMean[j];
    		strText.Format(TEXT("%s"), l_oss.str().c_str());
    		theCtrl.SetItemText(i, j+1, strText);
    	}
     
    }
    Quelqu'un aurait-il une idée s'il vous plait ?
    Merci par avance.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    ce serait pas mal si tu nous disais sur quelle ligne ça plante .
    et le type d'assertion rencontrée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Par défaut
    Bonsoir,
    Merci de ta réponse. J'ai apporté des changements sur la fonction d'affichage du résultat, du coup ça s'affiche dans un ListControl.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    void CInterfaceDlg::OnBnClickedButton1(void)
    {
    	std::vector<std::vector<double> > l_coVar;
    	m_gadp.calCovariance();
    	l_coVar=m_gadp.GetCovariance();
    	CString strText,temp;
    	//int l_nbCol = m_gadp.GetNBColumns();
    	for(unsigned int nc=0;nc< m_iColonne+1;nc++)
    		{
    			//TEXT permet d'avoir la chaîne en UniCode
    			strText.Format(TEXT("Column %d"),nc);
    			m_listCovar.InsertColumn(nc,strText,LVCFMT_LEFT,70);
    		}
     
    	for( int i=0; i<l_coVar.size(); i++ )
    		{
    			strText.Format(TEXT("Row %d"), i);
    			m_listCovar.InsertItem(LVIF_TEXT|LVIF_STATE, i, strText,(i%2)==0?LVIS_SELECTED : 0, LVIS_SELECTED,0, 0);
    			for( int j=0; j<l_coVar[i].size(); j++ )
    				{
    					temp.Format("%.2f ", l_coVar[i][j]);
    					m_listCovar.SetItemText(i,j+1,temp);
    				}
    		}
    	UpdateData(false);
     
    }
    J'ai testé cette fonction à part et elle ne contient pas d'erreurs, j'ai un doute maintenant sur le calcul de la covariance dans la fonction : calCovariance().

    Merci encore une fois.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Par défaut
    J'ai corrigé mes erreurs d'affichage mais j'ai toujours un problème lors du calcul de la covariance...
    Quelqu'un aurait une idée ?
    Merci.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/11/2007, 12h40
  2. Internet Explorer a restreint l'affichage du contenu actif!
    Par Laurent_g42 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/08/2005, 19h24
  3. [HTML] affichage du contenu des balises 'alt' dans une iframe
    Par etarip dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/08/2005, 14h08
  4. affichage du contenu d'un fichier texte
    Par axel-erator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/08/2005, 16h06
  5. Comparer le contenu de deux vecteurs
    Par misou83 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 20/07/2005, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo