affichage lent?

Utilisation de Xcas

Modérateur : xcasadmin

evariste
Messages : 31
Inscription : sam. sept. 10, 2011 7:41 am

affichage lent?

Message par evariste » ven. mars 29, 2013 9:47 pm

Bonjour,
Quand je demande l'affichage de 10000 points, par exemple, pour une méthode de Monte-Carlo, il se fait par à-coups, comme s'il recommençait à chaque fois au début, ce qui ralentit considérablement l'affichage.
Est-ce un problème de mémoire d'ordinateur ou de programmation?
Bien amicalement,
Evariste

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

Re: affichage lent?

Message par parisse » sam. mars 30, 2013 7:17 am

Pouvez-vous donner les lignes de commande correspondantes?
Je viens d'essayer

Code : Tout sélectionner

l:=seq(rand(0,1)+i*rand(0,1),j,1,10000):;
time(evalf(l));
point(l)
il faut 0.01 seconde pour évaluer numériquement les 10000 points sur mon PC, par contre le tracé est forcément plusieurs fois plus lent (il trace une croix à chaque point soit une dizaine de pixels), et on voit un petit clignement, ce qui me parait normal. Et bien sur, chaque fois qu'il doit retracer il retrace tout depuis le début (et il retrace parfois quand ce n'est pas nécessaire, car c'est très difficile de ne le faire retracer que quand c'est vraiment indispensable).

evariste
Messages : 31
Inscription : sam. sept. 10, 2011 7:41 am

Re: affichage lent?

Message par evariste » lun. avr. 01, 2013 3:10 pm

Bonjour,
Merci de votre réponse. Voici mon programme en syntaxe TI:
:pimontecarlo(n)
:Func
:Local ct,k,a,b,rep
:DispG
:ClrGraph
:carre(point(0,0),point(1,0))
:cercle(point(0,0),1)
:For k,1,n
: a:=(alea(0,1))
: b:=(alea(0,1))
: point(a,b)
: If a^2+b^2<=1 then
: ct:=ct+1
: EndIf
:EndFor
:rep:=4.0*ct/n
:legende([100,100],4.0*ct/n)
:return rep
:EndFunc

:;
Bien cordialement,
Evariste

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: affichage lent?

Message par alb » lun. avr. 01, 2013 8:43 pm

MonteCarlo(100000) est exécuté en moins de 4 secondes:

Code : Tout sélectionner

MonteCarlo(n):={
  local a,b,c,k,L;
  L:=[0$n];
  c:=0;
  pour k de 0 jusque n-1 faire
   a:=alea(0,1);
   b:=alea(0,1);
   si a^2+b^2<=1 alors
    c:=c+1;
    L[k]=<[a,b];
   sinon
    L[k]=<[0,0];
   fsi
  fpour  
 //affichage(point_point); // si décommenté alors pas de carré affiché
 retourne carre(0,1),
 cercle(0,1,0,pi/2),nuage_points([L]),
 legende([50,50],4.0*c/n)
}:; 
j'ai rencontré deux difficultés:
1/ affichage(point_point); carre(0,1); pas de carré affiché
2/ legende([50,50],4.0*c/n) n'affiche que deux décimales. Je ne sais plus comment faire pour en afficher plus ! evalf ne marche pas.

evariste
Messages : 31
Inscription : sam. sept. 10, 2011 7:41 am

Re: affichage lent?

Message par evariste » mar. avr. 02, 2013 5:51 am

Bonjour,
J'ai essayé d'adapter mon programme en utilisant comme toi un nuage de points. Cela rame à n'en plus finir pour 10 000 points, dès lors que je mets au début (hors de la boucle évidemment) dispG et clrGraph.
Sinon, cela me demande 16 s. Est-ce normal???
Bien amicalement,
Evariste

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

Re: affichage lent?

Message par parisse » mar. avr. 02, 2013 8:08 am

Oui, parce que lorsque DispG est affiche, il va retracer le graphe tres souvent, et donc prendre une bonne partir du temps pour faire ca. C'est pour cela qu'il vaut mieux creer une liste de points a renvoyer.
Pour affichage(point_point) global, il faut que je regarde, mais on peut faire nuage_points(L,affichage=point_point). Pour avoir plus de 2 decimales, le plus simple est de convertir en chaine: legende([50,50],string(4.0*c/n))

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

Re: affichage lent?

Message par parisse » mar. avr. 02, 2013 9:19 am

Bon, affichage(point_point) suivi de carre(0,1) qui n'affiche plus le carre, c'est normal, c'est pour permettre des traces de graphes de fonction non relies. Il suffit de changer la largeur du trait pour que les lignes reapparaissent, par exemple affichage(point_point+epaisseur_ligne_2)

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: affichage lent?

Message par alb » mar. avr. 02, 2013 9:28 am

pour n=10000 on peut utiliser (pour 100000 c'est trop long):

Code : Tout sélectionner

MonteCarlo(n):={
  local a,b,c,k,L;
  L:=[];
  c:=0;
  pour k de 0 jusque n-1 faire
    a:=alea(0,1);
    b:=alea(0,1);
    si a^2+b^2<=1 alors
      c:=c+1;
      L:=append(L,[a,b]);
    fsi
  fpour 
  retourne carre(0,1),
  cercle(0,1,0,pi/2),nuage_points(L,affichage=point_point),
  legende([50,50],string(evalf(4*c/n,5)))
}:;

evariste
Messages : 31
Inscription : sam. sept. 10, 2011 7:41 am

Re: affichage lent?

Message par evariste » mar. avr. 02, 2013 1:01 pm

Merci à tous les deux pour ces précisions importantes. Je comprends mieux ce qui se passe.
Bien amicalement,
Evariste
PS: le programme précédent marche chez moi sans problème en 23 secondes (mon ordi est un peu lent de toute façon).

Répondre