Euh... "O(x²)?"?
Résolu/Fermé
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
-
17 oct. 2008 à 21:14
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 17 oct. 2008 à 23:13
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 17 oct. 2008 à 23:13
A voir également:
- Euh... "O(x²)?"?
- O&o shutup10 - Télécharger - Confidentialité
- Direct x runtime - Télécharger - Pilotes & Matériel
- Ô majuscule - Guide
- Nouvelle partie pokemon x ✓ - Forum DS
- Bouton marche arret i o - Forum Word
21 réponses
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:55
17 oct. 2008 à 22:55
Oui aussi.
Sinon, une autre manière, tu peux calculer en deux fois.
Si tu veux calculer la somme jusqu'à 4*N+3 où N est donné.
Sinon, une autre manière, tu peux calculer en deux fois.
Si tu veux calculer la somme jusqu'à 4*N+3 où N est donné.
sinx= 0; for (n=0; n<=N; n++) { fact=factorielle(4*n+1); sinx = sinx + (x^(4*n+1))/fact; } for (n=0; n<=N; n++) { fact=factorielle(4*n+3); sinx = sinx - (x^(4*n+3))/fact; }
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 21:54
17 oct. 2008 à 21:54
Salut
Ben...
O(x^n), c'est une fonction, cette notation, c'est une des notations de Landau :
https://fr.wikipedia.org/wiki/Notations_de_Landau
En fait, on note O(x^n) (ici on devrait préciser pour x→+∞), toute fonction f telle que f(x)/x^n est bornée (ici en l'occurrence quand x→+∞).
On note o(x^n) (dans le cas qui nous intéresse, pour x→+∞), toute fonction f telle que lim (f(x)/x^n) = 0 (et donc ici, quand x→+∞).
Ta formule est pas fausse mais on peut la raffiner un peu.
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + O(x^(n+1))
Ou
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + o(x^n)
Bref, ici donc, ton O(x^(n+1)) ou ton o(x^n), c'est
(x^(n+1)/(n+1)!) + (x^(n+2)/(n+2)!) + (x^(n+3)/(n+3)!) + ... (jusqu'à +∞)
Parce qu'en fait, la formule que t'as écrite, c'est juste une écriture moins précise de
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + ... (jusqu'à +∞)
Du coup pour ton programme tu t'en occupes pas trop. Tu choisis un n assez grand et tu calcules ta somme jusqu'à n.
Tu peux améliorer le programme en choisissant le n en fonction de x. En effet, un n qui va te donner des résultats très précis pour un x pas trop grand, va donner des résultats beaucoup moins satisfaisants pour un x plus grand. Du coup, tu peux sommer jusqu'à ce que le premier terme du reste ((x^(n+1)/(n+1)!)) soit inférieur à un petit nombre donné.
Par contre, si tu vas jusqu'à des n relativement grands, pense à utiliser une exponentiation rapide.
https://fr.wikipedia.org/wiki/Exponentiation_rapide
Sinon ça va ramer...
Et dernière chose, je pense que si t'essaies de calculer l'exponentielle d'un grand nombre de cette manière (Quel sera exactement "grand" ? Ben je sais pas trop...), tu vas rapidement avoir des soucis. En effet, x^n→+∞) (tout au moins pour x > 1) et n!→+∞.
En théorie (x^n/n!)→+0 mais numériquement, tu vas avoir à évaluer le quotient de deux grands nombres et t'auras des erreurs numériques monstrueuses. Et en plus, passé n=170, le résultat du calcul de n! sera tout simplement +∞.
Voilà... Amuse-toi bien ! ;-)
Ben...
O(x^n), c'est une fonction, cette notation, c'est une des notations de Landau :
https://fr.wikipedia.org/wiki/Notations_de_Landau
En fait, on note O(x^n) (ici on devrait préciser pour x→+∞), toute fonction f telle que f(x)/x^n est bornée (ici en l'occurrence quand x→+∞).
On note o(x^n) (dans le cas qui nous intéresse, pour x→+∞), toute fonction f telle que lim (f(x)/x^n) = 0 (et donc ici, quand x→+∞).
Ta formule est pas fausse mais on peut la raffiner un peu.
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + O(x^(n+1))
Ou
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + o(x^n)
Bref, ici donc, ton O(x^(n+1)) ou ton o(x^n), c'est
(x^(n+1)/(n+1)!) + (x^(n+2)/(n+2)!) + (x^(n+3)/(n+3)!) + ... (jusqu'à +∞)
Parce qu'en fait, la formule que t'as écrite, c'est juste une écriture moins précise de
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n/n!) + ... (jusqu'à +∞)
Du coup pour ton programme tu t'en occupes pas trop. Tu choisis un n assez grand et tu calcules ta somme jusqu'à n.
Tu peux améliorer le programme en choisissant le n en fonction de x. En effet, un n qui va te donner des résultats très précis pour un x pas trop grand, va donner des résultats beaucoup moins satisfaisants pour un x plus grand. Du coup, tu peux sommer jusqu'à ce que le premier terme du reste ((x^(n+1)/(n+1)!)) soit inférieur à un petit nombre donné.
Par contre, si tu vas jusqu'à des n relativement grands, pense à utiliser une exponentiation rapide.
https://fr.wikipedia.org/wiki/Exponentiation_rapide
Sinon ça va ramer...
Et dernière chose, je pense que si t'essaies de calculer l'exponentielle d'un grand nombre de cette manière (Quel sera exactement "grand" ? Ben je sais pas trop...), tu vas rapidement avoir des soucis. En effet, x^n→+∞) (tout au moins pour x > 1) et n!→+∞.
En théorie (x^n/n!)→+0 mais numériquement, tu vas avoir à évaluer le quotient de deux grands nombres et t'auras des erreurs numériques monstrueuses. Et en plus, passé n=170, le résultat du calcul de n! sera tout simplement +∞.
Voilà... Amuse-toi bien ! ;-)
Bonsoir
Sans entrer dans les détails, ça veut simplement dire un terme négligeable. Donc tu n'as pas à t'en soucier.
Mais pour appliquer ce genre de formule, il faut être capable de calculer le 'n' c'est à dire le nombre de termes à utiliser pour atteindre la précision voulue dans la réponse.
Sans entrer dans les détails, ça veut simplement dire un terme négligeable. Donc tu n'as pas à t'en soucier.
Mais pour appliquer ce genre de formule, il faut être capable de calculer le 'n' c'est à dire le nombre de termes à utiliser pour atteindre la précision voulue dans la réponse.
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:05
17 oct. 2008 à 22:05
Ben de rien ;-)
Si tu veux faire un calcul précis, le mieux c'est effectivement des doubles. De toute façon, t'as pas à en stocker une quantité industrielle, juste 3 ou 4, pas de quoi fouetter un chat, tu risques pas d'avoir des soucis d'espace mémoire avec ça :-D
Si tu veux faire un calcul précis, le mieux c'est effectivement des doubles. De toute façon, t'as pas à en stocker une quantité industrielle, juste 3 ou 4, pas de quoi fouetter un chat, tu risques pas d'avoir des soucis d'espace mémoire avec ça :-D
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:11
17 oct. 2008 à 22:11
C'est là :
https://forums.commentcamarche.net/forum/affich-37622105-langage-c-les-types-de-donnees
Un double a une taille de 8 octets et un long double a une taille de 10 octets.
Tu peux essayer avec un long double aussi pour ton code si tu veux.
https://forums.commentcamarche.net/forum/affich-37622105-langage-c-les-types-de-donnees
Un double a une taille de 8 octets et un long double a une taille de 10 octets.
Tu peux essayer avec un long double aussi pour ton code si tu veux.
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:18
17 oct. 2008 à 22:18
Tu fais une boucle où t'incrémentes n de 1, mais dans pour la formule t'utilises 2n+1, et voili voilou...8-)
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:32
17 oct. 2008 à 22:32
Si tu veux t'arrêter à 43 par exemple (43=2*21+1)
sinx= 0; for (n=0; n<=21; n++) { fact=factorielle(2*n+1); sinx = sinx + ((-1)^n)*(x^(2*n+1))/fact; }Où factorielle sera ta fonction pour calculer ta factorielle bien évidemment... (^_^)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
17 oct. 2008 à 22:26
17 oct. 2008 à 22:26
-5 7 -9, ça sonne comme un incrément de deux avec changement de signes.
Donc si c'est négatif tu multiplies par -1 et t'ajoutes 2. Sinon tu multiplies par -1 et tu soustrais 2 ;)
Cdlt
Donc si c'est négatif tu multiplies par -1 et t'ajoutes 2. Sinon tu multiplies par -1 et tu soustrais 2 ;)
coeff=coeff>0?-coeff-2:-coeff+2;
Cdlt
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 21:37
17 oct. 2008 à 21:37
Mais justement, j'incrémente un Compteur qui remplace n et se répète le nombre de fois nécessaires pour faire ce calcul...
Cela signifie donc que je n'ai pas à me soucier de ce O(x^n)??
Cela signifie donc que je n'ai pas à me soucier de ce O(x^n)??
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:02
17 oct. 2008 à 22:02
Alors merci beaucoup, c'est nettement plus clair !
Si je veux donc stocker des très grandes variables, qu'est-ce-que je devrais utiliser?
J'utilise actuellement des double...
Si je veux donc stocker des très grandes variables, qu'est-ce-que je devrais utiliser?
J'utilise actuellement des double...
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:07
17 oct. 2008 à 22:07
Ça marche ! Juste une petite question encore, c'est quoi la différence entre un double et un long double ?
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:15
17 oct. 2008 à 22:15
Par contre là je vais avoir besoin d'un petit coup de pouce ><
Pour l'exponentiel c'était assez facile, la formule était :
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n)/n!
Mais pour le sinus c'est :
x - x3/3! + x5/5! - x7/7! + ... + (-1)^n ((x^2n+1/(2n+1)!)
Comment faire pour passer de +3 à -5 puis +7...??
Je sais comment faire pour incrémenter 1 à chaque fois, mais là... :S
Pour l'exponentiel c'était assez facile, la formule était :
exp(x) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + ... + (x^n)/n!
Mais pour le sinus c'est :
x - x3/3! + x5/5! - x7/7! + ... + (-1)^n ((x^2n+1/(2n+1)!)
Comment faire pour passer de +3 à -5 puis +7...??
Je sais comment faire pour incrémenter 1 à chaque fois, mais là... :S
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:19
17 oct. 2008 à 22:19
Euh... Perso j'ai pas trop compris là =S
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:28
17 oct. 2008 à 22:28
J'ai jamais fait ça, selon les changements de signes donc bon ^^ pas évident...
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:49
17 oct. 2008 à 22:49
Ah ouais je vois, ok !
J'avais sinon pensé à créer une boucle do...while dans laquelle j'insère deux if, le premier calculant n+2 et le deuxième calculant (-n+2), avec à chaque fois pour condition que le compteur < n...
J'avais sinon pensé à créer une boucle do...while dans laquelle j'insère deux if, le premier calculant n+2 et le deuxième calculant (-n+2), avec à chaque fois pour condition que le compteur < n...
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:56
17 oct. 2008 à 22:56
Ouais c'est un peu comme ça que je pensais !
Mais j'ai du mal avec la boucle for...
Mais j'ai du mal avec la boucle for...
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 22:58
17 oct. 2008 à 22:58
OK !
Enfin voilà... je vais pouvoir t'aider beaucoup plus, ça fait une éternité que j'ai pas touché du C++ :-(
Enfin voilà... je vais pouvoir t'aider beaucoup plus, ça fait une éternité que j'ai pas touché du C++ :-(
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 22:59
17 oct. 2008 à 22:59
C'est déjà beaucoup ! :)
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 834
17 oct. 2008 à 23:02
17 oct. 2008 à 23:02
Si tu le dis... 8-)
Si t'as un problème plus pointu à résoudre, fais un nouveau sujet, parce que là, je serai vite dépassé. Et dans un sujet qu'a déjà reçu des réponses, je suis pas sûr que quelqu'un de compétent vienne y mettre son nez :-D
Si t'as un problème plus pointu à résoudre, fais un nouveau sujet, parce que là, je serai vite dépassé. Et dans un sujet qu'a déjà reçu des réponses, je suis pas sûr que quelqu'un de compétent vienne y mettre son nez :-D
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
17 oct. 2008 à 23:05
17 oct. 2008 à 23:05
Ouais mais pour l'instant tout va bien, en tout cas pour ce programme :)