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 :

Vérifier graphiquement un ordre de consistance


Sujet :

Mathématiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Vérifier graphiquement un ordre de consistance
    Bonjour,
    Je suis étudiant en Math Info et je bloque pour le tracé de l'erreur en échelle log log dans mon TP. Je n'utilise pas Matlab mais Julia 0.4.6 . Je ne savais pas où poster ce message et j'ai donc choisi Matlab car ça ne me dérangeais pas d'avoir de l'aide sur ce logiciel vu que le langage est assez proche de Julia. Entrons maintenant dans le sujet:

    Mon TP porte sur l'étude de l'équation de transport par le schéma de Lax Wendroff. Je ne vais pas rentrer dans les détails car ça serait lourd dans un forum dédié à l'informatique.
    On considère ici une dimension en temps et en espace. J'ai prouvé que ce schéma à pour ordre de consistance 2. J'aimerai vérifier cela en échelle log log.
    Dans mon code, M correspond au pas en espace et N au pas en temps. Je fixe le rapport N/M=1/3 pour que le schéma reste bien stable. La fonction Lax renvoie une approximation par le schéma et la fonction Exact la solution exacte de l'équation de transport.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        en=rand(6)
        h=rand(6)
    for k=2:7
            M=2^(-k)
            N=M/3
            h[k-1]=2*pi/(2*pi/M+1)
            en[k-1]=maximum(abs(Lax(M,N)-Exact(M,N)))
    end
        loglog(en,h)
    Voici ce que j'obtiens :
    Nom : Wendroff.png
Affichages : 798
Taille : 13,5 Ko

    Cependant je suis un peu perdu car ici il y a deux dimensions et donc je ne sais pas comment interpréter ma courbe.
    Merci d'avance pour tout aide et n'hésiter pas si vous avez des questions.

  2. #2
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Vérifier graphiquement un ordre de consistance
    Bonjour,

    Il est difficile de répondre avec précision, faute d'indications concernant les coordonnées utilisées.

    Citation Envoyé par eddy01 Voir le message
    ... On considère ici une dimension en temps et en espace. J'ai prouvé que ce schéma à pour ordre de consistance 2. J'aimerai vérifier cela en échelle log log.
    Dans mon code, M correspond au pas en espace et N au pas en temps. Je fixe le rapport N/M=1/3 pour que le schéma reste bien stable. La fonction Lax renvoie une approximation par le schéma et la fonction Exact la solution exacte de l'équation de transport.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        en=rand(6)
        h=rand(6)
    for k=2:7
            M=2^(-k)
            N=M/3
            h[k-1]=2*pi/(2*pi/M+1)
            en[k-1]=maximum(abs(Lax(M,N)-Exact(M,N)))
    end
        loglog(en,h)
    Cependant je suis un peu perdu car ici il y a deux dimensions et donc je ne sais pas comment interpréter ma courbe.
    Tu dois apparemment tester une technique de résolution approchée d'une équation différentielle, utilisant la méthode des différences finies, en comparant les grandeurs exactes et calculées (x) et (y); celles-ci devant à la limite se confondre (x = y), le graphe doit être proche de la 1re bissectrice du repère ( log(x) = log(y) ) - ce que l'on constate effectivement.

    Nom : Image_02.jpg
Affichages : 718
Taille : 9,4 Ko

    Le premier terme varie de 6E-3 à 2E-1, soit relativement dans un rapport de 1 à 33 ~ 25 ~ 101.5, donc sur un domaine suffisamment large pour conduire à une vérification satisfaisante.
    De plus, le graphe se rapproche sur sa partie gauche de la droite idéale, ce qui pourrait correspondre à l'amélioration du procédé d'approximation pour des incréments (M, N) de plus en plus petits.
    Cette proximité ne doit cependant pas faire illusion, du fait de l'intervention de coordonnées logarithmiques: un écart absolu de 0.1 correspond ici à un écart relatif égal à 100.1 - 1 = 26% !

    À ce stade, il faut reprendre les expressions de (x) et (y) pour aller plus loin - probablement un traitement statistique impliquant le graphe approché log(y) = F[log(x)] et la droite théorique.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci beaucoup pour cette réponse, c'est un peu plus clair mais je ne vois pas comment vérifier graphiquement l'ordre de consistance sur mon graphe...


    Je vais prendre un autre exemple pour une équation en dimension 1 pour deux schémas où je n'ai pas eu de problème pour interpréter:

    Premier schéma: l'ordre de consistance est 1. Je le vérifie aisément sur le graphe loglog (voir courbe bleu foncé):

    Nom : testforum2.png
Affichages : 868
Taille : 54,3 Ko

    Là on voit bien que l’erreur est proportionnelle au pas. En effet on voit bien graphiquement que lorsque le pas varie de 10-2 à 10-3 alors l’erreur varie de 10-3 à 10-4.



    Deuxième schéma: l'ordre de consistance est 2. Je le vérifie aisément sur le graphe loglog :
    Nom : testforum1.png
Affichages : 777
Taille : 15,4 Ko
    Là on voit bien que l’erreur est proportionnelle au carré du pas. En effet on voit bien graphiquement que lorsque le pas varie de 10-3 à 10-5 alors l’erreur varie de 10-1 à 10-2.



    Pour l'équation de transport, on est en dimension 2 et le schéma que j'étudie à pour ordre de consistance 2 en temps et en espace donc je voudrai le vérifier pour le pas de temps et et le pas en espace mais quand je regarde le graphe loglog de mon post précédent, je ne sais pas l'interpréter...

    En espérant avoir été un peu plus clair.
    Merci.

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Tu apportes des précisions importantes, mais qui ne permettent pas encore de répondre:

    Citation Envoyé par eddy01 Voir le message
    ... Pour l'équation de transport, on est en dimension 2 et le schéma que j'étudie à pour ordre de consistance 2 en temps et en espace donc je voudrai le vérifier pour le pas de temps et et le pas en espace mais quand je regarde le graphe loglog de mon post précédent, je ne sais pas l'interpréter...
    Quelles sont donc les grandeurs (x) et (y) dont les logarithmes sont portés sur les axes ? N'y aurait-il pas eu erreur sur leur choix, lors de la construction du graphe ? Le tracé obtenu est manifestement rectiligne, et de pente voisine de l'unité.
    La vérification graphique peut en effet porter sur plusieurs expressions concernant la fonction étudiée U(x, t); on a ainsi, en reprenant les incréments spatial (M) et temporel (N):
    E1 = U(x1, t0) - U(x0, t0) - (Delta1U)appr~ A*M2 , avec M = 2-k ;
    E2 = U(x0, t1) - U(x0, t0) - (Delta2U)appr~ B*N2 = (B/9)*M2 , puisque N = M/3 ;
    E3 = U(x1, t1) - U(x0, t0) - (Delta3U)appr~ A*M2 + B*N2 + C*M*N = (A + B/9 + C/3)*M2 .

    Il en résulte dans les trois cas un écart proportionnel à (M2), donc une droite de pente égale à 2 en coordonnées logarithmiques:
    Ei = Ki*M2 => log(Ei) = Cte + 2*log(M) ,
    avec M = 2-k variant relativement de (1) à (1/32) (comme on le devine sur le graphe) si (k) varie de 0 à 5 .

    Il y a un article sur le site Techniques de l'Ingénieur, mais le temps m'a manqué pour l'inscription et la lecture du document:
    http://www.techniques-ingenieur.fr/base-documentaire/sciences-fondamentales-th8/analyse-numerique-des-equations-differentielles-et-aux-derivees-partielles-42620210/approximation-des-equations-aux-derivees-partielles-a550/consistance-precision-ou-ordre-stabilite-d-un-schema-df-a550niv10002.html


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Merci pour ces explications.
    (x) correspond à l'erreur et (y) au pas en espace. Je trace donc en échelle log log le pas en espace en fonction de l'erreur (en fait dans mon code c'est h[k-1]=M). On est d'accord que la pente devrait être égale à 2 en échelle logarithmique et pas 1.... Je ne vois pas du tout où j'aurais fais une erreur.

    Je vais reprendre du début avec d'autres notation en espérant que ça sera plus clair:

    Je considère l'équation de transport Formule mathématique Formule mathématique Formule mathématique si |x|<1 et 0 sinon. On suppose de plus que u(.,t) est Formule mathématique périodique.
    Soit k le pas de temps, n l'indice au temps tn, h le pas en espace et m l'indice au point xm.
    La solution exacte est donnée par: Formule mathématique.
    Voici mon code qui permet de tracer la solution exacte au dernier instant:
    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
    function U0(x)
        while x>pi
            x=x-2*pi
        end
        while x<-pi
            x=x+2*pi
        end
     
        if norm(x)<1
           exp(1/(x^2-1));
        else
            0
        end
    end
     
    function Exact(m,n) 
        h=2*pi/m # pas de mon maillage
        k=8/(n-1)  #pas en temps
        U=zeros(m)
            for j=0:(m-1)
                U[j+1]=U0(-pi+j*h-n*k) #je calcule la solution exacte au dernier instant
            end
        U
    end
    Je construis ensuite le schéma de Lax Wendroff et là pas de problème. Je montre que ce schéma est stable lorsque le rapport Formule mathématique. Lorsque je trace la solution approchée et la solution exacte en vérifiant la condition de stabilité, on voit bien la convergence du schéma. J'ai alors montré que ce schéma est consistant d'ordre 2 en temps et en espace. J'aimerai alors tracer l'erreur de consistance en fonction du pas du maillage c'est à dire h. Cependant, j'obtiens des choses bizarre... Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
        en=rand(7)
        h=rand(7)
    for k=2:8 
            m=2^k   
            n=int64(ceil(12*M/pi+1))  # cela permet d'avoir un rapport k/h égale à 1/3 
            h[k-1]=2*pi/M
            en[k-1]=maximum(abs(Lax(m,n)-Exact(m,n)))
    end
        loglog(h,en)
    Merci pour le lien, je vais y jeter un oeil.

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Pour l'équation différentielle et sa solution, c'est très clair. Le codage est pour moi nettement moins évident ...

    1°) Je lis dans ce qui suit:
    Citation Envoyé par eddy01 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Exact(m,n) 
        h=2*pi/m # pas de mon maillage
    
        m=2^k   
    
        h[k-1]=2*pi/M
    Or Matlab (et le langage apparenté que tu emploies - Julia 0.4.6) ne sont-ils pas sensibles à la casse ? Auquel cas (m) et (M) représentent deux variables distinctes, et ton algorithme devient imprévisible ...
    https://fr.wikibooks.org/wiki/D%C3%A9couvrir_Matlab/Calculs_%C3%A9l%C3%A9mentaires

    Variables ... Matlab est sensible à la casse, c'est-à-dire que les variables « a » et « A » sont deux variables différentes ...

    2°) Je n'ai pas compris la raison du recours à l'entier majorant une fraction irrationnelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       n=int64(ceil(12*M/pi+1))  # cela permet d'avoir un rapport k/h égale à 1/3
    Cela m'a paru très ingénieux, mais inutilement compliqué ... Il y a sans doute une justification, et c'est un détail par rapport à ce qui précède.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    1)
    Oui, excusez moi, j'ai mal recopié, c'est un petit m qu'il faut lire partout et pas de grand M.

    2)
    La fonction Lax utilise une boucle for sur n et donc si n n'est pas un entier, ça me fait une erreur. C'est pour cela que je prends l'entier majorant.

  8. #8
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Pour répondre à ton dernier message,
    1) Pas d'erreur de code facilement rectifiable, donc; il va falloir chercher ailleurs.
    2) J'avais mal lu l'expression, effectivement tout-à-fait banale.

    Je reprends les 2 versions successives du programme que tu as donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        en=rand(6)
        h=rand(6)
    for k=2:7
            M=2^(-k)
            N=M/3
            h[k-1]=2*pi/(2*pi/M+1)
            en[k-1]=maximum(abs(Lax(M,N)-Exact(M,N)))
    end
        loglog(en,h)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        en=rand(7)
        h=rand(7)
    for k=2:8 
            m=2^k   
            n=int64(ceil(12*M/pi+1))  # cela permet d'avoir un rapport k/h égale à 1/3 
            h[k-1]=2*pi/M
            en[k-1]=maximum(abs(Lax(m,n)-Exact(m,n)))
    end
        loglog(h,en)
    Il te revient donc d'exprimer la fonction initiale U0(x) = U(0, x) et la solution exacte U(t, x) = U0(x - t), convertie en Exact(m,n) après discrétisation du temps et de l'espace.

    a) Pourquoi deux appels préalables à la fonction "rand" ? Pour une exploration aléatoire d'un domaine bidimensionnel ?

    b) Que représentent " en " et " en[k-1] " ?

    c) On lit dans les 2 blocs les instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       loglog(en,h)   et   loglog(h,en)
    Est-ce une simple erreur de copie ? Quels sont les termes figurant en abscisse et en ordonnée, par exemple lors de l'appel de la dernière 'loglog(h,en)' ?

    d) Dernier recours pour débusquer une erreur de programmation aussi discrète que ravageuse (cela m'arrive de temps à autre): reprendre le problème dans un cas plus simple, par exemple la fonction de période égale à l'unité définie par
    U0(x) = 1 - 4*x2 sur [-1/2 ; +1/2] ....
    ou si tu tiens à ce qu'elle soit continûment dérivable: U0(x) = (1 - 4*x2)2 (mais là, c'est déjà plus lourd).

    Une recherche sur la Toile, sur la demande "étude de l'équation de transport par le schéma de Lax Wendroff" fournit d'abondants résultats, sous forme de documents téléchargeables; mais sans doute disposes-tu déjà sur le sujet de tout le nécessaire.
    Voici à toutes fins utiles ce que j'ai trouvé:

    http://ufrmeca.univ-lyon1.fr/~buffat...ML/node55.html

    http://wwwdfr.ensta.fr/Cours/docs/MA103/TD2COR-2012.pdf

    http://www-ljk.imag.fr/membres/Guillaume.James/vn.pdf

    http://perso.ensta-paristech.fr/~fli...tNum_print.pdf

    http://iecl.univ-lorraine.fr/~Jean-F...polyM2IMOI.pdf

    https://www.math.univ-toulouse.fr/~j...agProjetCS.pdf

    http://www.cmap.polytechnique.fr/~al...PAEnergie5.pdf


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    a) C'est juste pour initialiser mes vecteurs. J'aurais très bien pu mettre zeros(7) à la place.
    b) "en" représente mon vecteur d'erreur. en[k-1] représente la composante k-1 de mon vecteur.
    c) Attention ! le rôle de m et M sont différents dans les deux codes. En effet m représente le nombre de points de la grille alors que M correspond au pas de mon maillage. Oublions M car maintenant c'est justement h qui joue ce rôle.
    Si je trace loglog(h,en) c'est le pas h qui sera en abscisse et l'erreur en ordonnée. C'est le contraire pour loglog(en,h), il faudra juste faire attention à l'interprétation des courbes.

    Quelque chose m'a troublé et je tiens donc à en faire part: pour un schéma d'ordre 1 en temps et en espace, voici ce que j'obtiens pour loglog(h,en):

    Nom : test1.png
Affichages : 684
Taille : 12,5 Ko


    C'est exactement ce que j'aurais voulu obtenir pour le schéma d'ordre 2 ! !!
    Quelque chose doit m'échapper...

    d) Je vais voir ça.



    J'ai effectivement déjà feuilleté tout les liens que vous m'avez proposé.
    Merci pour le temps que vous prenez.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    d)Quand je trace l'approximation par le schéma de Lax Wendroff pour les fonctions que vous m'avez proposé, ça explose complètement !

    Voici mon code pour le schéma de Lax Wendroff:

    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
    function Lax(m,n)
        h=2*pi/m
        k=8/(n-1)
    #Je construit la matrice B associée au schéma de Lax Wendroff  pour résoudre le système matriciel U<sub>n+1</sub> =BU<sub>n</sub> 
    B=(1-(k/h)^2)*eye(m,m)+diagm((1/2)*(k/h)*(1+(k/h))*ones(m-1),-1)+diagm((1/2)*(k/h)*(-1+(k/h))*ones(m-1),1)   
        B[1,m]=(1/2)*(k/h)*(1+(k/h))
        B[m,1]=(1/2)*(k/h)*(-1+(k/h))
        U=ones(m)
        for i=1:m
            U[i]=U01(-pi+i*h)
        end
    #U correspond à la solution au premier instant
     
        for i=2:n
            U=B*U   #résolution matricielle 
        end
    U     #U correspond maintenant à la solution au dernier instant.
    end

  11. #11
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Au sujet du dernier graphe:
    Nom : Doc [2016-10-29] Im_400x300_02.jpg
Affichages : 693
Taille : 8,4 Ko
    la pente paraît voisine de 1/2 ; un facteur (2) n'aurait-il pas été oublié quelque part ?

    J'ai eu après coup quelques scrupules pour t'avoir proposé de tester la fonction parabolique par morceaux, le plus simple des 2 exemples, mais dont les dérivées ne sont pas continues; mais cela aurait dû fonctionner avec le deuxième. Vérifie tout de même les conditions de dérivabilité.

    Citation Envoyé par eddy01 Voir le message
    Quand je trace l'approximation par le schéma de Lax Wendroff pour les fonctions que vous m'avez proposé, ça explose complètement !
    Tu as sur les bras une suite numérique divergente; il y a donc une erreur mathématique, mais pas de faute de syntaxe ou de débordement de domaine pour les indices, qui bloquerait la compilation.
    Deux possibilités dans ce cas:
    a) Insérer dans l'exécution du programme l'affichage temporaire des grandeurs intermédiaires, notamment les coefficients de la matrice, et comparer dès les premières étapes les valeurs lues à ce que donne un calcul manuel; tu pourrais repérer ainsi l'apparition des valeurs anormales.
    b) Réécrire l'algorithme, si cela est possible, en changeant de notation et en détaillant toute les opérations sur les matrices - cela risque d'être lourd !
    Le recours à la calculatrice (auquel j'avais d'abord pensé) ne me paraît pas opportun dans le cas présent, à moins qu'il ne s'agisse d'un modèle performant.

    Dans le code que tu donnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B=(1-(k/h)^2)*eye(m,m)+diagm((1/2)*(k/h)*(1+(k/h))*ones(m-1),-1)+diagm((1/2)*(k/h)*(-1+(k/h))*ones(m-1),1)
    combien y a-t-il de termes non nuls dans les 2 derniers termes 'diagm(...)' ?
    Je n'ai trouvé que des renseignements hétérogènes et incomplets sur cette fonction (Scilab, Julia).
    Travaille sur une fonction périodique facile à manipuler, comme pas ex. U0(x) = 1 + cos(x) si |x| < Pi/2 sinon U0(x) = 0 .


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre aide, je vais voir ce que je peux faire.

    Pour répondre à votre question, le premier argument de diagm permet de savoir combien de fois on veut qu'un coefficient apparaît et le deuxième argument à quel diagonale on place ce coefficient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diagm((1/2)*(k/h)*(1+(k/h))*ones(m-1),-1)
    Ici le premier argument nous dit que le coefficient est (1/2)*(k/h)*(1+(k/h)) et que je veux qu'il apparaît (m-1) fois .Le deuxième argument nous informe que l'on veut placer le coefficient sur la diagonale inférieure (0----> sur la diagonale, 1-------> diagonale supérieure). Du coup ça fait une matrice de taille m avec des zéros partout sauf sur la diagonale inférieure.

Discussions similaires

  1. Graphique interactif ordre des mois en abscisse
    Par vanhoa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/02/2014, 06h11
  2. [javafx]changer l'ordre des objets graphiques
    Par guitariste dans le forum JavaFX
    Réponses: 3
    Dernier message: 03/04/2009, 16h27
  3. Vérifier que toutes les balises soient bien fermées dans le bon ordre
    Par piotrr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/02/2009, 11h32
  4. Date dans un ordre non chronologique dans un graphique
    Par Homer091 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2008, 14h40
  5. vérifier un ordre numérique
    Par kgb1917 dans le forum Access
    Réponses: 24
    Dernier message: 19/12/2006, 23h58

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