Problème diffusion matlab

Fermé
Thom1902 - 2 juil. 2009 à 18:50
 Thom1902 - 23 juil. 2009 à 14:23
Bonjour,
Je souhaiterais l'équation de diffusion de particules générale en une dimension et en fonction du temps. Physiquement, à l'instant t=0, l'échantillon est sous une concentration C0 à gauche, à alpha*C0 dans l'échantillon et 0 à droite.
Voila le programme que j'ai écrit :

clear all

%Entrée valeurs opérateurs%
C0=input('Concentration solution amont (en Bq/m^3) = ');
L0=input('Epaisseur échantillon (en mm) = ');
S=input('Surface (en m²) = ');
Eps=input('Taux de porosité accessible = ');
De=input('Coefficient de diffusion effectif (en m²/s) = ');
T=input('Horizon temporel (en jours)= ');
Al=input('Valeur de alpha = ');

%Definition des constantes%
L=L0/1000;
N=100;
h=L/N;
x=(0:h:L)';

n=100*T; To=T/n;
t=(0:To:T)';

K=(De*To)/(Eps*h*h);

%Conditions initiale et aux limites et Matrice%
C(1,1)=C0; C(2:N,1)=Al*C0; C(N+1,1)=0;

A=zeros(N+1,N+1); A(1,1)=1; A(2,1)=K; A(N+1,N+1)=1;
A(2:N,2:N)=diag(-(2*K+1)*ones(N-1,1))+diag(K*ones(N-2,1),1)+diag(K*ones(N-2,1),-1);


%Algorithme%
for i=1:n
C(:,i+1)=A\C(:,i);
end


%Graphes%
surf(t,x,C)

Mais celui-ci ne semble pas fonctionner (sous matlab, le programme tourne depuis plus d'une heure sans m'afficher le moindre résultat)
A voir également:

7 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
3 juil. 2009 à 08:30
commence par choisir un n très petit, voir si ça ne fonctionne vraiment pas.
0
C'est fait, le programme tourne, mais pas correctement. Une erreur dans la modélisation certainement, puisque l'ensemble des valeurs alterne entre +alpha*C0 et -alpha*C0. Si y a des habitués de la modélisation de problème physique je veux bien un conseil aussi svp. Merci du premier avis Snipeur!
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
3 juil. 2009 à 12:28
modélisation de diffusion c'est ça?
Je suppose que tu utilises la loi de Fick. Vu A, je suppose que tu utilises une méthode implicite.
Les méthodes implicites sont normalement stable sauf pas de temps trop grand je crois.
Mais pour osciller entre C0*alpha et l'opposé, il est possible que ça soit une erreur de codage.
en premier lieu, vérifie par un affichage que ta matrice A est bien conditionné.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
3 juil. 2009 à 12:37
après un rapide calcul de coin de table, j'ai K=(De*To)/(2*h) (je laisse tomber la porosité dans un premier temps : toujours aller du plus simple au plus compliqué)
à mon avis, il faut que tu revois ta résolution.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je ne vois pas ce que tu as pu faire comme calcul, parce que de mon coté j'ai refait plusieurs ma résolution, en m'appuyant sur la théorie usuelle, il ne semble pas qu'il y ait d'erreur (et pourtant il doit y en avoir une, ça ne marche toujours pas). Tu as fait quoi pour trouver cette valeur de K ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 juil. 2009 à 10:59
Loi de Fick :
dC/dt=-De.dC/dx
En discrétisant :
(C1-C0)/To=-De. (C1_g-C1_d)/(2.h)
C1 est la concentration à l'instant t+dt, C0 à l'instant t. _g veux dire gauche _d veux dire droite.
On réarange :
C1/To+De...=C0/To
Mais je me trompe peut être dans la loi de Fick... Après réflexion, il me semble en effet que c'est en ordre 2 la dérivée d'espace.
0
Oui c'est bien une dérivée d'ordre deux. Mon schéma semble bien être correct. Ca doit être ma programmation sous Matlab qui doit foirer, je suis en train de voir ça, maintenant. Merci des conseils déjà!
0