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".
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".
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...
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?
un produit est nu si au moins un des membres est nul.
Pour vérifier qu'aucun des membres est nul :
et si tu obtiens un truc genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part assert(all(mon_tableau ~= 0))c'est qu'un de tes membres est nul. Pour savoir lequel
Code : Sélectionner tout - Visualiser dans une fenêtre à part assertion failed
Code : Sélectionner tout - Visualiser dans une fenêtre à part disp(find(mon_tableau == 0))
je n'ai rien obtenu. Qu'est ce que ça veut dire?
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 :
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 assert(prod(mon_tableau) ~= 0)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 test = cumprod(mon_tableau) ; bizare = find (test==0) ; disp(bizare(1)) ;
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
@ 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.
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.
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?
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/
Salut!
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.Je vais chercher une autre méthode
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
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.
Salut!
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 ...platitude spectrale des trames d'un signal audio
Jean-Marc Blanc
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 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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager