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 :

Comprendre un programme Matlab?


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Par défaut Comprendre un programme Matlab?
    Bonjour,

    J'aimerai s'il vous plaît que quelqu'un puisse m'aider à comprendre ce programme c'est assez urgent, je comprends les premiéres lignes mais dés qu'il y a des boucles je suis perdu. Merci de votre attention

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    %----------------------------------------------------------------------------
    %  Script de calcul par differences finies 2D, stationnaire.
    %  E. Lefrancois, 12/2008
    %
    %  Resolution de l'equation de la chaleur :
    %
    %                      kd (T,xx + T,yy) + f0 = 0
    %
    %  sur un domaine rectangulaire de longueur L (selon x) et hauteur H (selon y)
    %
    %  Conditions aux limites :
    %                      T(x,0)= 10 C
    %               T(O,y)=T(L,y)=T(x,H)=100
    %
    %  Maillage :     i=1,nx selon x et j=1,ny selon y
    %
    %  Variables classees avec sens de lecture horizontal : T(1,1); T(2,1)...
    %
    %
    %  Forme discrete : ligne (i,j) indice : (j-1)nx+i
    %
    %    A1*T(i,j-1)+A2*T(i-1,j)+A3*T(i,j)+A4*T(i+1,j)+A5*T(i,j+1)+f(i,j)=0 
    %
    %  avec : A1=kd/dy^2, A2=kd/dx^2, A3=-2(kd/dy^2+kd/dy^2), A4=kd/dx^2, A5=kd/dy^2
    %
    %                                   "5"
    %  Les indices associes sont :                    (i,j+1)
    %    (i,j-1) =>     N1 = i+(j-2)*nx                  |
    %    (i-1,j) =>     N2 = i-1+(j-1)*nx              |
    %    (i, j)  =>     N3 = i+(j-1)*nx        (i-1,j)-----(i,j)-----(i+1,j)
    %    (i+1,j) =>     N4 = i+1+(j-1)*nx      "2"         |"3"      "4"
    %    (i,j+1) =>     N5 = i+j*nx                  |
    %                               (i,j-1) 
    %                                 "1"
    %----------------------------------------------------------------------------
    clear all               % nettoyage de la memoire
    close all               % fermeture des fenetres graphiques
     
    %----- parametres physiques
    L = 10;                % longueur du domaine m
    H = 10;                % hauteur du domaine m
    kd=2;             % coeff de conductivite w/°c-m
    f0=30;                   % production     w/m3
     
    %----- parametres numeriques
    nx=25; %input('Entrer le nombre de noeuds : ');
    ny=25; %input('Entrer le nombre de noeuds : ');
    dx = L / (nx - 1);  dy = H / (ny - 1);   % pas de discretisation
    nnt=nx*ny;  % nombre de noeuds total
    k=zeros(nnt,nnt);       % initialisation de la matrice
    f=zeros(nnt,1);         % initialisation du second membre
    %
    %----- Generation du maillage
    for j=1:ny
        for i=1:nx
            X(i,j)=(i-1)*dx;
            Y(i,j)=(j-1)*dy;
        end
    end
    %
    %----- Coefficients de la matrice
    Ax=kd./dx^2; Ay=kd/dy^2; fij=-f0;
    %
    for j=2:ny-1
        for i=2:nx-1
    %        Calcul de l'indice du noeud (i,j)
            N1 = i+(j-2)*nx;
            N2 = i-1+(j-1)*nx;
            N3 = i+(j-1)*nx;    % Noeud (i,j) !!
            N4 = i+1+(j-1)*nx;
            N5 = i+j*nx;
    %
    %        On remplit la ligne "N3" du systeme
            k(N3,[N1 N2 N3 N4 N5])=[Ay Ax -2*(Ax+Ay) Ax Ay];
            f(N3)=fij;
        end        
    end
     
    %----- conditions aux limites de Dirichlet
    % T=10 en (x,O)
    liste=1:nx;
    for m=1:nx
        k(liste(m),liste(m))=1; f(liste)=10;
    end
    % T=100 en (x,H)
    liste=(ny-1)*nx+[1:nx];
    for m=1:nx
        k(liste(m),liste(m))=1; f(liste)=100;
    end
    % T=100 en (0,y)
    liste=[1:nx:nnt];
    for m=1:ny
        k(liste(m),liste(m))=1; f(liste)=100;
    end
    % T=100 en (L,y)
    liste=[nx:nx:nnt];
    for m=1:ny
        k(liste(m),liste(m))=1; f(liste)=100;
    end
     
    %----- resolution
    T = k\f;                 % calcul et affichage de la solution 
     
    %----- affichage
    m=0;
    for j=1:ny
        for i=1:nx
           m=m+1;
           matT(i,j)=T(m);
        end
    end
     
    surf(X,Y,matT)
    xlabel('X (m)')
    ylabel('Y (m)')
    zlabel('Temperature (C)')

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Ce code est pourtant déjà bien commenté.
    Peux-tu préciser un peu plus ce que tu ne comprends pas ?
    Quelle boucle en particulier ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Ce code est pourtant déjà bien commenté.
    Peux-tu préciser un peu plus ce que tu ne comprends pas ?
    Quelle boucle en particulier ?

    En fait je travaille la dessus mais ce n'est pas du tout mon domaine donc je ne comprends pas la partie "des indices associés " comment on arrive à ces relations il y a aussi le fonctionnement des boucles tout cela est confu pour moi? si vous connaissez un peu ce langage vous me serez d'une grande utilité je travaille la dessus depuis une semaine et je ne comprends toujours pas

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    La partie des "indices associés" qui est dans le commentaire est plus du domaine de l'agorithmique pour moi.
    C'est la définition donnée pour pouvoir résoudre l'équation donnée au-dessus.
    Ce n'est pas mon domaine, ce n'est pas vraiment du MATLAB, c'est une définition.

    Ensuite le code MATLAB met effectivement en forme ce qui est mis dans le commentaire.

    Pour les boucles le plus simple serait surement de lancer le code en mode DEBUG en pas-à-pas pour comprendre ce qu'il fait.

    Je vais essayer d'en expliquer une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %----- Generation du maillage
    for j=1:ny
        for i=1:nx
            X(i,j)=(i-1)*dx;
            Y(i,j)=(j-1)*dy;
        end
    end
    Là il fait une double boucle sur les lignes et les colonnes :
    Pour chaque ligne i,
    Pour chaque colonne j
    il affecte (i-1)*dx dans X(ligne i, colonne j)
    il affecte (j-1)*dy dans Y(ligne i, colonne j)


    Ce qui d'ailleurs pourrait être simplifié puisque :
    Chaque élément de la ligne i de X est (i-1)*dx (tous les éléments d'une même ligne sont égaux)
    Chaque élément de la colonne j de Y est (j-1)*dy (tous les éléments d'une même colonne sont égaux)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    La partie des "indices associés" qui est dans le commentaire est plus du domaine de l'agorithmique pour moi.
    C'est la définition donnée pour pouvoir résoudre l'équation donnée au-dessus.
    Ce n'est pas mon domaine, ce n'est pas vraiment du MATLAB, c'est une définition.

    Ensuite le code MATLAB met effectivement en forme ce qui est mis dans le commentaire.

    Pour les boucles le plus simple serait surement de lancer le code en mode DEBUG en pas-à-pas pour comprendre ce qu'il fait.

    Je vais essayer d'en expliquer une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %----- Generation du maillage
    for j=1:ny
        for i=1:nx
            X(i,j)=(i-1)*dx;
            Y(i,j)=(j-1)*dy;
        end
    end
    Là il fait une double boucle sur les lignes et les colonnes :
    Pour chaque ligne i,
    Pour chaque colonne j
    il affecte (i-1)*dx dans X(ligne i, colonne j)
    il affecte (j-1)*dy dans Y(ligne i, colonne j)


    Ce qui d'ailleurs pourrait être simplifié puisque :
    Chaque élément de la ligne i de X est (i-1)*dx (tous les éléments d'une même ligne sont égaux)
    Chaque élément de la colonne j de Y est (j-1)*dy (tous les éléments d'une même colonne sont égaux)
    Merci pour cette explication mais je n'ai vraiment pas compris

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Citation Envoyé par nejm59 Voir le message
    Merci pour cette explication mais je n'ai vraiment pas compris
    Ca va être dur de t'aider plus

    Déjà pourquoi utiliser un programme que tu ne comprends pas ?
    D'où vient-il et quel est ton objectif ?

Discussions similaires

  1. Comprendre un programme multi-langues (Python, C++, matlab)
    Par AnthoB dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/02/2013, 08h35
  2. Réponses: 1
    Dernier message: 25/08/2007, 23h14
  3. Aide programme Matlab
    Par thouraya_ad dans le forum MATLAB
    Réponses: 6
    Dernier message: 06/03/2007, 18h59
  4. Exécuter un programme MATLAB sur un pc sans MATLAB
    Par zuly12 dans le forum MATLAB
    Réponses: 4
    Dernier message: 10/01/2007, 15h44
  5. Réponses: 1
    Dernier message: 18/05/2006, 12h52

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