ecriture scientifique

Utilisation de Xcas au lycée (sauf algorithmique), y compris projet d'epreuve pratique en Terminale S

Modérateur : xcasadmin

Denizou
Messages : 61
Inscription : mer. juin 13, 2012 7:23 am

ecriture scientifique

Message par Denizou » ven. févr. 08, 2013 8:34 am

Bonjour,

J'aimerais pouvoir vérifer l'erreur commise par une méthode d'approximation d'un nombre avec un grand nombre de décimales. Par exemple, Pi avec 100 ou 500 chiffres.
Bêtement, je voulais calculer la différence entre mon approximation et la valeur machine. Le problème est que la réponse est illisible puisque le delta s'affiche 100 ou 500 chiffres. Si je fais evalf(delta,2) j'obtiens bien évidemment 0,0.

J'ai cherché dans l'aide, mais je n'ai pas trouvé comment écrire un nombre en écriture scientifique avec peu de chiffres significatifs.

Est-ce possible ?

Merci

parisse
Messages : 5079
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: ecriture scientifique

Message par parisse » ven. févr. 08, 2013 11:35 am

Vous pouvez calculer le log10 de la valeur absolue de la difference et en prendre la partie entiere (ou l'arrondir a 1 ou 2 decimales).

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: ecriture scientifique

Message par frederic han » ven. févr. 08, 2013 1:16 pm

Bonjour,

je pense qu'il y a une difference le evalf(delta,k) avec k<14 car xcas travaille en fait avec plus que k decimales, c'est juste a l'affichage que c'est tronque.

Dans votre exemple: evalf(delta,14) ne donnera pas 0 et sera bien lisible.

Ex:
a:=approx(pi,1000)
b:=approx(pi,990)
c:=a-b
approx(c,14)
-0.944436335053647e-990

Alek
Messages : 111
Inscription : jeu. oct. 28, 2010 1:20 pm

Re: ecriture scientifique

Message par Alek » sam. févr. 09, 2013 10:34 am

C'est une solution, certes.
Mais je défends vivement l'idée sous-jacente dans le premier message de cette discussion : avoir une commande d'affichage formaté, ne serait-ce qu'une sorte de printf.

Jongler avec la précision des objets peut être assez délicat. Comparez par exemple
evalf(2*pi+0.1,55)
et
evalf(2*pi+evalf(1/10,55),55)
Seulement le deuxième est satisfaisant en termes de précision (le premier étant réduit à la précision de float de la machine imposée par 0.1). C'est pour cela que j'ai tendance à recommander l'usage de Digits. Mon exemple devient alors très simple
Digits:=55
evalf(2*pi+0.1)
Pensez maintenant aux exemples un peu plus réalistes (des approximations à une très grande précision pour déterminer numériquement des intégrales compliquées, tester des conjectures etc..)
Je considère Digits comme un avantage remarquable de Xcas (et d'ailleurs Maple) par rapport à certains autres logiciels.

Le problème c'est qu'alors en Xcas il est difficile d'avoir une affichage simple et lisible. Une commande de formatage, même basique, serait donc vraiment utile.

PS. Bien évidemment, on peut mener les calculs avec Digits:=5000 puis afficher le résultat final avec, par exemple, evalf(x,14). Mais ceci donne facilement zéro si x est d'ordre 10^(-60). Et a priori on ne connait pas l'ordre de magnitude.

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: ecriture scientifique

Message par frederic han » sam. févr. 09, 2013 11:20 pm

C'est bizarre, pour moi avec 14 chiffres ca ne fait pas 0 facilement, je peux aussi travailler avec un gros Digits et n'afficher qu'avec approx(x,14) (mais pas moins)

33>> Digits:=100
[0,0,0,1,0,[1e-12,1e-15],100,[2,50,0,25],0,1,0]
// Time 0
34>> x:=10.0^(-555):;
"Done"
// Time 0
35>> approx(x,14)
0.100000000000000e-554

parisse
Messages : 5079
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: ecriture scientifique

Message par parisse » dim. févr. 10, 2013 7:04 am

Normalement, dès qu'on dépasse 14 chiffres, ce sont des flottants multi-précisions qui sont utilisés, et donc il ne devrait pas y avoir de problèmes d'overflow de l'exposant vers le bas (alors que pour des flottants hardware, ça va se produire dès 2^(-2^10), plus précisément en-deça on aura des flottants dénormalisés puis dès que les bits de mantisse sont épuisés, 0.
Donc evalf(.,14) devrait marcher (et il me semble difficile d'avoir une commande de formattage plus simple), je vous conseille toutefois d'utiliser evalf(.,15) car avec le passage de 45 à 48 bits de mantisse dans la version 1.1 je risque de relever à 15 le nombre de chiffres à partir duquel les flottants multiprécision sont utilisés.

Denizou
Messages : 61
Inscription : mer. juin 13, 2012 7:23 am

Re: ecriture scientifique

Message par Denizou » dim. févr. 10, 2013 5:59 pm

Merci bien pour toutes ces précisions

Alek
Messages : 111
Inscription : jeu. oct. 28, 2010 1:20 pm

Re: ecriture scientifique

Message par Alek » dim. févr. 10, 2013 11:48 pm

frederic han a écrit :C'est bizarre, pour moi avec 14 chiffres ca ne fait pas 0 facilement, je peux aussi travailler avec un gros Digits et n'afficher qu'avec approx(x,14) (mais pas moins)
Oups je suis allé trop vite, désolé ! En effet, on peut travailler comme ça.
En fait je pensait à un exemple...
Digits:=500:;
x:= pi;
y := log(262537412640768744) / sqrt(163));
evalf(x-y,14)
Cela donne à peu prés zéro, mais j'ai complètement oublié que x et y n'étaient pas float.
Si x:=evalf(pi), alors evalf(x-y,14) renvoie le résultat satisfaisant (et non pas zéro).
Je dois donc retirer mon poste précédent, evalf fait l'affaire... :roll:

Répondre