Salut
J'ai un peu de mal à comprendre, un coup ta longueur c'est l, ton programme est fait pour x Є [-l/2,l/2], et un coup c'est 1.
Pour le cas périodique, il y a quand même un petit truc à corriger pour le cas explicite et le cas implicite, j'avais pas fait gaffe...
Il faut prendre qu'un seule des extrémités comme ddl, vu que les températures sont toujours égales.
Du coup, pour les deux schémas, j'écrirais plutôt ça:
x=zeros(1,2*nx) ;
u0=zeros(1,2*nx) ;
for i=1:2*nx
x(i) = (i-nx-1)*dx ;
u0(i) = max(0.,1.-x(i)**2) ;
end
u=u0 ;
up=u0 ;
um=u0 ;
uexacte=u0 ;
Et pour le schéma implicite, ta matrice est la même sauf qu'elle est de taille
2*nx x 2*nx et que comme je te l'avais fait remarquer, faut pas oublier les valeurs non nulles de
M(2*nx,1) et
M(1,2*nx).
Et après, tout pareil. Sauf qu'à la fin, si tu veux aussi ta température à l'extrémité droite (qui est la même qu'à l'extrémité gauche), tu complètes le vecteur
u en un vecteur
uper tel que
uper(1:2*nx)=u(1:2*nx) et
uper(2*nx+1)=u(1).
Pour le problème de Dircihlet, c'est presque pareil. Cette fois, les deux extrémités ne sont pas des ddl. Tu travailles donc avec un vecteur de taille
2nx -1 pour la température et t'appliques tes schémas. Pour le schéma implicite, la matrice est quasiment la même, c'est en fait celle que t'avais écrite au départ, elle est de taille
2*nx-1 x 2*nx-1 et cette fois donc, les valeurs
M(2*nx-1,1) et
M(1,2*nx-1) sont bien nulles.
Pour le problème de Neumann, de nouveau, il y a pas grand chose qui change. Les deux extrémités ne sont pas des ddl. Vu que la dérivée est nulle, la température aux extrémités peut être approchée par la température de la barre au premier pas d'espace pour l'extrémité gauche et au dernier pas d'espace pour l'extrémité droite.
Du coup, pour le schéma implicite, seules les valeurs
M(1,1) et
M(2*nx-1,2*nx-1) changeront.
A plus
Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!