Problème d'indice - equation de la chaleur - scilab - différences finies
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

Problème d'indice - equation de la chaleur - scilab - différences finies



  1. #1
    maelsensei

    Problème d'indice - equation de la chaleur - scilab - différences finies


    ------

    Bonjour, je fais actuellement un petit programme de résolution de la chaleur sous scilab par la méthode des différences finies.
    J'ai pas mal debuggé mon code jusqu'à maintenant, mais il me donne en erreur que mes tailles de matrice sont mauvaises, j'en suppose que je suis bloqué pour une question d'indice puisque normalement mes matrices sont à la bonne tailles. je ne sais pas si je me suis trompé dans la structure de l'algorithme (Gérer les boucles) mais je pense que ça peut être ça.

    Je n'ai pas vraiment de connaissance en programmation, ça doit être un des premiers que je fais et encore moins en méthode des différences finies, donc j'ai peut être manqué quelque chose de simple. Je commence à m'arracher les cheveux pour cet indice (for m=1 à la ligne 36) et surement les suivants...

    Si vous pouviez m'aider ça serait super cool
    Merci beaucoup.

    Code:
    function [eqchal]=simulachaleur(Cp1, Rho1, K1, h, Cp2, Rho2, K2, Tcons, Tini, V, Nbtube, etube, eair, temps, dt, dx)
    funcprot(0)
    //création matrice vide
    T=[];
    //nombre d'itération
    boucle=ceil(temps/dt);
    //nombre noeud total
    noeud=ceil((etube+eair)/dx);
    //nombre de noeud avant la limite
    limite=ceil(etube/dx);
    disp(boucle)
    //Condition initial
    for m=1:noeud
    T(1,m)=Tini;
    end
    
    //Tracer les graphes/preparation
    show_window(); clf()
    f=gcf();
    f.color_map=jetcolormap(256);
    drawlater();
    colorbar(Tini,Tcons);
    
    // recopie la matrice vide avec condition initial
    T_new=T; 
    
    //Facteur de stabilité
    alpha=K1/(Rho1*Cp1)
    lambda=dt/(dx*dx)
    if lambda<(1/(2*alpha)) then disp("Méthode instable, rentrer un autre dx et dt")
        break
    end
    //Méthode des différences finis
    for n=1:boucle
        //Condition à gauche
        for m=1
            T_new(n+1,m)=(T(n,2)/dt)+((Tcons*(h/K1))/(h/K1+1/dt))
        end
        //Conduction dans la matière jusqu'à H2
    	for m=2:limite
            T_new(n+1,m)=T(n,m)+K1*dt*(T(n,m+1)+T(n,m-1)-2*T(n,m))/(dt*dt*Rho1*Cp1)
        end
        //Conservation du flux
    	for m=limite+1
    		T_new(n+1,m)=((-K1/dx)*T(n,m-1)+(K2/dx)*T(n,m+1))
        end
        //Conduction dans l'H2
    	for m=limite+1:noeud-1
    	T_new(n+1,m)=T(n,m)+K2*dt*(T(n,m+1)+T(n,m-1)-2*T(n,m))/(dt*dt*Rho2*Cp2)
        end
        //Flux nul
    	for m=noeud
    	T_new(n+1,m)=T(n,m-1)
    	end
    
    //création des axes
    x=1:noeud;
    y=1:boucle;
    z=T_new();
    disp(z)
    //Trace le graphique
    Sgrayplot(x,y,z,strf="042",zminmax=[Tini,Tcons])
    xtitle("simulation de la chaleur")
    drawnow();
    end
    endfunction

    -----
    Fichiers attachés Fichiers attachés
    Dernière modification par Antoane ; 29/07/2016 à 10h56. Motif: Integration du code au corps du message -- c'est plus lisible

Discussions similaires

  1. un problème sur méthode de différences finies
    Par collo dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 18/10/2015, 19h42
  2. Réponses: 3
    Dernier message: 04/05/2015, 13h28
  3. Réponses: 0
    Dernier message: 14/10/2011, 10h27
  4. Réponses: 8
    Dernier message: 20/08/2007, 21h39
  5. Transformée en Z et équation aux différences finies
    Par invite5e5ea0fa dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 10/01/2007, 12h27