Problème diffusion matlab
Thom1902
-
Thom1902 -
Thom1902 -
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)
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:
- Inoué veut diffuser une partie de jeu vidéo en continu et en direct (live streaming). elle souhaite afficher sur sa diffusion : son jeu sa webcam en vignette configurez son logiciel de diffusion ci-dessous pour que les deux éléments s’affichent.
- Vue satellite en direct gratuit de ma maison - Guide
- Site de telechargement direct - Accueil - Outils
- Liste de diffusion whatsapp - Guide
- Logiciel montage vidéo gratuit windows 10 - Guide
- Logiciel de sauvegarde gratuit - Guide
7 réponses
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!
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é.
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é.
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.
à mon avis, il faut que tu revois ta résolution.
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 ?
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.
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.