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 :

Fonction à 2 dimensions


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut Fonction à 2 dimensions
    Salut
    je suis nouveau sur le forum, je ne suis pas très doué en info et j'ai un problème en Fortran : j'essaye en fait de créer une fonction qui a pour argument un réel et un vecteur et qui retourne un vecteur mais je n'y arrive pas. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    program fonction 
      real k(2),x,y(2),f
      x=1
      y(1)=2
      y(2)=3
      k=f(x,y)
      write(*,*) k
    end 
      function f(r,s)
     real s(2),f(2)
      f(1)=2*s(1)*(1-s(2))
      f(2)=s(2)*(-1+s(1))
     end function
    Si quelqu'un peut m'aider ce serait sympa

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    En Fortran, une fonction sert à renvoyer une valeur. S'il y a plus d'informations à échanger il est préférable d'utiliser des subroutines (c.f. n'importe quel cours fortran, par ex. http://fortran.developpez.com/).

    Bonne continuation.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Complément à la réponse précédente.

    En F77, il n'est pas possible que le résultat d'une fonction soit un vecteur. Cette fonctionnalité a été introduite en F90.

    En F90, pour retourner autre chose qu'un scalaire de type natif (real, integer,..), tu dois utiliser une interface explicite. Une interface implicite est une interface F77: le code appelant ne sait rien de l'appelé, sauf le type du résultat. Une interface explicite est fournie par un des moyens suivants :
    • un module
    • un interface block
    • une fonction contenue dans le programme appelant

    Peut-être que ton compilateur supporte déjà F90 ou plus, mais que tu n'as pas fourni d'interface. Essayes le code suivant :
    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
    program fonction 
      implicit none
      real k(2),x,y(2)
      x=1
      y(1)=2
      y(2)=3
      k=f(x,y)
      write(*,*) k
    !end   
    contains
      function f(r,s)
     real s(2),f(2),r
      f(1)=2*s(1)*(1-s(2))
      f(2)=s(2)*(-1+s(1))
     end function
     end program

  4. #4
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    sinon, une solution avec un bloc interface:

    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
     
    program fonction 
    implicit none
      real(kind=kind(1.d0)),dimension(2) :: k,y  ! deux tableaux
      real(kind=kind(1.d0))                      x     ! une valeur
    interface
      function f(r,s)
        real(kind=kind(1.d0)),dimension(2) :: f
        real(kind=kind(1.d0)),dimension(2),intent(in):: s
        real(kind=kind(1.d0)),intent(in):: r
      end function f
    end interface
      x=1.d0
      y(1)=2.d0
      y(2)=3.d0
      k=f(x,y)
      write(*,*) k
    end program fonction  
     
    function f(r,s)
      real(kind=kind(1.d0)),dimension(2) :: f
      real(kind=kind(1.d0)),dimension(2),intent(in):: s
      real(kind=kind(1.d0)),intent(in):: r
      f(1)=2.d0*s(1)*(1.d0-s(2))
      f(2)=s(2)*(-1.d0+s(1))
    end function f

Discussions similaires

  1. [Débutant] Recoder la fonction en dimension 3
    Par moristel dans le forum MATLAB
    Réponses: 6
    Dernier message: 24/10/2014, 17h46
  2. tableau de fonctions à 2 dimensions
    Par artmicro dans le forum Langage
    Réponses: 5
    Dernier message: 29/06/2011, 11h14
  3. Dérivée d'une fonction à deux dimensions f(x,y)
    Par an1981 dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/02/2008, 09h29
  4. [MySQL] Calcul d'un prix en fonction de dimensions
    Par -cli- dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/11/2007, 20h21
  5. Réponses: 2
    Dernier message: 08/12/2005, 19h29

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