simulation simple d'interaction particules
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

simulation simple d'interaction particules



  1. #1
    doul11

    simulation simple d'interaction particules


    ------

    bonsoir,

    parce que j'aime bien écrire des programmes et dans le but de comprendre un peut mieux les lois de la physique, j'ai fait un petit simulateur d'interaction.

    chaque particule émet un champ, uniforme dans toutes les direction, dont la valeur diminue exponentiellement en s'éloignant. le champ agit sur la vitesse des autres particules.


    =valeur maximale du champ
    =porté du champ (distance ou le champ peut être considéré comme nul)

    les particules on comme paramètre, la positon (x,y), la vitesse (Vx,Vy), le signe du champ (+ ou -), la valeur maximale et la portée du champ.

    les paramètres de simulation est des particlules sont entré dans un ficher texte :
    Code:
    number=3
    xmin=-2000
    xmax=2000
    ymin=-200
    ymax=2000
    stepstotal=10000
    x=-100,y=-100,Vx=0,Vy=5,sign=-1,power=10,range=10
    x=0,y=500,Vx=0,Vy=0,sign=+1,power=100,range=10
    x=100,y=-100,Vx=0,Vy=5,sign=-1,power=10,range=10
    les trois pièces jointes sont les courbes de la simulation ci-dessus, le seul paramètre qui change c'est le "range" de la particule n°2 (petite croix verte)
    1:10, pas d'intercation
    2:100, petite interaction
    3:1000, grande interaction

    j'ai bien "joué" avec mon simulateur, après des dizaines et des dizaines de simulations, je me suis aperçus qu'avec deux ou trois particules interagissant dans un champ il y a déjà quasiment une infinité de possibilités : de pas d'interaction a très forte interaction qui n'a pas trouvé l'équilibre après 500.10^6 calculs.


    voila, si vous avez des idées pour améliorer le simulateur (ajout de masse, énergie cinétique, ...) ou si vous avez des idée a simuler ?

    capture d'écran1.png

    capture d'écran2.png

    capture d'écran3.png

    -----
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  2. #2
    doul11

    Re : simulation simple d'interaction particules

    ça n'intéresse personne ? j'aurais pensé que ça aurais pu être bien d'un point de vue pédagogique, tant pis

    si il y a des gens qui sont intéressé par le code du programme (c'est du C) je peut le donner.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  3. #3
    invitebe61cb8a

    Re : simulation simple d'interaction particules

    salut!
    Il y a quelque chose que je ne comprends pas tres bien dans ton equation. tu dis d'abord que les particules emettent ont un champ uniforme ( ce qui veut dire constant en norme, direction et sens) et ensuite tu dis que ce champ diminue exponentiellement en fonction de la position, il y a a mon avis une contradiction. Dans l'evolution de ton champ il y a un probleme de dimension (N0-racine(x^2+y^2)) ce qui fait que ton equation n'est pas homogene. Dans ton probleme je ne vois pas egalement comment intervient la vitesse, pourtant tu l'introduis comme parametre dans ta simulation. Ton probleme a mon avis est mal formule.
    Tu as un systeme dans lequel on a un champ uniforme N0 a l'etat initial t0. Puis a un instant t les particules changent de position ( x(t), v(t)), le champ n'est alors plus uniforme. Ton champ, tu desires qu'il diminue exponentiellement. Il faut, dans l'expression de l'evolution de ton champ, tenir compte de la vitesse et de la position. Tu dois fixer les limites de ton systeme, ce qui va te permettre de determiner Np, ta vitesse doit avoir une evolution qui depend du champ ( tu le dis dans ton enonce), une expression du genre v=q*N . Pour tes positions, tu peux les generer aleatoirement en fonction du temps, il ne faut pas que ton systeme demeure statique. un exemple qui peut ne pas etre rigoureux, peut etre meme pas trop juste) :
    1- genere des positions au temps t1
    2- evalue le champ au temps t1
    3- calcul les vitesses au temps t1 en fonction du champ
    au temps t1
    4-calcul des positions au temps t2 a partir des vitesses
    au temps t1
    (tu peux donner une relation entre X et V)
    5-calcul du champ t2
    6-calcul de la vitesse a nouveau
    et ainsi de suite

    Ton champ n'est fonction que de la position
    la vitesse est fonction du champ
    la position est fonction de la vitesse.

  4. #4
    doul11

    Re : simulation simple d'interaction particules

    bonjour,

    Citation Envoyé par lesprit Voir le message
    salut!
    Il y a quelque chose que je ne comprends pas tres bien dans ton equation. tu dis d'abord que les particules emettent ont un champ uniforme ( ce qui veut dire constant en norme, direction et sens) et ensuite tu dis que ce champ diminue exponentiellement en fonction de la position, il y a a mon avis une contradiction. Dans l'evolution de ton champ il y a un probleme de dimension (N0-racine(x^2+y^2)) ce qui fait que ton equation n'est pas homogene.
    j'ai peut être mal utilisé le mot uniforme, la valeur du champs diminue quand on s'éloigne de la particule, le champ ne varie pas en fonction de la position de la particule.

    formule corrigée : position de la particule (0,0)


    position de la particule (X,Y)




    Dans ton probleme je ne vois pas egalement comment intervient la vitesse, pourtant tu l'introduis comme parametre dans ta simulation.
    ça c'est la magie de l'informatique on peut faire ce que l'on veut, mais ça marche aussi avec des vitesses initiales a 0, si les particules sont assez proche pour qu'il y ait interaction.


    pour être plus clair voici le code qui calcule la simulation :
    Code:
    #include "simulate.h"
    
    void simulate(void)
    {
    int i,j;
    float dx,dy,rho,N;
    
    float time_step=1;
    int i_step=0;
    
    
    do
    	{
    	//printf("STEP : %i\n",i_step);
    	 
    	////////////// list particle	
    	for(i=0;i<i_particlenumber;i++)
    	{
    	/*printf("particle n°%i : x=%.4g y=%.4g Vx=%.4g Vy=%.4g sign=%+i power=%.4g range=%.4g\n",i,
    		particle[i]->x,
    		particle[i]->y,
    		particle[i]->Vx,
    		particle[i]->Vy,
    		particle[i]->sign,
    		particle[i]->power,
    		particle[i]->range);*/
    	
    	fprintf(particle_trace[i],"%.4g %.4g\n",particle[i]->x,particle[i]->y);
    	}
    
    	////////////// compute scalar
    	for(i=0;i<i_particlenumber;i++)
    		{
    		for(j=0;j<i_particlenumber;j++)
    			{
    			if(j!=i)
    				{
    				dx=particle[j]->x-particle[i]->x;
    				dy=particle[j]->y-particle[i]->y;
    				
    				rho=sqrt((dx*dx)+(dy*dy));
    				
    				//printf("from %i to %i dx=%.4g dy=%.4g rho=%.4g theta=%.4g\n",i,j,dx,dy,rho,theta);
    				
    				N=(particle[i]->power)*exp(-(5*rho)/particle[i]->range) ;
    				
    				//printf("N=%.4g\n",N);
    				if(particle[i]->sign!=particle[j]->sign)
    					{
    					particle[j]->Vx=particle[j]->Vx-(N*(dx/rho));
    					particle[j]->Vy=particle[j]->Vy-(N*(dy/rho));
    					}
    				else
    					{
    					particle[j]->Vx=particle[j]->Vx+(N*(dx/rho));
    					particle[j]->Vy=particle[j]->Vy+(N*(dy/rho));
    					}
    				
    				}
    			}
    		}
    		
    	//////////////	translate
    	for(i=0;i<i_particlenumber;i++)
    		{
    		particle[i]->x=particle[i]->x+(particle[i]->Vx*time_step);
    		particle[i]->y=particle[i]->y+(particle[i]->Vy*time_step);
    		}
    		
    
    	}
    while( (i_step++)<i_stepstotal);
    
    }
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  5. A voir en vidéo sur Futura
  6. #5
    invitebe61cb8a

    Re : simulation simple d'interaction particules

    Salut!
    Tu dis:
    "j'ai peut être mal utilisé le mot uniforme, la valeur du champs diminue quand on s'éloigne de la particule, le champ ne varie pas en fonction de la position de la particule.

    formule corrigée : position de la particule (0,0)
    N=N0exp(-5rac(x^2+y^2)/Np)

    position de la particule (X,Y)

    N=N0exp(-5rac((x-X)^2+(y-Y)^2)/Np)"

    Ton champ depend bel et bien de la position de la particule, ton champ selon que ta particule soit en (0,0) ou en (X,Y) n'a pas la même valeur.
    Je suppose que tu prends une particule source, selon ton raisonnement cette particule est fixe et plus on s'éloigne de cette particule source plus l'effet du champ que l'on ressent diminue. Cela implique que dans ton système il y a des particules qui ne sont pas fixes (tu le dis toi même la vitesse des particules changent avec le champ), et si elles bougent d'après ta relation , le champ varie en fonction de la particule.
    Il y a egalement un souci , à mon avis, tes calculs tu dois considérer la valeur moyenne du champ et pas le champ d'une particule, je prends le cas de trois charges en interaction. Si je veux étudier l'interaction d'une des particules avec les autres, il m'est impossible d'atteindre mon objectif si je considère le champ de chaque particule individuellement, mais à partir du champ resultant de la présence des charges. Là encore il faut faire attention une particule ne va pas interagir avec elle même.
    Prends également le cas du gaz décrit par la théorie de boltzmann. on définit une fonction de distribution à partir de laquelle on peut retrouver les valeurs moyennes des grandeurs physiques que l'on désire étudier.

    Tu dis: "ça c'est la magie de l'informatique on peut faire ce que l'on veut", justement on ne peut pas toujours faire ce que l'on veut, car la nature ne se comporte pas toujours comme on le souhaite. C'est sure, on peut élaborer des programmes, la question est qu'est-ce que je calcule réellement et est-ce exacte?
    Dans ton code, dans l'expression Vx+(N*(dx/rho)), la vitesse n'est pas homogène.
    Je suppose également que dans ton problême t'as pas de situation où plusieurs particules peuvent se rapprocher de sorte que la physique décrivant cette situation ne soit plus compliqué (je parle de correlation par exemple).
    Sur tes graphes j'ignore également ce que tu représentes, et quelle grandeur physique tu essaies de déterminer, à quoi sert ce simulateur?

    Je pense, à mon avis, qu'il te manque des éléments pour décrire réellement des particules en interaction et que ton probleme est mal posé.

  7. #6
    doul11

    Re : simulation simple d'interaction particules

    bonsoir,


    Citation Envoyé par lesprit Voir le message
    Ton champ depend bel et bien de la position de la particule, ton champ selon que ta particule soit en (0,0) ou en (X,Y) n'a pas la même valeur.
    dans le référentiel "espace de simulation", si une particule bouge la valeur du champs en (x,y) sera différente si la particule se trouve a (0,0) ou a (X,Y)

    dans le référentiel "particule" le champ émis par la particule ne change pas en fonction de la position (X,Y).

    par exemple X=10,Y=-10


    calculer la valeur du champ en (10,-10) donne N0 puisque c'est la position de la particule.


    Je suppose que tu prends une particule source, selon ton raisonnement cette particule est fixe et plus on s'éloigne de cette particule source plus l'effet du champ que l'on ressent diminue.Cela implique que dans ton système il y a des particules qui ne sont pas fixes (tu le dis toi même la vitesse des particules changent avec le champ), et si elles bougent d'après ta relation , le champ varie en fonction de la particule.
    oui c'est ça, en fait on ne ce comprenais pas parce qu'on ne parlais pas du même référentiel (voir ci-dessus)



    Il y a egalement un souci , à mon avis, tes calculs tu dois considérer la valeur moyenne du champ et pas le champ d'une particule, je prends le cas de trois charges en interaction. Si je veux étudier l'interaction d'une des particules avec les autres, il m'est impossible d'atteindre mon objectif si je considère le champ de chaque particule individuellement, mais à partir du champ resultant de la présence des charges.
    la résultante sur une particule est la somme de la valeur du champs des toutes celles qui sont suffisamment proche pour interagir. je ne pense pas que ça soit exact de prendre la moyenne ?


    Là encore il faut faire attention une particule ne va pas interagir avec elle même
    ce n'est pas le cas, dans le code il y a : if(j!=i), la particule ne calcule pas son interaction sur elle
    même.


    Tu dis: "ça c'est la magie de l'informatique on peut faire ce que l'on veut", justement on ne peut pas toujours faire ce que l'on veut, car la nature ne se comporte pas toujours comme on le souhaite. C'est sure, on peut élaborer des programmes, la question est qu'est-ce que je calcule réellement et est-ce exacte?
    c'était justement ma question : qu'est ce que je peut faire pour rendre le modèle plus réaliste ?


    Je suppose également que dans ton problême t'as pas de situation où plusieurs particules peuvent se rapprocher de sorte que la physique décrivant cette situation ne soit plus compliqué (je parle de correlation par exemple).
    non, mais ça peut se faire de deux façon
    1 : le programme fonctionne de façon dynamique, donc pendant la simulation on peut supprimer deux particules pour en créer une nouvelle.
    2 : on peut considérer que chaque particule est un groupe de n particules, ce qui veut dire que des particules qui on été groupé, peuvent être dé-groupés.


    Sur tes graphes j'ignore également ce que tu représentes, et quelle grandeur physique tu essaies de déterminer
    le simulateur montre la trajectoire des particules en fonction des valeur qu'on donne aux différents paramètres des particules.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/03/2010, 18h30
  2. Paramètre d'interaction?
    Par invite297d01f2 dans le forum Chimie
    Réponses: 0
    Dernier message: 14/04/2009, 15h31
  3. particules d'air qui freine des particules d'hélium
    Par invite334acd02 dans le forum Physique
    Réponses: 0
    Dernier message: 13/09/2007, 10h26
  4. Hamiltonien d'interaction
    Par Lévesque dans le forum Physique
    Réponses: 9
    Dernier message: 12/10/2006, 22h04
  5. type d'interaction inconnu
    Par invitea4e44b14 dans le forum Biologie
    Réponses: 1
    Dernier message: 24/01/2006, 10h37