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 :

cubic spline avec des conditions aux limites


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Points : 35
    Points
    35
    Par défaut cubic spline avec des conditions aux limites
    Bonjour,

    j'ai un ensamble des points que j'ai interpolé avec la fonction cubic spline de MatLab en utilisant le programme 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
    17
    x=zeros(1,n);
    y=zeros(1,n);
     
    for j=1:1
     
        for i=1:n
     
            x(i)=t(i);
            y(i)=q(j,i);
     
        end
        cs=spline(x,y);
        xx=linspace(x(1),x(n),101);
        plot(x,y,'o',xx,ppval(cs,xx),'-');
       % hold on;
        grid on
    end
    et ce programme donne le résultats suivant:



    mais moi,je veux interpoller avec une cubic spline de telle facon que que la dérivé première et deuxième des points de l'extremité soit nulle.

    est ce que cela est possible sous MatLab?en plus après avoir interpolé je voudaris bien tracer le courbe de la dérivée première.

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Points : 35
    Points
    35
    Par défaut
    [IMG]C:\Documents and Settings\Mohamed ALAMI\Mes documents\Mes images\la courbe.jpeg[/IMG]

  3. #3
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par ENSAM-ALAMI Voir le message
    Bonjour,

    j'ai un ensamble des points que j'ai interpolé avec la fonction cubic spline de MatLab en utilisant le programme 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
    17
    x=zeros(1,n);
    y=zeros(1,n);
     
    for j=1:1
     
        for i=1:n
     
            x(i)=t(i);
            y(i)=q(j,i);
     
        end
        cs=spline(x,y);
        xx=linspace(x(1),x(n),101);
        plot(x,y,'o',xx,ppval(cs,xx),'-');
       % hold on;
        grid on
    end
    et ce programme donne le résultats suivant:



    mais moi,je veux interpoller avec une cubic spline de telle facon que que la dérivé première et deuxième des points de l'extremité soit nulle.

    est ce que cela est possible sous MatLab?en plus après avoir interpolé je voudaris bien tracer le courbe de la dérivée première.

    Merci d'avance.
    Heu t'imposes deux conditions de trop là : tu n'as le droit (avec les splines cubiques) qu'à deux conditions aux limites (en tout). En effet soit X0, X1, .. Xn tes points connus tel que f(Xi) = Yi (les Yi sont aussi connus),

    Alors pour chaque segment [Xi, Xi+1] tu cherche un polynôme a(i,3) X^3 + a(i,2) X^2 + ... + a(i,4) X^0.

    Je prends ton premier intervalle :

    tu charche (a(i,j) j=1,..,4 et i=0tel que :
    * a(i,3) X0^3 + a(i,2) X0^2 + ... + a(i,4) X0^0 = Y0
    * a(i,3) X1^3 + a(i,2) X1^2 + ... + a(i,4) X1^0 = Y0
    * 3a(i,3) X0^2 + 2 a(i,2) X0^2 + a(i,3) X0 = Y0' (que tu imposes)
    * 6a(i,3) X0 + 2 a(i,2) = Y0'' (que tu impose également

    Dont tu obtiens les a(0,j) Ensuite pour [X1 X2] tu as (i=1) :
    * a(i,3) X1^3 + a(i,2) X1^2 + ... + a(i,4) X1^0 = Y1
    * a(i,3) X2^3 + a(i,2) X2^2 + ... + a(i,4) X2^0 = Y2
    * 3a(i,3) X1^2 + 2a(i,2) X1 + a(i,3) = Y1' = 3a(i-1,3) X1^2 + 2a(i-1,2) X1 + a(i-1,3)
    * 6a(i,3) X1 + 2a(i,2) = Y1'' = 6a(i-1,3) X1 + 2a(i-1,2)

    Donc tu obtiens les a(i,j) pour i=1, ainsi de suite et donc lorsque tu arrives à ton dernier segment [Xn-1 Xn] tu obtiens les a(i,j) pour i=n-1 sans avoir besoin d'aucune condition sur Yn' ou Yn''.
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Points : 35
    Points
    35
    Par défaut
    merci,
    mais tu peux me dire comment je peux faire pour que deux conditions en utilisant la cubic spline tel que f '(X0)=0 et f '(Xn)=0.

  5. #5
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par ENSAM-ALAMI Voir le message
    merci,
    mais tu peux me dire comment je peux faire pour que deux conditions en utilisant la cubic spline tel que f '(X0)=0 et f '(Xn)=0.
    hA là c'est possible et c'est meme expliqué dans l'aide :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    >> help spline
     SPLINE Cubic spline data interpolation.
        PP = SPLINE(X,Y) provides the piecewise polynomial form of the 
        cubic spline interpolant to the data values Y at the data sites X,
        for use with the evaluator PPVAL and the spline utility UNMKPP.
        X must be a vector.
        If Y is a vector, then Y(j) is taken as the value to be matched at X(j), 
        hence Y must be of the same length as X  -- see below for an exception
        to this.
        If Y is a matrix or ND array, then Y(:,...,:,j) is taken as the value to
        be matched at X(j),  hence the last dimension of Y must equal length(X) --
        see below for an exception to this.
     
        YY = SPLINE(X,Y,XX) is the same as  YY = PPVAL(SPLINE(X,Y),XX), thus
        providing, in YY, the values of the interpolant at XX.  For information
        regarding the size of YY see PPVAL.
     
        Ordinarily, the not-a-knot end conditions are used. However, if Y contains
        two more values than X has entries, then the first and last value in Y are
        used as the endslopes for the cubic spline.  If Y is a vector, this
        means:
            f(X) = Y(2:end-1),  Df(min(X))=Y(1),    Df(max(X))=Y(end).
        If Y is a matrix or N-D array with SIZE(Y,N) equal to LENGTH(X)+2, then
        f(X(j)) matches the value Y(:,...,:,j+1) for j=1:LENGTH(X), then
        Df(min(X)) matches Y(:,:,...:,1) and Df(max(X)) matches Y(:,:,...:,end).
     
        Example:
        This generates a sine-like spline curve and samples it over a finer mesh:
            x = 0:10;  y = sin(x);
            xx = 0:.25:10;
            yy = spline(x,y,xx);
            plot(x,y,'o',xx,yy)
     
        Example:
        This illustrates the use of clamped or complete spline interpolation where
        end slopes are prescribed. In this example, zero slopes at the ends of an 
        interpolant to the values of a certain distribution are enforced:
           x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
           cs = spline(x,[0 y 0]);
           xx = linspace(-4,4,101);
           plot(x,y,'o',xx,ppval(cs,xx),'-');
     
        Class support for inputs x, y, xx:
           float: double, single
     
        See also interp1, pchip, ppval, unmkpp, mkpp, splines (The Spline Toolbox).
    
    
        Reference page in Help browser
           doc spline
    Voilà donc tu doit faire un truc du genre

    avec s0 = f'(x(1)) et sn = f'(x(end))
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

Discussions similaires

  1. Expression des conditions aux limites d'un système EDP
    Par kamel6002 dans le forum Mathématiques
    Réponses: 0
    Dernier message: 26/04/2013, 11h20
  2. Réponses: 0
    Dernier message: 12/07/2011, 23h15
  3. Réponses: 5
    Dernier message: 01/04/2010, 08h08
  4. Réponses: 1
    Dernier message: 10/11/2009, 12h59
  5. [ASE][T-SQL] Appel d'une sous-proc avec des conditions
    Par metheorn dans le forum Sybase
    Réponses: 1
    Dernier message: 19/05/2006, 18h38

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