Scilab equation de la chaleur

Fermé
evasion87 Messages postés 17 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 10 juin 2010 - 10 juin 2009 à 00:31
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 10 juin 2009 à 08:21
Bonjour;
j'essai de programmer l'équation de la chaleur (schéma explicite) dans scilab et ça bloque sur une ligne et je trouve pas quoi faire!! j'ai beau essayé de résoudre le problème j'y arrive pas!
voila la programme si quelqu'un s'y connait un petit peu en scilab, l'erreur se trouve sur la ligne 43 en gras ci dessous (multiplication incohérentes)


M=input("Donner le nombre de discrétisation de x");
N=input("Donner le nbre de déscritisation de t ");
alpha =input ("Donnez la diffusité thermique (alpha>0) :");
k =1/N;
h =1/M;
a =(alpha*k)/(h^2);
//test sur la stablité du shéma
while (a>0.5) then
disp("shcéma instable")
M=input("donner le nombre de points de discrétisation de x");
N=input("donner le nombre de points de discrétisation de t ");
alpha =input ("donnez la diffusité thermique (alpha>0) :");
k =1/N;
h =1/M;
a =(alpha*k)/(h^2);
end
//création de la matrice B
B =zeros(M-1,M-1);
x =zeros(M,1);
for i=1:M-1
B(i+1,i)=a;
B(i,i+1)=a;
B(i,i)=1-2*a;
end
B(M-1,M-1)=1-2*a;
for i=1 : M+1
x(i) =(i-1)*h;
end
//condition initiale sur x
for i=1:M
T(i,1)=sin((%pi)*x(i));
end
T(M+1,1)=0;
//Conditions aux limites sur t
for i=1:N+1
T(1,i)=0;
T(M+1,i)=0;
end
//Calcul de la température à chaque instant et en tous les points
for j=2:N+1
T(2:M,j)=B*T(2:M,j-1);
end
for i=2:N
plot2d(x,T(:,i),i);
end

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
10 juin 2009 à 08:21
for i=1:M-1
B(i+1,i)=a; => B(M,M-1)=a;
B(i,i+1)=a;
B(i,i)=1-2*a;
end

ce bloc fabrique une matrice B de taille M×(M-1) ce qui peut poser problème lors de l'opération T(2:M,j)=B*T(2:M,j-1);
C'est quoi exactement le problème ? fait juste avant l'opération size(B) size(T(2:M,j-1)) pour vérifier les tailles.
1