Page 2 sur 3

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 30 Mai 2019, 11:33
de critor
On pourrait se dire qu'une solution serait d'éliminer les erreurs d'affectations récursives.

Par exemple, l'on pourrait construire l'expression non récursive de chaque terme pour ne l'évaluer qu'à la fin.

Ici pour HP Prime :
Code: Tout sélectionner
EXPORT algo2(n)
BEGIN
  local s,k;
  s:="1";
  PRINT({0,EXPR(s)});
  FOR k FROM 1 TO n DO
    s:=s+"-LN(1+"+s+")";
    PRINT({k,EXPR(s)});
  END;
  RETURN s;
END;


Et ben non, même pas, c'est toujours aberrant dès le rang 5 :
Image

Utilisons alors l'astuce donnée par parisse plus haut :
Code: Tout sélectionner
EXPORT algo3(n)
BEGIN
  local s,k;
  s:="1";
  PRINT({0,EXPR(s)});
  FOR k FROM 1 TO n DO
    s:=s+"-LNP1("+s+")";
    PRINT({k,EXPR(s)});
  END;
  RETURN s;
END;


Aberrant à partir du rang 6 mais nettement moins on va dire, et ça permettait (par chance) de répondre juste à l'exemple du sujet, mais toujours pas satisfaisant :
Image

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 30 Mai 2019, 11:40
de critor
Restons sur HP Prime, et reprenons la dernière proposition en forçant le contexte CAS :
Code: Tout sélectionner
#cas
algo4(n):=
BEGIN
  local s,k;
  s:="1";
  PRINT({0,expr(s)});
  FOR k FROM 1 TO n DO
    s:=s+"-lnp1("+s+")";
    PRINT({k,expr(s)});
  END;
  RETURN s;
END;
#end


Non, une fois de plus, on fait juste changer le type d'aberration même si par chance cela ne se produit pas trop tôt. A partir du rang 6, la suite positive semble maintenant effectuer une oscillation amortie autour de 0 :
Image

Y a-t-il seulement 1 candidat qui a réussi hors Python/NumWorks ? :p

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 30 Mai 2019, 13:34
de critor
Les deux approches du tableau de valeurs de la suite en Python maintenant :

Code: Tout sélectionner
from math import *
def tv1(n):
  u=1.
  for k in range(n+1):
    u=u-log(1+u)
    print(k,u)
  return u


Code: Tout sélectionner
from math import *
def tv2(n):
  s="1"
  for k in range(n+1):
    s=s+"-"+"log(1+"+s+")"
    print(k,eval(s))
  return eval(s)


Sur NumWorks la 2ème version n'améliore rien dans le sens où elle avorte au rang 6, toujours le même problème de la mémoire de travail ridicule de 16K.
ImageImage

Sur TI, la 2ème version plante au rang 7, ce qui laisse quand même le temps de remarquer que nous tombons quand même à nouveau sur un faux point fixe, certes de valeur différente :
ImageImage
Tout juste peut-on penser que le 1er terme stationnaire est moins faux.

Sur Casio c'est similaire, mais sans l'erreur de mémoire :
ImageImage

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 30 Mai 2019, 13:51
de wawachief
C'est rigolo, la seconde approche avec le calcul de l'expression en une fois est en fait moins précise car elle donne u4 = 3.97e-14 alors qu'en réalité u4 = 3.95 e-14, qui est la valeur obtenue avec la première approche....

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 30 Mai 2019, 14:00
de parisse
Il y a 2 sources d'erreurs: le 1+u avec u petit, mais aussi le ln(1+u) qui est equivalent a u pour u petit. Le seul moyen fiable de faire des calculs en flottants a peu pres raisonnables, c'est de remplacer u-ln(1+u) par son developpement en series a un ordre suffisant, en tout cas pour u petit. Donc, avec la Prime/Xcas/KhiCAS, on peut faire
Code: Tout sélectionner
u:=1.0-ln(2); u:=u-ln(1+u);

comme ca on a u_1 qui vaut environ 4e-2, donc u1^12 de l'ordre de 10^-17, on peut donc remplacer x-ln(1+x) par son DL a l'ordre 14 sans faire d'erreurs:
Code: Tout sélectionner
f:=unapply(series(x-ln(1+x),x=0,14,polynom),x);

puis
Code: Tout sélectionner
u:=1.0-ln(2); u:=u-ln(1+u); eps:=1e-15; for j from 3 to 100 do u:=f(u); print(j,u); if (u<eps) break; od; j

On peut verifier avec de la multi-precision que c'est correct
session Xcas

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 31 Mai 2019, 07:43
de OulanB
d'accord avec tout le monde, p=15 aurait dû alerter les élèves/enseignants ?

u(n+1) ~ 0.5*u(n)^2 lorsque u(n) est proche de zéro, donc aucune calc n'a bon pour u(6) il aurait fallu ressortir une veille sharp en double précision genre PC1475 qui calcule en 20 chiffres significatifs :)

Image

Bien sûr pour 7 ça foire aussi (il faudrait 40 décimales)

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 31 Mai 2019, 10:20
de critor
Merci pour les bonnes valeurs.
C'est l'émulateur de la Sharp PC-1475 ?

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 31 Mai 2019, 10:49
de OulanB
Oui c'est un émulateur de 1475 (voir https://sites.google.com/site/olivier2smet2/sharp/gopc1475)
Code: Tout sélectionner
10 DEFDBL
20 X=1#
30 FOR I=1 TO 7
40 X=X-LN(1+X)
50 PRINT I,X
60 NEXT I

Mais comme google ne maintient pas la compatibilité d'une version d'android à l'autre, je ne garanti pas le bon fonctionnement
sur android 6,7,8,9 ... là c'est une version recompilée à la va vite sur android studio 3.4 pour sur un galaxy A40 qui semble marchouiller suffisamment pour le calcul ...)

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 31 Mai 2019, 11:23
de critor
Merci. Très bel émulateur. ;)

Autre article à ce sujet : http://revue.sesamath.net/spip.php?breve2564 (merci Adriweb)

Re: BAC S 2019 Amérique Nord plante toutes calcs sauf NumWor

Message non luPosté: 31 Mai 2019, 11:29
de critor