Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes
Algorithmes Forum d'entraide sur l'algorithmique, l'intelligence artificielle, le traitement numérique d'images et les mathématiques. Avant de poster : Cours d'algorithmique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 23h07   #1
membreComplexe12
Membre chevronné
 
Inscription : février 2010
Messages : 1 799
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 799
Points : 729
Points : 729
Par défaut equation avec ordres de grandeur différents

Bonjour tous,

j'ai un petit soucis car je travail actuellement avec des ordres de grandeur très différent et j'aimerai savoir comment faire
pour programmer ce que je souhaite faire.

je souhaite programmer cette multiplication matricielle :
==> cf. PJ

le soucis est que dans mon probleme j'ai des ordre de grandeur très différent !

Par exemple :
x_{10}=1e30
x_{20}=0
les valeur de b_1 et b_2 sont liées à ces valeurs de x
si x_{10} est très grand c'est la meme chose pour b_1

Ce que je cherche
je cherche une petite technique mathématique pour ramener ceci à une equation qui manipule des ordres de grandeurs equivalent
mais je ne sais pas trop comment faire sur ce cas simple.

ps: voyez vous une astuce simple ? ou je dois faire du préconditionnement ? (je ne connais pas vraiment)
membreComplexe12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 10h48   #2
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
peut-être raisonner en pourcentage ??

val min - max de x10
val min - max de x20

transformer tout en val-valmin/(val-max-valmin). Là tous tes coeffs seront entre 0 et 1.


Une fois la solution trouvée, tu remets les bonnes valeurs :

vraie valeur = val min + valeur*(valmax-valmin)
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 17h12   #3
FR119492
Rédacteur/Modérateur
 
Jean-Marc Blanc
Inscription : avril 2007
Messages : 2 840
Détails du profil
Informations personnelles :
Nom : Jean-Marc Blanc
Âge : 72

Informations forums :
Inscription : avril 2007
Messages : 2 840
Points : 3 974
Points : 3 974
Salut!
Si tes données sont des grandeurs physiques, tu choisis des unités mieux adaptées pour les exprimer, par exemple des nanosecondes ou des gigahertz.
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)
FR119492 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 19h12   #4
membreComplexe12
Membre chevronné
 
Inscription : février 2010
Messages : 1 799
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 799
Points : 729
Points : 729
merci pour vos réponses.

- je vais regarder si j'arrive à faire ceci avec les pourcentages car ça me semble une bonne solution

- le changement d'unité je ne pense pas que ça revolve mon probleme :
en fait j'ai une boite avec par exemple 10molecules et une autre 1e50 molecules et je ne peux peut pas faire vraiment autrement (ou je change l'unité d'une boite mais pas de l'autre.)
membreComplexe12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 20h12   #5
membreComplexe12
Membre chevronné
 
Inscription : février 2010
Messages : 1 799
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 799
Points : 729
Points : 729
Citation:
Envoyé par souviron34 Voir le message
peut-être raisonner en pourcentage ??
val min - max de x10
val min - max de x20
transformer tout en val-valmin/(val-max-valmin). Là tous tes coeffs seront entre 0 et 1.
Une fois la solution trouvée, tu remets les bonnes valeurs :
vraie valeur = val min + valeur*(valmax-valmin)
souviron j'ai beaucou ton idée mais j'ai un peu de mal à la mettre en place
car je ne comprends pas vraiment tes notations, pourrais tu detailler un peu plus s'il te plait ?

je te remercie
membreComplexe12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 00h31   #6
Aleph69
Membre Expert
 
Homme
Chercheur
Inscription : mars 2010
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 1 143
Points : 1 654
Points : 1 654
Citation:
Envoyé par membreComplexe12 Voir le message
le soucis est que dans mon probleme j'ai des ordre de grandeur très différent !
Et alors? Concrètement, quel est le problème?
Donne un exemple précis avec des valeurs pour qu'on comprenne.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 09h04   #7
membreComplexe12
Membre chevronné
 
Inscription : février 2010
Messages : 1 799
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 799
Points : 729
Points : 729
j'ai mon système qui va etre très mal conditionné si j'ai des ordres de grandeurs tres différent et donc une precision sur la solution mediocre ?

ps : ici je n'ai pas presenté mon systeme sous forme classique car la matrice etait tres facile à inverser
membreComplexe12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 09h48   #8
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
Citation:
Envoyé par membreComplexe12 Voir le message
souviron j'ai beaucou ton idée mais j'ai un peu de mal à la mettre en place
car je ne comprends pas vraiment tes notations, pourrais tu detailler un peu plus s'il te plait ?

je te remercie
Si l'on prend (je ne sais pas si c'est le cas) comme input tes x10 et x20...

Ou quel que soit ce que tu as en entrée en fonction de ton nombre de molécules..

Pour chaque entrée (dépendante) de x10, tu calcules d'abord le min et max. Puis tu remplaces ces valeurs par le pourcentage, en stockant le min et le max (pourcentage = (valeur-min)/(max - min)).

Même chose pour les entrées () de x20..

Là tu fais tes calculs avec que des quantités entre 0 et 1.

Une fois tes calculs faits, pour avoir les bonnes valeurs de sortie, tu appliques la règle de trois inverse avec les min-max pour revenir dans le bon système.. (valeur = min + pourcentage*(max-min))

ça revient au changement d'unité de FR119492 mais en faisant des unités relatives..



Sinon, si la différence porte seulement sur le nombre (et pas les valeurs comme tu semblais le suggérer), alors tu remplaces chaque entrée par entrée/nombre, et tu multiplies chaque sortie par nombre..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2012, 10h58   #9
Aleph69
Membre Expert
 
Homme
Chercheur
Inscription : mars 2010
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 1 143
Points : 1 654
Points : 1 654
Citation:
Envoyé par membreComplexe12 Voir le message
j'ai mon système qui va etre très mal conditionné si j'ai des ordres de grandeurs tres différent et donc une precision sur la solution mediocre ?

ps : ici je n'ai pas presenté mon systeme sous forme classique car la matrice etait tres facile à inverser
Je ne comprends plus. Tu dois calculer un produit matrice-vecteur ou résoudre un système linéaire?
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 12h40   #10
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
Je crois que ce qu'il voulait dire au départ est que n'importe quel calcul (matriciel ou non) où les coeffs ont des écarts gigantesques peut être potentiellement biaisé, voire faux, à cause des problèmes numériques.. (arrondis, comparaisons..)

Ce qui peut être amplifié par/pour des méthodes style pivot ou autre "convergence" ou autre..

Si j'ai bien compris....
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 16h00   #11
Aleph69
Membre Expert
 
Homme
Chercheur
Inscription : mars 2010
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 1 143
Points : 1 654
Points : 1 654
Citation:
Envoyé par souviron34 Voir le message
Je crois que ce qu'il voulait dire au départ est que n'importe quel calcul (matriciel ou non) où les coeffs ont des écarts gigantesques peut être potentiellement biaisé, voire faux, à cause des problèmes numériques.. (arrondis, comparaisons..)
Par définition, toutes les opérations entre flottants sont potentiellement biaisées, et rares sont les cas où les calculs sont exacts. C'est totalement indépendant de la présence de contrastes entre les flottants impliqués. La manière dont ces erreurs d'arrondis sont amplifiées au cours des calcul dépend bien évidemment des données ET de l'algorithme. Résoudre un système linéaire et calculer un produit matrice-vecteur, ce n'est pas la même chose du point de vue de la stabilité des calculs.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 23h04   #12
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 473
Points : 16 473
Citation:
Envoyé par Aleph69 Voir le message
Par définition, toutes les opérations entre flottants sont potentiellement biaisées, et rares sont les cas où les calculs sont exacts. C'est totalement indépendant de la présence de contrastes entre les flottants impliqués.
A ce propos: Why was Pinball removed from Windows Vista?.

Citation:
We had several million lines of code still to port, so we couldn't afford to spend days studying the code trying to figure out what obscure floating point rounding error was causing collision detection to fail. We just made the executive decision right there to drop Pinball from the product.
(désolé pour ce léger hors-sujet)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 10h44   #13
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
Citation:
Envoyé par Aleph69 Voir le message
Par définition, toutes les opérations entre flottants sont potentiellement biaisées, et rares sont les cas où les calculs sont exacts. C'est totalement indépendant de la présence de contrastes entre les flottants impliqués. La manière dont ces erreurs d'arrondis sont amplifiées au cours des calcul dépend bien évidemment des données ET de l'algorithme. Résoudre un système linéaire et calculer un produit matrice-vecteur, ce n'est pas la même chose du point de vue de la stabilité des calculs.
oui et non...

Dès qu'une addition/soustraction est impliquée, ça se sent...

Vu que (par exemple en 32 bits) la précision double est de 10^-16, si l'on additionne 1 et 10^-20, on aura toujours 1, et même si on additionne 1 et 10^-17

Donc, dès qu'une addition ou soustraction est impliquée, on a fortement intérêt à avoir des termes du "même ordre", ou tout au moins rentrant dans le cadre de la précision informatique.

On ne peut donc pas dire que c'est "totalement indépendant". Et comme de nombreuses opérations matricielles ou vectorielles reposent sur des additions/soustracttions, il est très loin d'être absurde de vouloir avoir un ordre de grandeur comparable, ou tout au moins d'un ordre largement supérieur à la précision intrinsèque..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 22h23   #14
Aleph69
Membre Expert
 
Homme
Chercheur
Inscription : mars 2010
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 1 143
Points : 1 654
Points : 1 654
Citation:
Envoyé par souviron34 Voir le message
oui et non...

Dès qu'une addition/soustraction est impliquée, ça se sent...

Vu que (par exemple en 32 bits) la précision double est de 10^-16, si l'on additionne 1 et 10^-20, on aura toujours 1, et même si on additionne 1 et 10^-17

Donc, dès qu'une addition ou soustraction est impliquée, on a fortement intérêt à avoir des termes du "même ordre", ou tout au moins rentrant dans le cadre de la précision informatique.

On ne peut donc pas dire que c'est "totalement indépendant". Et comme de nombreuses opérations matricielles ou vectorielles reposent sur des additions/soustracttions, il est très loin d'être absurde de vouloir avoir un ordre de grandeur comparable, ou tout au moins d'un ordre largement supérieur à la précision intrinsèque..
En additionnant deux flottants, tu restes à la précision machine et si tu additionnes un très grand et un très petit nombre et que la précision machine ne te convient pas, c'est qu'il te faut un type de flottant plus précis, voire la possibilité de faire de la précision mixte ou exacte. Reprocher à des doubles de ne pas fournir un meilleur ordre de précision que 1e-16 lorsqu'on ajoute deux nombres n'a pas de sens. Si tu choisis d'utiliser des doubles, c'est justement pour être sûr que l'erreur sera au plus de cet ordre en faisant ton addition. Et cet ordre de précision est bien totalement indépendant de la grandeur ou de la petitesse des nombres additionnés. J'espère que c'est clair parce que je n'ai aucune envie de débattre là-dessus.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2012, 00h01   #15
membreComplexe12
Membre chevronné
 
Inscription : février 2010
Messages : 1 799
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 799
Points : 729
Points : 729
merci pour vos messages je crois que je m'étais un peu emmêlé les pinceaux avec système linéaire.

A+
membreComplexe12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 11h08   #16
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
oui c'est à dire ??

Citation:
Envoyé par Aleph69 Voir le message
J'espère que c'est clair parce que je n'ai aucune envie de débattre là-dessus.
Non c'est pas clair, mais moi non plus j'ai pas envie de débattre là-dessus

Joyeux Noel à tous..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h17.


 
 
 
 
Partenaires

Hébergement Web