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

 Java Discussion :

[Swing] Treillis/arbre cox ross rubinstein


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Par défaut [Swing] Treillis/arbre cox ross rubinstein
    Bonjour,

    Je suis sur un petit casse tête, la partie graphique n'est pas mon fort.

    Je cherche à coder un treillis mathématiques, plus exactement je crée un treillis CRR(finance) par le modèle binomial. Du coté de la partie théorique aucun problème.

    Par contre j'aimerais en Swing faire un truc de ce genre : http://commons.wikimedia.org/wiki/Fi...ns_Reelles.png

    Mais en Swing quelle algorithme utiliser ? Faut-il d'abord que je calcule l'angle du treillis?
    J'aimerais pouvoir faire de même avec un modèle trinomial (plus précis).

    Quelqu'un saurait-il me guider un peu ?

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    tu cherches un algo pour dessiner le graphe c'est ça ?

    Moi je dirais qu'il faut déterminer une grille (chaque bloc/noeud est au centre d'une des cases). On fixe une taille de case (hauteur et largeur en pixels)

    Pour connaitre la hauteur de la grille (en case), il faut déterminer le n max. Mais on est pas obligé

    On peut incrémenter n petit à petit, par une translation, qui décale à chaque n de 1 case. (quand je parle de translation je parle de translation opérée par java.awt.geom.AffineTransform

    On voit que les cases sont remplies en quinconce (d'ou une translation de 1 case à chaque n), et que la première de chaque n est dans la première case en partant du haut (translation prise en compte), et qu'ensuite les suivantes sont dessinées en sautant une case à chaque noeud.
    C'est à dire :
    - pour le rang 0 : la case est en coordonnées 0,0
    - pour le rang 1 : on translate d'une case, la case du rang 0 passe en 0,1
    et la case 1 du rang 1 est en 1,0, la case 2, en 1,2
    - pour le rang 2 : on translate d'une case, la case du rang 0 passe en 0,2
    et la case 1 du rang 1 passe en 1,1, la case 2, en 1,3,
    la case 1 du rang 3 est en 2,0, la case 2 en 2,2, la case 3, en 2,4
    et ainsi de suite

    Il suffit donc d'une primitive de dessin de case, puis de primitives pour dessiner les liens entre cases (les flèches)

    Le fait d'utiliser une translation fait qu'on a pas besoin de calculer de décalage de coordonnées : à la limite on peut encore plus simplifier en translatant pour chaque noeud d'une même colonne : dans ce cas toutes les coordonnées des éléments à dessiner sont toujours les mêmes... on ne fait que faire des translation à chaque fois qu'on se déplace dans les noeuds

    On dessine chaque bloc de gauche à droite, et de haut en bas :
    - on itère i de 0 à n,
    - pour chaque i, on connait le nombre de noeuds à dessiner (à priori i + 1) : on translate vers le haut d'une case de grille (donc tout le graphe précédemment dessiné translate vers le bas), on dessine les n+1 noeuds de haut en bas, on dessine les liens avec les noeuds de la colonne i-1 (on se basant sur la quinconce, on peut en déduire les coordonnées)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Par défaut
    Oui merci, j'ai trouvé la reponse juste après la fatigue me prenait !!

    voila la solution c'est tout simple :
    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
     
    public void paintComponent(Graphics g){
    			String t="S";
    			//g.drawString(t, 50, this.getY()/2);
    			int x=this.getWidth();
    			int y=this.getHeight();
    			int cX=50;
    			int cY=y/2;
    			int n=Integer.parseInt(nbPeriode.getText());
    			g.setColor(Color.BLACK);
     
    			int cd;
    			for (int i=0; i<n; i++){
    				cd=cY;
    				g.drawLine(cX, cY, cX+50, cY-30);
    				g.drawLine(cX, cY, cX+50, cY+30);
    				for (int j=0; j<i; j++){
    					cd=cd+60;
    					g.drawLine(cX, cd, cX+50, cd-30);
    					g.drawLine(cX, cd, cX+50, cd+30);
    				}
    				cX+=70;
    				cY=cY-30;
    			}
     
    			g.drawString(t, 160, y/2-30*2);
    			g.drawString(t, 160, y/2+30*2);
     
    		}
    me reste lus qu'a y mettre mes valeurs du treillis une fois le calcul finis.

    Merci

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Cool

    Je pensais que tu voulais quelque chose de plus fidèle à l'image que tu avais donné en exemple.

    Voilà mon ébauche de poc à moi :
    Fichiers attachés Fichiers attachés
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 124
    Par défaut
    Pourquoi pas pour la suite, la je fais assez rapidement l'interface qui me prend déja assez de temps^^ Mais merci beaucoup pour ton aide je regarderais ton code.

    Par contre j'ai un autre petit probleme, cette fois ci pas de SWING mais plus de contrainte de capacité. En effet pour calculer mon option, je fais cette formule :
    for(int i=0; i<n; i++){
    price_call+=binom(n,k)*...
    }
    Le problème est pour calculer le binôme de Newton :
    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
     
    public Double factoriel(long nbPeriodes, long k){
    	long nfact=1;
    			if (nbPeriodes==0){
    				nfact=1;
    			}else{
    			for (int i=1; i<=nbPeriodes; i++){
    				nfact*=i;
    			}
    		}
    		System.out.println("nfact  "+nfact);
    		long kfact=1;
    		if (k==0){
    			kfact=1;
    		}else{
    			for (int i=1; i<=k; i++){
    				kfact*=i;
    			}
    		}
    		System.out.println("k : "+k+ " ,kfact : "+kfact);
    		long nkfact=1;
    		if ((nbPeriodes-k)==0){
    			nkfact=1;
    		}else{
    			for (int i=1; i<=(nbPeriodes-k); i++){
    				nkfact*=i;
    			}
    		}
    		System.out.println("nkfact : "+nkfact);
    		double fact=nfact/(kfact*nkfact);
    		System.out.println("fact : "+fact);
    		return fact; 
    	}
    il y a un probleme de capactité. quand je mets mon nombre de périodes n trop grand.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu veux parler d'overflow, c'est ça : je viens de tester, ça va vite... rien que le nfact*i, ça monte vite !

    Mes compétences en math sont limitées... c'est quoi le binôme de Newton
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Arbres et semi-treillis
    Par SpiceGuid dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/04/2012, 18h59
  2. arbre en swing
    Par merdassiahmad dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/04/2008, 15h20
  3. [Swing] Arbre hiérarchique
    Par speedster dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/07/2007, 13h09
  4. [SWING]Comment rendre un arbre(jtree) persistent?
    Par david06600 dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2006, 17h01
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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