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 :

Problème boucle while


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Problème boucle while
    bonjour
    Je cree actuellemt un programme concernant les transferts de chaleurs. J'ai impose une condition grace a une boucle while mais je ne comprends pas pourquoi cela ne marche-t-il pas?
    En effet MATLAB me donne comme explication que mes vecteurs ne sont pas de meme dimension...pourtt j'y ai prete une attention particuliere.
    Je vous mets mon programme

    Merci d'avance a ceux qui m'aideront:

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    clear
    clc
    %Simple plate simulation: transient 
    %General elements
     
    Tair=323;        % Température of the air
    h=100;           % Convection coefficient with the air
    TCR=1E-4;        % Thermal contact resistance between the 2 matérials
    time=30;         % Study's lenght
    sigma=5.67E-8;   % Stefan Boltzman's constant
     
    %For the aluminium part:
     
    thka=0.1;          % Thickness of aluminium part
    rhoa=2700;       % Aluminium density
    cpa=897;         % Aluminium specific heat
    ka=237;          % Aluminium conductivity
     
     
    %For the thermal insulation part:
    %Choice of Aerogel
     
    thki=0.001;        % Thickness of thermal insulation part
    rhoi=3;          % thermal insulation density
    cpi=838;         % thermal insulation specific heat
    ki=0.012;        % thermal insulation conductivity
     
    %Calculations of diffusivity for the 2 materials
     
    aa=rhoa*cpa/ka;  %Aluminium diffusivity
    ai=rhoi*cpi/ki;  %Thermal insulation diffusivity
     
     
    %Creation of time and space steps
     
    %For time step:
     
    Nt=50;           %Number of time step
    dt=time/Nt;      %Value of one time step
     
    %For space step:
     
    Na=30;           %Number of space step in aluminium part
    Ni=30;           %Number of space step in thermal insulation part
    dya=thka/Na;       %Value of space step in aluminium part
    dyi=thki/Ni;       %Value of space step in thermal insulation part
     
    N=Ni+Na;        %Number of total space step
     
     
     
    %Initialization of matrix A
    for i=1:N
        for j=1:N
            A(i,j)=0;
        end
    end
     
    % Fix elements of matrix A
        A(1,1)=1;     
     
        A(Na,Na-1)=-ka*TCR*dt;
        A(Na,Na)=dya*dt+rhoa*cpa*dya*dya*TCR/2+ka*TCR*dt;
        A(Na,Na+1)=-dya*dt;
     
        A(Na+1,Na)=-dyi*dt;
        A(Na+1,Na+1)=ki*TCR*dt+dyi*dt+rhoi*cpi*dyi*dyi*TCR/2;
        A(Na+1,Na+2)=-ki*TCR*dt;
     
        A(N,N-1)=ki*dt;
        A(N,N)=h*dyi*dt-ki*dt+rhoi*cpi*dyi*dyi/2;  
     
        for i=2:Na-1            % Space element of aluminium part
            A(i,i-1)=-aa*dt;
            A(i,i)=dya*dya+2*aa*dt;
            A(i,i+1)=-aa*dt;     
        end
     
        for i=Na+2:N-1              % Space elements of thermal insulation part
            A(i,i-1)=-ai*dt;
            A(i,i)=dyi*dyi+2*ai*dt;
            A(i,i+1)=-ai*dt;
        end
     
    % Temperature vector initialization: Beginning at 25 K
    for i=1:N
        T(i,1)=293;
    end
     
     for i=1:N-1
         Tg(i,1)=0;      
     end
        Tg(N,1)=300;
     
    for k=1:time+1 
       G=Tg(N,k)-T(N,k);
      while (abs(G)<=1)      LE PROBLEME EST ICI
     
     
        % Creation Vector B(k) at time k
              B(1)=T(1,k); 
            for i=2:Na-1
              B(i)=T(i,k)*dya*dya;
            end
              B(Na)=rhoa*cpa*dya*dya*TCR*T(Na,k)/2;    
              B(Na+1)=rhoi*cpi*dyi*dyi*TCR*T(Na+1,k)/2;
            for i=Na+2:N-1
              B(i)=T(i,k)*dyi*dyi;
            end
              B(N)=h*Tair*dyi*dt++rhoi*cpi*dyi*dyi*T(N,k)/2+sigma*Tair*Tair*Tair*Tair*dyi*dt-sigma*dt*dyi*T(N,k)*T(N,k)*T(N,k)*T(N,k);    
     
        %Creation of Vector T(k+1)at time k+1
        T(:,k+1)=A\B';
     
        %Control of value of Tsurface
     
       end
    end
    sprintf('value of temperature of surface is right')
    %View of 3D result
    surf(T)
    zlabel('Temperature T (K)');
    ylabel('Thickness');
    xlabel('Time (s)');
    title('Evolution of temperature in function of space and time');

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    L'erreur que je reçois à l'exécution de ton code est la suivante :

    ??? Attempted to access Tg(60,2); index out of bounds because size(Tg)=[60,1].
    
    Error in ==> untitled at 96
       G=Tg(N,k)-T(N,k);
    => : Attempted to access variable(n); index out of bounds because numel(variable)=(n-1).

    Le bloc de suivant me semble incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % Temperature vector initialization: Beginning at 25 K
    for i=1:N
        T(i,1)=293;
    end
     
     for i=1:N-1
         Tg(i,1)=0;      
     end
    Tu mets les valeurs de Tg à 293 puis juste après à 0, c'est bizarrre.

    Sinon le bloc suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:N
        for j=1:N
            A(i,j)=0;
        end
    end
    s'écrit tout simplement :

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:N
        T(i,1)=293;
    end
    s'écrit plus simplement :
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour
    En fait je commence par faire la supposition d'une temperature et j'itere juqu'a atteindre cette fameuse temperature ou en tt cas une valeur proche.
    Donc c'est normal pour Tg puisque je considere uniquement une temperature de surface.( Ca va devenir de la thermique donc pas tres interessant pour vous)
    Pour faire court:
    -Je suppose une temperature de paroi Tg
    -Je calcule ensuite ma temperature reelle T
    -J'itere jusqu'a tant que la difference entre les 2 temperature de paroi soit minime

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Dut Voir le message
    Le bloc de suivant me semble incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % Temperature vector initialization: Beginning at 25 K
    for i=1:N
        T(i,1)=293;
    end
     
     for i=1:N-1
         Tg(i,1)=0;      
     end
    Tu mets les valeurs de Tg à 293 puis juste après à 0, c'est bizarrre.
    Non, c'est T et Tg, donc pas de problème, mais tu peux en effet faire plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T(1:N,1) = 293;
    Tg(1:N-1) = 0;
    Mais je repère des erreurs:
    Si tu rentres dans ta boucle while (abs(G)<=1), tu n'en sortiras pas, ce sera une boucle infinie car tu ne modifies pas la valeur G dedans, et donc la condition sera toujours vraie.
    Autre erreur: tes variables T et Tg sont au début des tableaux d'une colonne, mais au fur et à mesure, je comprends par G=Tg(N,k)-T(N,k); que tu vas leur ajouter des colonnes. Chose que tu fais seulement pour T: T(:,k+1)=A\B'; si on rentre dans le while. Mais que tu ne fais pas pour Tg ainsi qu'en dehors du while (pour T et Tg), ce qui entraine ton erreur car Tg reste de taille size(Tg) = [N 1] et non [N 2] comme le demande ta seconde itération de ta boucle for.
    Dernière modification par Invité ; 23/05/2012 à 16h58.

Discussions similaires

  1. Problème boucle while
    Par Peedro dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2008, 14h09
  2. Problème boucle while
    Par chuko dans le forum C
    Réponses: 7
    Dernier message: 04/07/2008, 16h12
  3. Problème boucle while
    Par fred33 dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2008, 19h16
  4. [MySQL] Problème boucle WHILE
    Par Adlack dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2007, 19h30
  5. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 18h11

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