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

Mathématiques Discussion :

Approximation de dérivée seconde fiable aux bords


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Approximation de dérivée seconde fiable aux bords
    Bonjour !

    Je souhaite créer une procédure qui calcule une approximation de la dérivée seconde (qui soit suffisamment "bonne" aux bords de l'intervalle) d'une fonction argument, dont on connaît les valeurs f_k en une subdivision régulière de [0,1] x_k.

    Jusqu'ici, j'avais utilisé une des méthodes classiques d'approximation d'une dérivée seconde (schéma (u[x + dx] - 2u[x] + u[x - dx]) / dx*dx ).
    J'utilise ensuite cette procédure dans un programme itératif qui compose les "dérivations secondes". Toutefois, si les valeurs aux bords sont mauvaises, vu qu'il y a un grand nombre de compositions, cela se propage rapidement aux autres valeurs et mes résultats sont faussés.

    Auriez-vous une idée d'une méthode d'approximation d'une dérivée seconde qui soit "fiable" aux bords ?

    J'avais pensé à la décomposition du laplacien 1D sur les fonctions propres (x->sin(nPIx)), ou alors à un spline cubique puis dérivation analytique, mais ça me parait un peu tiré par les cheveux pour un problème plutôt simple.

    Merci d'avance pour vos réponse

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Citation Envoyé par agloups Voir le message
    Jusqu'ici, j'avais utilisé une des méthodes classiques d'approximation d'une dérivée seconde (schéma (u[x + dx] - 2u[x] + u[x - dx]) / dx*dx ).
    J'utilise ensuite cette procédure dans un programme itératif qui compose les "dérivations secondes". Toutefois, si les valeurs aux bords sont mauvaises, vu qu'il y a un grand nombre de compositions, cela se propage rapidement aux autres valeurs et mes résultats sont faussés.

    Auriez-vous une idée d'une méthode d'approximation d'une dérivée seconde qui soit "fiable" aux bords ?
    Tu ne dis pas comment tu gères les points au bord; il faut a priori utiliser une approximation du même ordre que sur le reste du domaine, donc une approximation décentrée. Mais vu que tu utilises des approximations d'ordre 2, et que tu travailles sur les dérivées secondes, tu travailles sur une fonction construite comme étant constante par morceaux.
    C'est peut-être ce qui pose problème à ta résolution itérative? Mais sans en savoir plus sur le problème et la méthode de résolution, ce n'est que spéculation. D'ailleurs, je ne vois pas où interviendrait une résolution itérative; connaissant les valeurs f_k aux points x_k, et se donnant un degré d'approximation, on en déduit immédiatement les valeurs des dérivées en ces mêmes points (à l'aide des stencils de dérivation correspondants).

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.
    J'utilisais la matrice tridiagonale (-1,2,-1) pour faire le calcul, donc les approximations aux bords étaient (2*u(0) - u(1))/(dx*dx) et ( 2u(n) - u(n-1) )/dx*dx.
    Ensuite la méthode itérative intervient pour trouver le point fixe d'une fonction F: L²(0,1) -> L²(0,1) dont l'expression fait intervenir l'opérateur de dérivation seconde.
    Plus précisément, on cherche quelque chose de la forme:
    u \in L²(0,1) telle que :
    u = d²u/dx² + f(u) + K
    où f: L²(0,1) -> L²(0,1) non linéaire, K fonction de L²(0,1).
    Et pour cela j'utilise le théorème du point-fixe de Banach: si on définit la suite de L² suivante:
    u_(n+1) = d²u_n/dx² + f(u_n) + K
    alors u_n converge vers u.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par agloups Voir le message
    J'avais pensé à la décomposition du laplacien 1D sur les fonctions propres (x->sin(nPIx)), ou alors à un spline cubique puis dérivation analytique, mais ça me parait un peu tiré par les cheveux pour un problème plutôt simple.
    Très bonne idée.

    Differentiation and Numerical Integral of the Cubic Spline Interpolation
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Citation Envoyé par agloups Voir le message
    J'utilisais la matrice tridiagonale (-1,2,-1) pour faire le calcul, donc les approximations aux bords étaient (2*u(0) - u(1))/(dx*dx) et ( 2u(n) - u(n-1) )/dx*dx.
    Ces approximations ne te donnent pas une évaluation de la dérivée seconde en 0 et n; ce sont plutôt:
    u"(0)=(u(0)-2u(1)+u(2))/(dx*dx)
    u"(n)=(u(n-2)-2u(n-1)+u(n))/(dx*dx)
    qu'il faut utiliser.
    Ou, ce qui est équivalent, calculer u"(i) pour i de 1 à n-1 avec le stencil centré habituel, et prendre ensuite u"(0)=u"(1) et u"(n)=u"(n-1).

    Mais vu l'importance d'une bonne évaluation de la dérivée seconde que semble demander l'algo de résolution, il est possible qu'une approximation d'ordre 2 ne suffise pas.
    Dans ce cas il faudrait passer à des approximations d'ordre plus élevée (3 ou 4).
    Je ne suis pas convaincu par l'idée d'employer un spline, vu qu'on y postule une valeur de dérivée première (ou seconde) aux bornes de l'intervalle, ou une périodicité de la fonction. Autant prendre une approximation (d'ordre suffisant) ne reposant que sur les valeurs de la fonction.

Discussions similaires

  1. Approximation de la dérivée seconde
    Par titiii dans le forum Mathématiques
    Réponses: 11
    Dernier message: 15/09/2010, 14h12
  2. Tracé de dérivées secondes
    Par yassine228 dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/04/2008, 20h35
  3. Boucle for, problème aux bords
    Par dword2add dans le forum C
    Réponses: 16
    Dernier message: 21/10/2006, 17h18
  4. rebond d'une balle aux bords de l'écran
    Par The_Duck dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/05/2006, 22h47
  5. [CSS] - une div aux bords arrondis ?
    Par 10-nice dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 23/09/2005, 15h47

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