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

Fortran Discussion :

Généraliser un processus à n dimensions


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut Généraliser un processus à n dimensions
    Bonjour

    J'ai une question svp :

    En Dim 2, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((index_x1.le.151).and.(index_x2.le.151)) then
    nb(index_x1+1,index_x2+1)= nb(index_x1+1,index_x2+1)+1
    end if
    en Dim3, ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((index_x1.le.21).and.(index_x2.le.21).and.(index_x3.le.21)) then
    nb(index_x1+1,index_x2+1,index_x3+1)=nb(index_x1+1,index_x2+1,index_x3+1)+1
    endif
    La question : comment-on peut la généraliser à n dimensions ????

    Merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    je simplifie ma question,
    en dim 2, on a des matrice de type A(n,m)
    en dim 3, on a des matrice de type A(n,m,p)

    je veux generaliser ce processus à une dimension dim, comment on peut faire?!!!!

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par smaq5
    en dim 2, on a des matrice de type A(n,m)
    en dim 3, on a des matrice de type A(n,m,p)
    La solution la plus simple est de lineariser les tableaux multi-dimensionnels et de jouer sur les indices pour 'emuler' un tableau a plusieurs dimensions.
    Dans la suite, je suppose que tu programmes en Fortran (column-major arrays) avec des indices allant de 1 a la valeur maximale.
    Ainsi, A(n,m) devient A(i) avec i = ((m-1)*nmax + n), A etant declare comme etant de dimension A(nmax*mmax).
    En trois dimensions, A(n,m,p) devient A(i) avec i = ((p-1)*mmax + m - 1)*nmax + n). La declaration de A est alors A(nmax*mmax*pmax).
    Il assez simple de generaliser a plus de trois dimensions, mais les formules de calcul d'indice deviennent un peu lourdes.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    r
    Citation Envoyé par DaZumba
    La solution la plus simple est de lineariser les tableaux multi-dimensionnels et de jouer sur les indices pour 'emuler' un tableau a plusieurs dimensions.
    Dans la suite, je suppose que tu programmes en Fortran (column-major arrays) avec des indices allant de 1 a la valeur maximale.
    Ainsi, A(n,m) devient A(i) avec i = ((m-1)*nmax + n), A etant declare comme etant de dimension A(nmax*mmax).
    En trois dimensions, A(n,m,p) devient A(i) avec i = ((p-1)*mmax + m - 1)*nmax + n). La declaration de A est alors A(nmax*mmax*pmax).
    Il assez simple de generaliser a plus de trois dimensions, mais les formules de calcul d'indice deviennent un peu lourdes.
    merci, je vais tester ça, et je te tiens au courant

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    Citation Envoyé par DaZumba
    La solution la plus simple est de lineariser les tableaux multi-dimensionnels et de jouer sur les indices pour 'emuler' un tableau a plusieurs dimensions.
    Dans la suite, je suppose que tu programmes en Fortran (column-major arrays) avec des indices allant de 1 a la valeur maximale.
    Ainsi, A(n,m) devient A(i) avec i = ((m-1)*nmax + n), A etant declare comme etant de dimension A(nmax*mmax).
    En trois dimensions, A(n,m,p) devient A(i) avec i = ((p-1)*mmax + m - 1)*nmax + n). La declaration de A est alors A(nmax*mmax*pmax).
    Il assez simple de generaliser a plus de trois dimensions, mais les formules de calcul d'indice deviennent un peu lourdes.
    excuse moi c'est quoi ton nmax??!!!

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    nmax est la taille de la dimension 'n' (idem pour mmax et pmax).
    J'imagine que tu as declare ton tableau 2d ainsi (Fortran90)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    integer, parameter :: nmax = 5
    integer, parameter :: mmax = 8
    real, dimension(nmax, mmax) :: tableau
    ou en Fortran77
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          integer nmax
          integer mmax
          parameter (nmax = 5, mmax = 8)
          real tableau(nmax, mmax)
    Je te propose de 'lineariser' ce tableau a 2d en le declarant ainsi (Fortran90)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    real, dimension(nmax*mmax) :: tableau
    ou en Fortran77
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          real tableau(nmax*mmax)
    Le nombre d'element est bien le meme, mais on n'y accede pas de la meme facon. Dans le deuxieme cas, on 'simule' les multi-dimensions en utilisant les formules ci-dessus.

  7. #7
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    bonjour,
    merci pour vos réponses...
    dans le même cadre, j'ai une autre question:
    maintenant aprés la linéarisation des tableaux, un certain moment il faut faire le chemain inverse: c à d, il faut transformer les tableaux de une dimension à des tableaux de n dimension..
    plus au moin j'ai la solution pour ce probléme...
    le probléme qui se pose maintenant est concerant l'affichage des résultats, j'explique:

    en dim 2: write(33,1001) vx1,vx2,dw_fenetres_x2(ii,jj), dw_fenetres_x1(ii,jj)
    en dim3: write(34,1001) vx1,vx2,vx3,dw_fenetres_x3(ii,jj,kk),
    & dw_fenetres_x2(ii,jj,kk),dw_fenetres_x1(ii,jj,kk)

    sachant que c'est trés important pour mon programme de les afficher de cette maniére et pas dans une seule colonne!!!

    donc si on a une matrice en générale de dimension demandé à l'utilisateur (càd dans le programme on la connais pas), je vois pas comment je peux faire pour l'afficher de cette maniére...

    merci d'avance de votre aide!!

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    merci en tout cas!!

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/01/2008, 14h21
  2. cherche un langage permettant de réaliser des applications en trois dimensions
    Par christian123 dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 26/10/2007, 11h26
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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