begin process at 2012 05 30 04:06:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Matrice variance covariance Memory allocation


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Matrice variance covariance Memory allocation

mardi 28 avril 2009 à 10:02:47 | Matrice variance covariance Memory allocation

tikam75007

Hello tout le monde,

J'utilise Visual Studio 2008 et Vista, je travaille sur une implementation de la décomposition de Cholesky avec la librairie Newmat (www.robertnz.net )
L'idée est donc est de décomposer une matrice de variance co-variance en produit d'une matrice triangulaire et de sa transposée.

Je teste le programme de deux manières:
 je remplis, d'une part, un tableau 5 valeurs aléatoires et d'autre part un tableau 2 v.a à la main.
Je calcule les deux matrices de variance co-variance ( une matrice 5x5 et une de 2x2) à partir de ces tableaux.
Lorsque je lance la fonction cholesky, elle échoue sur la matrice 5x5.

[CODE]

                                                    ///main.cpp

#pragma once
#include "stdafx.h"
#include "newmat.h"
#include "newmatap.h"
#include "systd.h"
#include "MatrixUtil.h"
#include <iostream>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
   
    int k;
    double testarray[5][5];
    double data[2][5];
    SymmetricMatrix Sm(5);
    SymmetricMatrix Sn(2);
    Real row[5];
    Real row2[2];
    Matrix lb(5,5);
    Matrix lbb(2,2);
   

    //remplit 5 tableaux de 5 données aléatoires

    for (int i=0;i<5;i++)
    {
       for (int j=0; j<5;j++)
        {
         srand(rdtsc());
         testarray[i][j]=rand()/1000000;
        }        
    }

    //2 tableaux 5 données aléatoires excel

    data[0][0]=0.660048032;
    data[0][1]=0.217713592;
    data[0][2]=0.247516995;
    data[0][3]=0.227325802;
    data[0][4]=0.603684;

    data[1][0]=0.76597264;
    data[1][1]=0.807215493;
    data[1][2]=0.162867934;
    data[1][3]=0.175573876;
    data[1][4]=0.48842748;

 
   //Calcule la matrice de variance covariance 5x5

     for (int i=0;i<5;i++)
    {
        for (int j=0;j<5;j++)
        {
         row[j]=covar(testarray[i],testarray[j],5);
        }
         Sm.row(i+1)<<row;
    }


   Calcule la matrice de variance covariance 2x2

    for (int i=0;i<2;i++)
    {
      for(int j=0;j<2;j++)
      {
          row2[j]=covar(data[i],data[j],5);
      }

      Sn.row(i+1)<<row2;
    }
       
           
    // Appels à la fonction Cholesky()
       
        lbb= Cholesky(Sn);
        lb=Cholesky(Sm);


       //affiche une valeur pour vérifier que la matrice de résultat n'est pas vide     
        cout<<lbb(1,1);
        cin>>k;

[/CODE]



Voici les fonctions  pour la variance et la covariance, mais a priori elles fonctionnent.

                                                    // var.h

[CODE]

double moy(double *data, int nbdata)
{
    double m=0;

    for(int i=0;i<nbdata;i++)
    {
      m+=data[i];
    }

    m=m/nbdata;

    return m;
}


double covar(double *data1,double *data2,int nbdata)
{
    double m1=0;
    double m2=0;
    double prodecart=0;

    m1=moy(data1,nbdata);
    m2=moy(data2,nbdata);

    for (int i=0;i<nbdata;i++)
    {
      prodecart+=(data1[i]-m1)*(data2[i]-m2);
    }

    prodecart=prodecart/nbdata;

    return prodecart;
}

[/CODE]


Lorsque je teste le programme Cholesky sur la matrice 5x5 échoue presque à chaque fois. Newmat lance une exception: " non positive defined memory exception at..." . Or à ce qui me semble les matrices de variance covariance sont par définition positive définie. J'imagine que j'ai un problème au moment du calcule de la matrice de variance covariance.
En revanche, je n'ai pas de problème avec la 2x2.

Si quelqu'un à une idée, merci par avance.

tikam75007
dimanche 22 novembre 2009 à 22:34:31 | Re : Matrice variance covariance Memory allocation

Niddam31

Réponse acceptée !


Elle est symetrice, c'est ok.

Mais n'aurais tu pas des val < 0 dans ta matrice de cov avec les moyennes calculées ?
Sinon, la decomp. de Cholesky est ok si c'est une matrice défine symetrique ET positive, decomposable tq:

X = V * Vt avec X = ta matrice de Cov symetrique > 0
V = matrice triangulaire superieure définie positive.

dimanche 19 décembre 2010 à 22:27:01 | Re : Matrice variance covariance Memory allocation

abourammada

Bonjour j'ai besoin d'un programme en c++ qui calcul la l'ecart type d'une matrice

Merci d'avance;


Cette discussion est classée dans : int, data, double, matrice, variance


Répondre à ce message

Sujets en rapport avec ce message

class matrice [ par flaky ] Slt à tousJ'utilise une classe "matrice" (celle de nicolas aunai, téléchargée sur le site) qui fonctionne très bien. Mais j'ai du mal à manipuler l'ob problème d'édition des liens avec code::blocks [ par walidoss1 ] Salut tout le monde !  je suis nouveau ici et j'espère trouver de l'aide :) alors je suis entrain d'implémenter l'a pointeur de la matrice [ par ciaonataha ] Bojour a tous...Comment je peux definir la matrice dans le int main(){}si, j'utilise dans les functions double **a...par exemple j'ai definit la matri Produit matriciel en c renvoit des valeurs complètement fausses [ par bilel59 ] Bonjout à tous, je sollicite votre aide pour la raison indiquée dans le titre, en effet le produif matriciel que j'effectue renvoit des valeurs vraime construire un cycle hamiltonien à partir d'une matrice de distance [ par crapette1 ] Bonjour à tous, j'ai un petit problème de programmation, je débute en c++ et je cherche à créer un cycle hamiltonien afin de réaliser un algorithme gl double free or corruption [ par BirD ] Hello tout le monde, voilà, j'ai un bête problème de pointeur dans mon code qui m'amène à une erreur de type [color=red]*** glibc detected *** ./per code ecris de la croissance [ par Flopy21 ] Salut, en fait j'ai ecris le code avec beaucoup de difficultes et quelques aides de part et d'autres personnes. Mais j'ai rencontrer des problemes lor operator[] [ par lovo ] Salut, je créer une classe matrice en ce moment avec comme data member un double**. Je n'arrive pas a faire l'opérateur d'acces à ma matrice [code=cp creation automatique d'une matrice [ par nissan1 ] Bonjour a tous, Je travail sur mon sujet de stage et je suis bloquer depuis quelques jours car j'ai fait un programme qui contient une fonction qui p


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales