Posez votre question Signaler

Résolution de l'equation de chaleur [Résolu]

mirinda - Dernière réponse le 19 déc. 2012 à 11:39
Bonjour,je suis un nouveau membre ,j'espère que vous m'accepterez parmi vous .j'ai un projet en analyse numérique qui porte sur la résolution de l'equation de chaleur et sa programmation en scilab en utilisant la méthode de différence finie pour l'eqution en dimension 1 puis 2 ,mais malheureusement je n'ai pas compris cette méthode, c'est pour cela que je demande votre aide pour résoudre cette equation en traitant tous les cas particuliers et générals ,j'attend vos réponce ,merci d'avance.
Lire la suite 
Réponse
+0
moins plus
Salut
J'ai regardé ton code, il y a une erreur pour ta matrice B, il faut que tu lui ajoutes la matrice identité.
Après il faut que t'adaptes la taille des matrices et le vecteur u que tu cherches en fonction des ddl.

*Pour une condition de type périodique, il y a 2*nx degrés de liberté, ton vecteur u est donc de taille 2*nx, la valeur à l'une des extrémités est fixée par la valeur à l'autre extrémité. Tes matrices A et B sont de taille 2*nx x 2*nx.

*Pour une condition de type Dirichlet ou de type Neumann, il y a 2*nx-1 degrés de liberté, ton vecteur u est donc de taille 2*nx-1, les valeurs aux extrémités sont fixées par la condition considérée. Tes matrices A et B sont de taille 2*nx-1 x 2*nx-1.

Relis le message 19, c'est dans le même genre en fait.
A plus
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
salut Sacabouffe
je n'ai pas bien compris, j'ai du mal avec la taile des matrices, taille de vecteur u... Est ce que tu peux m'expliquer ça avec des lignes d'instructions? j'ai ajouté la matrice identité mais le programme n'a pas changé, je reçoit toujours l'erreur suivant :
error u=W*u inconsistent multiplication.

D=inv(A);
W=D*B;
u=W*u;
plotframe([-lg,-0.8,lg,1.6],tics);
plot2d(x,u,[1,1],"100","schema implicite 8")
plot2d(x,u0,[2,2],"100","donnee initiale ")
xtitle('schema implicite 8, cfl=2.',' ',' ');
end
autre question comment je peux vérifier que le schéma obtenue est correct dans ce cas du schéma de Crank-Nicolson?
merci d'avance .
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
Salut
Il restait une erreur dans la matrice A en fait, j'avais pas vu...
inconsitent multiplication : c'est normal, il faut que u soit un vecteur colonne pour le multiplier par W.

Condition de Dirichlet:
u=u0.';
mat = 2*dt/(dx*dx)*eye(2*nx-1,2*nx-1)...
    - dt/(dx*dx)*diag(ones(2nx-2,1),1) ...
    - dt/(dx*dx)*diag(ones(2*nx-2,1),-1);
mat = inv(eye(2*nx-1,2*nx-1)+theta*mat)*(eye(2*nx-1,2*nx-1)-(1-theta)*mat);
for n=1:nt
u(2:2*nx) = mat*u(2:2*nx);
u(1)=0;
u(2*nx+1)=0;
etc, etc, etc...
end


Condition de périodicité:
u=u0.';
mat = 2*dt/(dx*dx)*eye(2*nx,2*nx)...
    - dt/(dx*dx)*diag(ones(2nx-1,1),1) ...
    - dt/(dx*dx)*diag(ones(2*nx-1,1),-1);
mat(1,2*nx) = - dt/(dx*dx);
mat(2*nx,1) = - dt/(dx*dx);
mat = inv(eye(2*nx,2*nx)+theta*mat)*(eye(2*nx,2*nx)-(1-theta)*mat);
for n=1:nt
u(1:2*nx) = mat*u(1:2*nx);
u(2*nx+1)=u(1);
etc,etc,etc...
end


Qu'est-ce que tu veux dire par vérifier qu'il est correct? Tu peux commencer par vérifier que les résultats obtenus concordent avec ceux des autres schémas.
A plus
Ajouter un commentaire
Réponse
+0
moins plus
salut Sacabouffe
merci beaucoup ,je n'ai pas encore testé ça car je suis occupé par les examens mais comme meme j'ai compris .je veux savoir est ce que c'est obligatoire de traiter les conditions de périodicité car mon problème est donnée seulement avec des conditions de Dirichlet. merci
Ajouter un commentaire
Réponse
+0
moins plus
salut Sacabouffe
merci beaucoup pour ton aide, j'ai testé ca et ça bien marché.Ce que je veux savoir maintenant c'est comment exprimer la solution exacte pour pouvoir la comparer avec la solution numérique,ce que je sais c'est la solution fondamentale qui est :
p(x,t)=exp(-x**2/(4*a*t))/sqrt(4*%pi*a*t);
et la solution générale qui est donnée par :

u(x,t)=1/racine(4*pi*a*t) * integrale(u0(y)*exp(-(x-y)²/4*a*t)dy (l'integrale sur R)
d'une part, je ne sais pas comment approcher l'integrale par une somme d'une autre part je ne sais pas comment faire la comparaison puisque j'ai deux solutions l'une est fondamentale, l'autre est générale .
je veux aussi savoir comment utiliser la factorisation lu en scilab pour résoudre le système obtenu. merci
l
Ajouter un commentaire
Réponse
+0
moins plus
Salut

Je savais pas que tu devais faire juste le cas de la condition de Dirichlet. Dans ce cas traite juste cette condition...
La solution fondamentale, tu l'utilises quand tu travailles sur R. Là utilises un développement en série de Fourier, je t'ai déjà donné le lien, c'est ce paragraphe sous Wikipédia:
http://fr.wikipedia.org/...

Pour la factorisation LU, si tu veux l'utiliser pour calculer ta solution numérique, t'as juste à utiliser deux fois un algorithme de substitution. Si ça peut t'aider:
http://www.dms.umontreal.ca/~math1600/6Supplement/fatorisationLU.pdf

A plus
Ajouter un commentaire
Réponse
+0
moins plus
salut Sacabouffe
j'ai utilisé une somme sous forme :
uexacte=zeros(1,2*nx+1);
for i=1:2*nx
for j=1:2*nx
uexacte(i)=u0(j)*dx*k((i-j)*dx,nt*dt);
end
end
plot2d(x,uexacte,.....);

avec k(x,t)=exp(-x**2/(4*t))/sqrt(4*%pi*t)
mais ca na pas marché, je ne sais pas pourquoi.
pour la factorisation lu je sais c'est quoi , ce que je veux c'est comment l'appeler par scilab
j'ai un schéma sous forme
Un+1=Un-1 +A Un
qui est un schéma à trois niveaux(n+1,n-1,n), je ne sais pas comment le programmer puisque j'ai c'est trois niveaux.
j'attend ta réponse, merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Salut

Tu ne travailles pas sur R, tu travailles en domaine borné.
La solution exacte se calcule à l'aide d'une série de Fourier:
http://fr.wikipedia.org/...

Pour calculer la décomposition LU de ta matrice mat, la commande c'est tout simplement:
[L,U]= lu(mat)
A plus
Ajouter un commentaire
Réponse
+0
moins plus
salut Sacabouffe
merci beaucoup, je n'avais pas fais attention au message 38.
en utilisant le développement en série de fourier , j'obtient u(x,t)=somme sur k (ak*exp(-k²*pi²*c*t)*sin(k*pi*x)

avec ak=2*integrale(u0(x)*sin(k*pi*x)dx sur un intervalle]0,1[*[0,T], ceca n'est ce pas ?
je veux savoir comment programmer ca puisque j'ai un integrale et une somme de k=0 jusqu'à infini.est ce que tu peux m'expliquer juste la démarche à suivre?

comment on peut programmer un schéma à trois niveaux comme celui là (schéma de Richardson) càd ou il y a n, n+1, n-1
Un+1=Un-1 +A Un
merci
Ajouter un commentaire
Réponse
+0
moins plus
Salut

J'y comprends plus rien, les données de ton problème changent au fur et à mesure, les noms de tes constantes aussi...

D'après tes messages précédents, la longueur de ton domaine c'est [-lg,lg] (donc de longueur 2*lg) et ta diffusivité thermique c'est a.

La température initiale que t'as écrite dans tes premiers messages est symétrique par rapport à l'origine donc:
u(x,t)=∑ ak*cos((k*pi*x)/lg)*exp(-a*k²*pi²*t/(2*lg)^2) (somme de 0 à +∞).
L'expression de tes ak est donnée par:
a0=1/(2*lg)*∫u0(x)dx (intégrale prise sur [-lg,lg])
ak=1/lg*∫u0(x)*cos((k*pi*x)/lg)dx pour k≥1 (intégrale prise sur [-lg,lg])

Pour ta somme infinie, tu t'arrêtes à un moment donné.
L'intégrale, tu la calcules en faisant une somme de Riemann.
Si pour ta somme infinie tu t'arrêtes à 100, le calcul des ak donne un truc du genre:
matu0=mtlb_repmat(u0.',1,101);
matx=mtlb_repmat(x.',1,101);
matk=mtlb_repmat((0:100),2*nx+1,1);
matkx=matk.*matx;
matcos=cos((%pi*matkx)/lg);
ak=sum(1/nx*matu0.*matcos,1);
ak(1)=ak(1)/2;
A plus
Ajouter un commentaire
Réponse
+0
moins plus
Concernant, le schéma de Richardson: totalement inutile, il est inconditionnellement instable.
Si tu veux un schéma à trois pas de temps, prends plutôt le schéma de Dufort-Frankel, il est inconditionnellement stable mais conditionnellement consistant (dt/dx → 0)
Comme c'est un schéma à trois pas de temps, il te faut un schéma de démarrage, c'est tout...
Ajouter un commentaire
Réponse
+0
moins plus
salut , merci
oui tu as raison à chaque fois je change des paramètres et des noms mais c'est à cause des données chaque fois il me donne des données différents maintenant il me demande de travailler sur un domaine de [0,1] avec une condition initiale sin(pi*x) ou x=j*dx...je doit tester des valeurs pour obtenir les cas stable et instable ...
pour le schéma de Richardson je ne vais pas le faire , j'ai déjà beaucoup de travail
c'est pour cela je t'ai demandé la solution analytique sur [0,1]
Ajouter un commentaire
Réponse
+0
moins plus
Quoi???
C'est ça ta température initiale???
Mais fallait le dire plus tôt !!!
Dans ce cas ta solution exacte c'est:
u(x,t)=sin(pi*x)*exp(-a*pi²*t)
C'est tout... Pas besoin de chercher midi à quatorze heures !!! :-DDD
Ajouter un commentaire
Réponse
+0
moins plus
salut
merci beaucoup
désolé, il me fallait te dire ça plus tot mais tu sais quelque fois on oublie des choses très important qu'on on est pressé par le temps.je sais que tu as fais un grand effort avec moi ,je n'ai qu'à te remercier mille fois 1000*1000*...
ne t'inquiète pas je vais traité les deux cas.
Ajouter un commentaire
Réponse
+0
moins plus
Salut
De rien mirinda, bonne chance pour la suite.
Ciao
Ajouter un commentaire
Réponse
+0
moins plus
Salut
j'ai écrit mon rapport à l'aide de Scientific Word , je veux maintenant créer des diapositives, est ce qu' il ya un logiciel qui permet de créer facilement ces derniers.
merci
Ajouter un commentaire
Réponse
+0
moins plus
Salut
Fais plutôt un nouveau post pour ça, c'est un problème différent. Je sais pas trop où tu devras mettre ton post. À mon avis ça peut aller dans Logiciels/Pilotes, Bureautique ou Programmation peut-être...
Si t'utilisais LaTeX directement, je t'aurais dit Beamer mais là...
Il me semble qu'il y a la possibilité d'utiliser la classe Beamer avec Scientific Word mais j'en suis pas sûr et j'ai aucune idée de comment ça marche, désolé...
A plus
Ajouter un commentaire
Réponse
+0
moins plus
Salut
Je comprends pas... Tracer des courbes 2D en 3D?
Si c'est des courbes 2D je vois pas comment tu veux les tracer en 3D... Tu veux que la troisième dimension des courbes soit relative au temps?
Explique mieux ce que tu veux faire.
A plus
Ajouter un commentaire
Réponse
+0
moins plus
la reponse:
ecrire le developpement limité de f(x) jusqu'à l'ordre 4 en x=xindice i et remplacer x par xindice(i+1) dans la premiere fois et 2 xpar xindice(i-1) et faire f(xindice(i+1))+f(xindice(i-1))=-2f(xindice i)+ un erreur d'ordre 4 bonne chance à tout le monde pour plus d'info:elotmany licmath@gmail.com
Ajouter un commentaire
Réponse
+0
moins plus
bonjour, en cherchant une solution pour mon problème, j'étais tellement chanceux en tombant par hasard sur ce site et lisant cette discussion fructueuse que vous êtes en train de mener (Mirinda et Sacabouffe) félicitations ^^
ma question et la suivante:
je cherche à résoudre l'équation de la diffusion en dimension 1:
Ut - uxx =0 pour (x,t) dans ]0,1[*R+*
U(x,0)= 2x pour 0=<x=<1/2
U(x,0)= 2(1-x) pour 1/2=<x=<1
U(0,t)=u(1,t)=0 pour t dans R+* condition de Dirichlet

( mais ce qui m'a stoppé c'est que notre cher professeur nous a imposé de résoudre le système linéaire obtenu en utilisant le schéma de Crank- Nicolson par la méthode de résolution du système tridiagonale communément connue sous le nom : méthode de thomas (algorithme)
j ai obtenu l'écriture matricielle suivante:
A* Un+1=B*Un
si j inverse la matrice A j obtenirai une matrice non tridiagonale ce qui m empêchera d'utiliser la méthode de thomas :)
veuillez m'aider SVP
merci d'avance
Ajouter un commentaire
Ce document intitulé «  résolution de l'equation de chaleur  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.