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

MATLAB Discussion :

Implémentation des fonctions de Bessel


Sujet :

MATLAB

  1. #1
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut Implémentation des fonctions de Bessel
    Bonjour,

    Je cherche à implémenter la fonction de Bessel "bessely()".

    J'ai déjà implémenté la fonction "besselj()" comme ceci en m'inspirant des informations prises ici.

    Voici le contenu du M-File "besselj.m":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function s=besselj(nu,z,nmax)
      for m=0:nmax-1
        a=(-1)^m;
        b=(z/2)^(2*m+nu);
        c=factorial(m);
        d=gamma(m+nu+1);
        e=a*b/c/d;
        J(m+1)=e;
      end
      s=sum(J);
    end
    Je l'ai testé en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    format long;
    for z=0:.2:1
      besselj(1,z,100)
    end
    Et j'obtiens cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    s = 0.0
    s = 0.09950083263923601
    s = 0.19602657795531875
    s = 0.2867009880639158
    s = 0.36884204609417
    s = 0.44005058574493355
    à comparer à ceci.

    Est-ce que quelqu'un a déjà essayé d'implémenter la fonction "bessely()"?
    Merci.

  2. #2
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Bonsoir,

    J'ai trouvé une solution en utilisant une autre approche.

    Je passe par les fonctions sphériques de Bessel jn(z) et yn(z), sachant que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    spherical bessel (n,z) = besselj(n+1/2,z)*sqrt(pi/(2*z))
    Voici la solution pour les jn(z):
    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
     
    function y=jn(nu,z)
      if (nu < 0)
        y=-jn(-nu,z);
        return;
      end
     
      syms zz;
      a=(-zz)^nu;
      g=sin(zz)/zz;
      for m=1:nu
        g=diff(g,zz)/zz;
      end
      y=a*g;
      y=subst(z,zz,y);
    end
    Et celle pour les yn(z):
    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
     
    function y=yn(nu,z)
      if (nu < 0)
        y=-yn(-nu,z);
        return;
      end
     
      syms zz;
      a=-(-zz)^nu;
      g=cos(zz)/zz;
      for m=1:nu
        g=diff(g,zz)/zz;
      end
      y=a*g;
      y=subst(z,zz,y);
    end
    Si quelqu'un a d'autres solutions, ou des améliorations, je suis preneur.

    Bonne soirée.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 957
    Points
    52 957
    Par défaut
    Dans quel but souhaites-tu réinventer la roue ?

    Si tu as quelques compétences en Fortran, tu peux très bien utiliser la bibliothèque amos à la base des fonctions MATLAB.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. cacher l'implémentation des fonctions inline
    Par PyNub dans le forum Débuter
    Réponses: 27
    Dernier message: 28/08/2012, 20h28
  2. [XQUERY] implémenter des fonctions
    Par fatjoe dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 14/04/2010, 13h57
  3. Réponses: 18
    Dernier message: 27/02/2009, 20h19
  4. Classe Java qui implémente des fonctions oracles
    Par kamacho25 dans le forum Outils
    Réponses: 0
    Dernier message: 28/09/2007, 15h46
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 17h19

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