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

MATLAB Discussion :

produit d'éléments non nul égal à zéro


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut produit d'éléments non nul égal à zéro
    Bonjour, pourriez vous m'aider? Je dois calculer le produit des éléments d'un vecteur qui sont non nuls mais proches de zéro. Le produit est toujours la valeur 0 même en utilisant "format long".

  2. #2
    Membre habitué
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Points : 197
    Points
    197
    Par défaut
    Elles sont proches de zéro dans quel ordre de grandeur ?

    La précision machine est de 2.2204e-16 (tape "eps" dans la console), il ne faut pas l'oublier...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    j'ai des valeurs comme celle là: 1,84182773628816e-06, 6,54579832499868e-06, 0,00118176155351141 et chaque vecteur contient 160 éléments. J'ai parcouru tout le vecteur et aucune valeur n'est égale à 0. Le produit est égal à 0. C'est normal?

  4. #4
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    un produit est nu si au moins un des membres est nul.
    Pour vérifier qu'aucun des membres est nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(all(mon_tableau ~= 0))
    et si tu obtiens un truc genre c'est qu'un de tes membres est nul. Pour savoir lequel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    disp(find(mon_tableau == 0))
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    je n'ai rien obtenu. Qu'est ce que ça veut dire?

  6. #6
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    tu a fait : assert(all(mon_tableau ~= 0))
    et Matlab n'a rien dit ?
    c'est donc que tous tes nombres sont non nuls.

    Dans ce cas là vérifie que ton produit est lui-aussi non nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(prod(mon_tableau) ~= 0)
    et si le produit est nul (ce qui m'étonnerais), tu peux voir sur quelle opération il s'annule en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    test = cumprod(mon_tableau) ;
    bizare = find (test==0) ;
    disp(bizare(1)) ;
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  7. #7
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Une des premières choses qu'on doit voir dans le cadre d'une formation en informatique, c'est la norme IEEE 754. En as-tu entendu parler? Sinon, tu en trouveras l'essentiel dans Wikipedia.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    @ ol9245 merci pour ton aide oui le produit devient égal à 0 à partir du 89 eme élément du vecteur. Mais je ne sais toujours pas pourquoi et j'ai besoin de ce produit pour pouvoir finir mon travail.
    3.00000000000000e-323 * 0.00301133912668404 pour Matlab ce produit est égale à 0. J'avoue qu'il est petit donc peut être que le problème vient des éléments du vecteur.

  9. #9
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    et oui, c'est bien ça.
    comme l'a suggéré FR119492, le résultat de la multiplication est plus petit que le plus petit nombre réel qu'un ordi peut stocker en mémoire.

    en informatique c'est pas comme en math : plus petit que trop petit = 0.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Donc il n'y a pas de solution à ce problème?

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    quel est l'intérêt de considérer que 3.00000000000000e-323 est différent de zéros? Tu travailles avec une précision de 323 chiffres après la virgules?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  12. #12
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    oui ça n'a aucun intérêt. Je découpe un signal audio en trames et je fais le produit des éléments de chaque trame. Peut-être que la décomposition en trames a engendré ce problème. Je vais chercher une autre méthode. J'ai déjà posté une discussion à propos de la méthode. http://www.developpez.net/forums/d12...-audio-trames/

  13. #13
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Je vais chercher une autre méthode
    La solution est toute simple: si ton signal est, par exemple, en volts, tu le convertis en millivolts ou en microvolts. Chaque valeur sera alors 10^3 ou 10^6 fois plus grande.

    A part ça, j'ai un doute affreux en ce qui concerne la signification de ce que tu fais: si chaque valeur est exprimée en volts, quel sens a un produit qui sera exprimé en volts^160 ?

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  14. #14
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    en fait, je dois calculer la mesure de la platitude spectrale des trames d'un signal audio. Donc ça nécessite le calcul du produit des élément du vecteur constituant la trame.

  15. #15
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    platitude spectrale des trames d'un signal audio
    Pour résoudre un problème, ou pour aider quelqu'un à le résoudre, il faut savoir sous quelle forme tu as les données (ici les trames d'un signal audio), ce que tu cherches (qu'est-ce que tu appelles la platitude spectrale?) et ce que tu vas en faire. Alors ...
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  16. #16
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Si l'un des termes de ton spectre a une puissance nulle, par définition le spectral flatness est nul. donc tu n'as pas à te casser la tête.

    Référence : http://en.wikipedia.org/wiki/Spectral_flatness
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  17. #17
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    la méthode de découpage en trames a engendré le probléme. Je viens de la changer en utilisant une autre fonction. et j'ai résolu le problème.

Discussions similaires

  1. Taille et nombre d'éléments non zéros dans un vecteur
    Par kmaniche dans le forum Téléchargez
    Réponses: 3
    Dernier message: 31/05/2013, 14h42
  2. Trouver les éléments non nuls d'un tableau 3 colonnes
    Par Décembre dans le forum MATLAB
    Réponses: 4
    Dernier message: 06/05/2010, 10h03
  3. Compter le nombre d'éléments non nuls d'un vecteur
    Par thtghgh dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/05/2009, 10h21
  4. Réponses: 3
    Dernier message: 05/12/2008, 03h39

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