affichage lent?
Modérateur : xcasadmin
affichage lent?
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
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
Re: affichage lent?
Pouvez-vous donner les lignes de commande correspondantes?
Je viens d'essayer
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).
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)
Re: affichage lent?
Bonjour,
Merci de votre réponse. Voici mon programme en syntaxe TI:
Evariste
Merci de votre réponse. Voici mon programme en syntaxe TI:
Bien cordialement,: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
:;
Evariste
Re: affichage lent?
MonteCarlo(100000) est exécuté en moins de 4 secondes:
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.
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)
}:;
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.
Re: affichage lent?
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
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
Re: affichage lent?
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))
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))
Re: affichage lent?
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)
Re: affichage lent?
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)))
}:;
Re: affichage lent?
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).
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).