Courbe de gumowski-mira

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 356 fois - Téléchargée 33 fois

Contenu du snippet

En 1980, deux physiciens I. Gumowski et C. Mira, du centre de recherche CERN de Genève en Suisse utilisèrent le système d'équations

xn+1 = Byn + f(xn)
yn+1 = -xn + f(xn+1)

où : f(x) = Ax + (2*(1-A)x² )/(1+x²)

pour simuler la trajectoire de particules se déplaçant à très haute vitesse dans un accélérateur de particules de la forme d'une mince boîte cylindrique de plusieurs mètres de long. Ils donnèrent à la constante A des valeurs entre -1 et 1, à la constante B (beaucoup plus sensible) des valeurs très près de 1 et à xo et yo des valeurs entre -20 et 20. Ils découvrirent à leur grande surprise que les trajectoires issues de ce système et portées sur un plan cartésien produisent des images surprenantes nous rappelant certaines formes de vie marine.

Le programme présent ci-dessous permet de sauvegarder les points x et y dans un fichier. J'ai utilisé GnuPlot pour tracer les points sauvegardés dans le fichier output.dat

Source / Exemple :


/* Valeurs à essayer éventuellement:
A=-0.31; B=1; x0=3.0; y0=1.0
A=-0.23; B=1; x0=0.8; y0=0.4
A=-0.05; B=1; x0=15; y0=0.0
A=-0.6; B=0.99; x0=0.09; y0=-2.76
A=0.31; B=1; x0=3; y0=1
A=-0.77; B=0.95; x0=3; y=1 */

#include <stdio.h>
#include <math.h>
#define A -0.48
#define B 0.93

int main(int argc, char *argv[])
{

  int i,n;
  float x,y,xp,yp;
  FILE *fichier;
  fichier = fopen("output.dat","w");

  x = 4.0;
  y = 4.0;
  n = 30000;
  for(i=1;i<=200;i++) {
  xp = B*y+A*x+2*(1-A)*x*x/(1+xp*xp);
  y = -x+A*xp+2*(1-A)*xp*xp/(1+xp*xp);
  x = xp;

  }
  for(i=1;i<=n;i++) {
  xp = B*y+A*x+2*(1-A)*x*x/(1+x*x);
  y = -x+A*xp+2*(1-A)*xp*xp/(1+xp*xp);
  x = xp;
  fprintf(fichier,"%f %f \n",x,y);
  }
  fclose(fichier);
  return 0;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 9 octobre 2006
Statut
Membre
Dernière intervention
9 octobre 2006

brunews au niveau vie sur terre t'apportes quoi ?
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
1
Salut Deguelatore,
Pour voir la courbe il faut ouvrir le fichier .dat et tracer les points avec un logiciel du type Gnuplot ou Excel.
J'ai fais une version améliorée de ce programme qui se trouve sur ce site à l'adresse suivante:
http://www.cppfrance.com/code.aspx?ID=29410

Avec ce dernier plus besoin d'ouvrir un fichier pour tracer les points. Ca trace tout seul grace à la lib Glut.
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Salut tous le monde. J'ai un problème avec le code. Il y a création du fichier .dat mais comment voir la courbe???
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

escusez moi je voulais pas en mettre tant...
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

amusant!...mais moi j'avais envie d'essayer d'autres courbes mais dasn le fichier texte je n'ai que :

1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0
1.#QNAN0 1.#QNAN0

a l'infini....

bizarre...je crois que ca viens du printf() qui est mal parametré mais je suis pas sur...
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.