IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Etalement d'un paquet d'onde gaussien en Java


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Etalement d'un paquet d'onde gaussien en Java
    Bonjour,

    Je fais un projet sur la résolution de l'équation de Schrödinger pour simuler la rencontre d'une gaussienne avec une barrière de potentiel.

    Malheuresement cela demande de résoudre un système AX=B où A est une matrice 1000*1000 voir 100*100 et X,B matrice colonne 1000*1 ( ou 100*1 cela dépend de A ). J'ai donc utilisé le package EJML (Efficient Java Matrix Library ) qui fonctionne parfaitement ( d'ailleurs j'ai testé le determinant de A qui me renvoie 0 : donc A n'est pas inversible mais quand j'utilise la méthode invert sur A elle me renvoie bien une matrice ... ??? Ca doit pas être la bonne matrice inverse donc ). Mais je n'ai aucun résultat : j'ai une exception in thread : nosuchmethoderror ou quelques autres erreur à l'execution pas à la compilation que je détaillerai demain si de bonnes âmes charitables se proposent ^_^ J'ai aussi essayé la méthode de Jacobi avec un peu de succès ( ma gaussienne se déplaçait vers la droite comme prévu et s'écrasait contre le potentiel sans vibration et sans revenir en "arrière" ).

    Voila ce que je veux obtenir ^^ : http://physnum-overaguth-efftun.blog...v015-e_23.html

    Et voila le système : http://perso.fundp.ac.be/~amayer/cou...dinger-1D.html
    La matrice A est composée des ai, bi et ci et la matrice B des ui.

    Je pensais pouvoir y arriver tout seul et finalement je me suis cassé les dents à chercher et je n'ai donc plus qu'une semaine ! Le mieux étant que je trouve quelqu'un qui s'y soit déjà essayé.

    Je suis vraiment désespéré ! Je peux vous donner mon code bien sûr demandez si besoin !

    Merci à tous ceux qui m'aideront je suis à bout là ^_^

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par morghot Voir le message
    Mais je n'ai aucun résultat : j'ai une exception in thread : nosuchmethoderror ou quelques autres erreur à l'execution
    Poste tes messages d'erreur complets, on ne peux pas les deviner.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui bien sûr c'est que j'ai posté très tard donc j'allais le faire ce matin.

    Voila mon erreur :

    ********************DEBUT*******************************

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.ejml.ops
    .CommonOps.mult(Lorg/ejml/data/DenseMatrix64F;Lorg/ejml/data/DenseMatrix64F;Lorg
    /ejml/data/DenseMatrix64F;)V
            at org.ejml.data.SimpleMatrix.mult(Unknown Source)
            at monCanvas2.paint(monCanvas2.java:253)
            at traceFonction.lecture(traceFonction.java:147)
            at traceFonction.actionPerformed(traceFonction.java:119)
            at java.awt.Button.processActionEvent(Button.java:392)
            at java.awt.Button.processEvent(Button.java:360)
            at java.awt.Component.dispatchEventImpl(Component.java:4652)
            at java.awt.Component.dispatchEvent(Component.java:4482)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
            at java.awt.EventQueue.access$000(EventQueue.java:85)
            at java.awt.EventQueue$1.run(EventQueue.java:603)
            at java.awt.EventQueue$1.run(EventQueue.java:601)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:617)
            at java.awt.EventQueue$2.run(EventQueue.java:615)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
    ad.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
    java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.ejml.ops
    .CommonOps.mult(Lorg/ejml/data/DenseMatrix64F;Lorg/ejml/data/DenseMatrix64F;Lorg
    /ejml/data/DenseMatrix64F;)V
            at org.ejml.data.SimpleMatrix.mult(Unknown Source)
            at monCanvas2.paint(monCanvas2.java:253)
            at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
            at sun.awt.RepaintArea.paint(RepaintArea.java:224)
            at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
            at java.awt.Component.dispatchEventImpl(Component.java:4728)
            at java.awt.Component.dispatchEvent(Component.java:4482)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
            at java.awt.EventQueue.access$000(EventQueue.java:85)
            at java.awt.EventQueue$1.run(EventQueue.java:603)
            at java.awt.EventQueue$1.run(EventQueue.java:601)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:617)
            at java.awt.EventQueue$2.run(EventQueue.java:615)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
    ad.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
    java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.ejml.ops
    .CommonOps.mult(Lorg/ejml/data/DenseMatrix64F;Lorg/ejml/data/DenseMatrix64F;Lorg
    /ejml/data/DenseMatrix64F;)V
            at org.ejml.data.SimpleMatrix.mult(Unknown Source)
            at monCanvas2.paint(monCanvas2.java:253)
            at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
            at sun.awt.RepaintArea.paint(RepaintArea.java:224)
            at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
            at java.awt.Component.dispatchEventImpl(Component.java:4728)
            at java.awt.Component.dispatchEvent(Component.java:4482)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
            at java.awt.EventQueue.access$000(EventQueue.java:85)
            at java.awt.EventQueue$1.run(EventQueue.java:603)
            at java.awt.EventQueue$1.run(EventQueue.java:601)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:617)
            at java.awt.EventQueue$2.run(EventQueue.java:615)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessCo
    ntrolContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
    ad.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
    java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    ************************FIN************************

    Et voilà les quelques lignes de code où se produit mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SimpleMatrix Amat = new SimpleMatrix(A);
    SimpleMatrix Bmat = new SimpleMatrix(B);
    SimpleMatrix Xmat = (Amat.invert()).mult(Bmat);
    Sachant que A et B sont des double [][], A double [398][398] et B double [398][1]. ET sachant aussi comme je l'ai dit qu'avec la méthode determinant() pour les objets de la classe SimpleMatrix j'ai Amat.determinant() = 0.

    Merci beaucoup

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.lang.NoSuchMethodError: org.ejml.ops
    .CommonOps.mult(Lorg/ejml/data/DenseMatrix64F;Lorg/ejml/data/DenseMatrix64F;Lorg
    /ejml/data/DenseMatrix64F;)V
            at org.ejml.data.SimpleMatrix.mult(Unknown Source)
    visiblement dans org.ejml.data.SimpleMatrix, on fait appel à un méthode de org.ejml.ops.CommonOps qui n'existe pas/plus. Ceci arrive en général quand on mélange plusieurs versions d'une librairies. Assurez vous que tous vos jar de ejml sont dans la même version. Et qu'il n'y a pas plusieurs versions présentes dans votre classpath.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement c'était ça ! Maintenant je peux utiliser la méthode mult. En fait mon but était de multiplié la matrix inverse de A avec B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleMatrix Xmat= (Amat.invert()).mult(Bmat);
    Je n'aurais plus qu'à tracer la gaussienne dont les valeurs sont le vecteur Xmat. Seulement comme je l'ai dit le determinant de A est 0 ce qui fait que je peux inverser la matrice avec la méthode invert() mais la matrice rendue contient des NAN et donc le produit aussi .... Je sais pas si je me suis tromper dans le code pour remplir ma matrice A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    A = new double [range.nbPoints-2][range.nbPoints-2];
     
    	  //////// On remplit le tableau A ////////
     
    	  /////// Lignes "commençant" par bi ////////////
    	  for ( int i = 0 ; i < range.nbPoints-2 ; i=i+3 ) {
     
    	    double vi = h(range.xmin+(i+1)*dx1);
    	    double ai = (((i+1)*dt)/(2*hb))*(-Math.pow(hb,2)/(2*m))*(1/Math.pow(dx1,2));
    	    double bi = 1 + (((i+1)*dt)/(2*hb))*((-Math.pow(hb,2)/(2*m))*(-2/Math.pow(dx1,2))+vi);
    	    double ci = (((i+1)*dt)/2*(hb))*(-Math.pow(hb,2)/(2*m*Math.pow(dx1,2)));
     
    	    for ( int a = 0 ; a < range.nbPoints-2 ; a=a+3 ) {
     
    		   A[i][a] = bi;
            }
            for ( int a = 1 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = ci;
            }
            for ( int a = 2 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = ai;
            }
           }
     
           /////// Lignes "commençant" par ai ////////////
    	  for ( int i = 1 ; i < range.nbPoints-2 ; i=i+3 ) {
     
    	    double vi = h(range.xmin+(i+1)*dx1);
    	    double ai = (((i+1)*dt)/(2*hb))*(-Math.pow(hb,2)/(2*m))*(1/Math.pow(dx1,2));
    	    double bi = 1 + (((i+1)*dt)/(2*hb))*((-Math.pow(hb,2)/(2*m))*(-2/Math.pow(dx1,2))+vi);
    	    double ci = (((i+1)*dt)/2*(hb))*(-Math.pow(hb,2)/(2*m*Math.pow(dx1,2)));		
     
    		for ( int a = 0 ; a < range.nbPoints-2 ; a=a+3 ) {
     
    		   A[i][a] = ai;
            }
            for ( int a = 1 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = bi;
            }
            for ( int a = 2 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = ci;
            }
           }
     
           /////// Lignes "commençant" par ci ////////////
    	  for ( int i = 2 ; i < range.nbPoints-2 ; i=i+3 ) {
     
    	    double vi = h(range.xmin+(i+1)*dx1);
    	    double ai = (((i+1)*dt)/(2*hb))*(-Math.pow(hb,2)/(2*m))*(1/Math.pow(dx1,2));
    	    double bi = 1 + (((i+1)*dt)/(2*hb))*((-Math.pow(hb,2)/(2*m))*(-2/Math.pow(dx1,2))+vi);
    	    double ci = (((i+1)*dt)/2*(hb))*(-Math.pow(hb,2)/(2*m*Math.pow(dx1,2)));
     
    		for ( int a = 0 ; a < range.nbPoints-2 ; a=a+3 ) {
     
    		   A[i][a] = ci;
            }
            for ( int a = 1 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = ai;
            }
            for ( int a = 2 ; a < range.nbPoints-2 ; a = a+3 ) {
     
               A[i][a] = bi;
            }
     
           }
     
    	}
    Je ne vois pas l'erreur par rapport à la matrice présente ici : http://perso.fundp.ac.be/~amayer/cou...dinger-1D.html
    Après peut être qu'il est normal que le determinant soit 0. J'ai essayé avec la méthode de Jacobi mais ma matrice A n'est pas dominante non plus donc pas de résultat ... (j'ai testé ça avec une fonction que j'ai pris sur internet). Je sais vraiment pas comment résoudre le système avec cette matrice sachant quand même qu'elle est d'ordre minimum 100*100 !!

    Merci encore

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Euh la matrice A est tridiagonale en fait ... Je viens de tilter ça maintenant donc déjà le determinant de A n'est plus égal à 0 et en plus j'imagine qu'il y a des algos plus efficace pour résoudre des systèmes dont la matrice est tridiagonale . Je suis vraiment bête ^^

    Merci en tout cas de votre aide !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Impossible de résoudre le système tridiagonal ... J'ai pas d'erreur de compilation ni d'exécution mais au lieu d'obtenir ce qu'il y a dans la vidéo de mon premier message ma gaussienne ne bouge pas et le rectangle représentant le potentiel grandit en largeur et en longueur jusqu'à recouvrer tout mon canvas. Si vous voulez des captures d'écran demandez !

    Merci.

Discussions similaires

  1. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13
  2. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 22h32
  3. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51
  4. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo