rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Equation differentielle sur matlab

Posté par atiffa, le mardi 12 février 2008 à 11:51:11
bonjour,
j'ai besoin que vous m'expliquez comment je peut resoudre une équation differentielle type :d/dt(qna1) = -areaMem*JNa; sur matlab
je vous remercie infiniment pour votre aide
Configuration: Linux
Firefox 2.0.0.3
Répondre à atiffa  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mardi 12 février 2008 à 18:50:24
Salut atiffa
Il faudrait être plus clair sur ce que sont tous les termes de ton équa diff.
A plus Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kadide, le mardi 12 février 2008 à 22:00:17
donner moi une equa diff
Répondre à kadide

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mardi 12 février 2008 à 22:01:13
T'es qui toi Bozo?
Tu t'es perdu?
Tiens prends dont cette équa diff. Elle te fera pas de mal.
Trois fois par jours avant chaque repas. Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le mercredi 13 février 2008 à 13:08:38
Bonjour Scabouffe,
c'est gentil da ta part de m'apprendre la politesse,
mais ca réponde pas à la question que j'ai poser

je te remercie infiniment
Répondre à atiffa

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mercredi 13 février 2008 à 13:31:32
Salut atiffa
Mon message ne s'adressait pas à toi!!! :-D
Il s'adressait à kadide qui est venu polluer ton topic.
Cela dit, si j'ai répondu à ton post c'est pour t'aider. Mais tu ne m'aides pas...
Je reformule donc une nouvelle fois le message 1, pourrais-tu, s'il te plaît, préciser ce que sont tous les termes de ton équa diff?
Adtaleur Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le jeudi 14 février 2008 à 09:48:42
Salut sacabouffe;
on fait il ne s'agit pas d'une seule eq.diff. mais c'est toute un sujet à programmer sur matlab
c'est un sujet en électrophysiologie (plus précisement en diffusion des ions à travers la membrane de tubule rénal)
j'ai besoin de calculer la variation des concentrations ioniques de part et d'autre de la membrane en fonction du temps
dans mon programme: j'ai besoin des differentes constantes, des valeurs initiales de chaque variable (à temps 0)
des équations de concentrations et de flux ionique à travers la membrane
mais le probléme (pour moi) c'est que la solution d'une équation dépend de la solution des autres équations
alors je suis perdu ( dans mon modèle tous vari en fonction du temps (les concentrations et les permeabilités))

je suis vraiment perdu
c'est pour ca je ne peut pas donner un exemple des eq.diff.

je sais pas c'est tu peut m'aider pour résoudre mon probléme ou non

je te remercie
A plus
Répondre à atiffa

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le jeudi 14 février 2008 à 13:59:01
Re salut
Ouais, ouais, ouais, je vois le genre...
Y aurait-il moyen que tu mettes un lien vers un pdf ou autre avec toutes les équations, conditions aux limites et conditions initiales dans ton prochain message, que je jette un œil à tout ça? Parce que là comme ça difficile de te donner des pistes.
Je verrai si je peux te filer un coup de main, ce qui est pas sûr du tout... Mais bon... on verra... Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le jeudi 14 février 2008 à 15:08:55
Bonjour sacabouffe;

j'ai une version de ce programme qu'etait fait sur un autre logiciel (berkelymadonna) et j'ai besoin de le convertir en matlab:
la version berkelymadonna est le suivant :

""""""""""­""""""""""­""""""
METHOD stiff

STARTTIME = 0
STOPTIME = 100
DT = 0.002


cnacl1init = 50.0 ; mmol/l ,initial NaCl concentration in bath 1
cnacl2init = 1.0 ;mmol/l ,initial NaCl concentration in bath 2

FRT = 0.037442 ; 1/mV
faraday = 96.5 ; coul/mmol
pna = 0.1 ; cm/sec, pérmeabilite au sodium
pcl = pna/2 ; cm/sec, pérmeabilité au chlore
zcl =-1 ; la valence de cl-
zna = 1 ; la valence de NA+
gammaMem = 1e-6 ; la capacité de la membrane
vol1 = 20 ; ml , le volume dans le compartiment 1
vol1 = 10 ;ml, le volume dans le compartiment 2
areaMem = 1.0 ;cm2, l'aire de la membrane qui sépare les deux compartiments

Upsi = FRT*psi ; dimentionless membrane potential

na1=qna1/vol1 ;mmol/l, concentration de Na dans le compartiment 1
na2=qna2/vol2 ;mmol/l, concentration de Na dans le compartiment 2
cl1=qcl1/vol1 ;mmol/l, concentration de Cl dans le compartiment 1
cl2=qcl2/vol2 ;mmol/l, concentration de Cl dans le compartiment 2
qna1>
""""""""""­Equation JGHK pour calculer le flux ionique à travers la membrane""""""""&quo­t;"""""""""&quo­t;""""""

JghkNa = -pna*zna*Upsi*(na1-na2*exp(zna*Upsi))/(1-exp(zna*Upsi)) ; umol/cm2/sec
JghkNa0 = pna*(na1-na2) ;use Fick near psi=0


JghkCl = -pcl*zcl*Upsi*(cl1-cl2*exp(zcl*Upsi))/(1-exp(zcl*Upsi)) ; umol/cm2/sec
JghkCl0 = pcl*(cl1-cl2) ;use Fick near psi=0


JNa = if (abs(Upsi)<=0.001) then JghkNa0 else JghkNa ; umol/cm2/sec
JCl = if (abs(Upsi)<=0.001) then JghkCl0 else JghkCl ; umol/cm2/sec

""""""""""­""""""""""­"le coursnt total"""""""""&­quot;"""""""""&­quot;"""""""""&­quot;"""""""""&­quot;"""""""""&­quot;"""""""""&­quot;"""""""""&­quot;"""

Itot = areaMem*faraday*(zna*JNa+zcl*JCl) ;mA/cm2

""""""""""­""""""les eq.diff.""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;"""""

d/dt (qna1) = -areaMem*JNa

d/dt (qcl1) = -areaMem*JCl

d/dt (qna2) = -areaMem*JNaqna1>

d/dt (qcl2) = -areaMem*JCl

d/dt (psi) = Itot/gammaMem


""""""""""­""""""""""­""""""les valeurs initiales""""""""&qu­ot;"""""""""&qu­ot;"""""""""&qu­ot;"""""""""&qu­ot;"""""""""&qu­ot;"""""""""&qu­ot;"""

init psi = 18 ;mv
init qna1 =cnacl1init*vol1
init qcl1 =cnacl1init*vol1
init qna2 =cnacl2init*vol2qna1>
init qcl2 =cnacl2init*vol2



limit qna1>=0
limit qna2>=0
limit qcl1>=0
limit qcl2>=0
limit psi>=-200
limit psi<=200
""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""

et c'est tout pour le momment
je sais pas c'est tu va le comprend ou non

et je te remercie encore pour ton aide et ta patience
A plus
Répondre à atiffa

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le jeudi 14 février 2008 à 15:33:35
Re salut :-D (on n'arrête plus...)
De rien...
Je jetterai un œil plus tard et je te dirai si je suis arrivé à quelque chose.
A plus Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le vendredi 15 février 2008 à 13:43:44
Je regarde ce soir ou ce we, promis.
PS : Mets tes autres topics en résolu Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le vendredi 15 février 2008 à 15:51:32
Bonjour sacabouffe,
je pense que j'ai encore un petit souci, j'arrive pas à trouver une explication logique
le probléme tous simplement est: par exemple hier j'ai implimenter sur matlab un petit programme ca bien marché
j'etiend mon ordinateur et je rentre chez moi
aujourd'hui j'ai fait tourner le même programme et ca marche pas (sachant que j'ai rien changer de mon programme d'hier)
à ton avis ca peut être dit à quoi?????????????,
ca me met toujours en retard, parceque chaque fois je me trouve obliger de recommencer de zéro
et c'est un peut fatiguant

en tous ca je te remercie beaucoup beaucoup
et je te souhait un bon weekend
Répondre à atiffa

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le vendredi 15 février 2008 à 15:57:43
Salut
On peut essayer de répondre à cette petite question pas trop longue, on verra pour le truc plus compliqué plus tard.
Peut-être que tu avais des variables en mémoire par exemple. Du coup ça tournait bien... Et pis là tu les as plus...
Sinon... ben je vois pas... Ça te met une erreur ou c'est les résultats qui sont pas corrects?
Si c'est une erreur, poste la stp que je regarde. How I wish, how I wish you were here
Répondre à Sacabouffe

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le samedi 16 février 2008 à 16:21:03
Salut
on fait au début ça ma donner des sorties graphiques (qui ne sont pas corrects)
j'ai pensé qu'il faut que je change certaines équations ou certaines valeurs, mais sans que je touche à rien il veut même pas afficher les graphes
aujourd'hui j'ai essayer de retaper le programme sur mon ordinateur, alors il m'affiche deux messages d'erreur:

""""""""""­""""""""""­
??? Error using ==> odearguments at 117
Solving DNACLPSI requires an initial condition vector of length 8.

Error in ==> ode15s at 228
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

>>
""""""""""­""""""""""­

qui ce que tu as compris de ces deux messages ???????????

je te remercie infiniment de ton aide
Aplus
Répondre à atiffa

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le dimanche 17 février 2008 à 16:02:42
J'ai jamais utilisé les ode solvers de Matlab mais vraisemblablement il manque les conditions initiales dans ton code...
Et je pense que le deuxième message n'est rien d'autre qu'une conséquence du premier. A voir... Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le dimanche 17 février 2008 à 17:43:18
Bonjour sacabouffe (:-D)

ce que je trouve pas normale dans ce message d'erreur (de matlab) c'est que j'ai déjà met tous les conditions initiales dans mon programme:

""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­"""""
cnacl1init = 50.0 ; %mmol/l, initial NaCl concentration in bath 1
cnacl2init = 20.0 ; %mmol/l, initial NaCl concentration in bath 2
cnacl3init = 0.0 ; %mmol/l, initial NaCl concentration in bath 3
vol1 = 20 ; %ml
vol2 = 10 ; %ml
vol3 = 10 ; %ml
qna1init = cnacl1init * vol1;
qna2init = cnacl2init * vol2;
qna3init = cnacl3init * vol3;
qcl1init = cnacl1init * vol1;
qcl2init = cnacl2init * vol2;
qcl3init = cnacl3init * vol3;
psi1Init = 18; %mv
psi2Init = 0; %mv

""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­

je sais rien sur ton domaine, mais je veut juste savoir comment tu fait pour résoudre un programme avec des équations différentielles???????????? ( Y aurait-il moyen que tu mettes un lien avec certains exemples c'est cela est possible bien sûr)

je sais qu'il y a pas mal des ode solvers de matlab, mais je pense qu'on peut résoudre des eq.diff. sans passer par ce chemin............;
c'est ce que j'ai besoin de savoir!!?

Je continue de mon coté et si j'ai la solution je ne manquerai pas de t'en faire part!

merci beaucoup pour ta gentillesse et pour ta disponibilité :-)

A plus
A +
Répondre à atiffa

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le dimanche 17 février 2008 à 18:15:07
Salut atiffa
J'étais justement en train de jeter un œil sur le programme que t'as fait avec berkeley madonna pour voir si je pouvais en faire quelque chose sous Matlab.
Mais bon, là le me heurte à un truc que je connais pas trop : l'utilisation des ode solvers sous Matlab. En plus en regardant j'ai vu qu'il y en avait une bonne dizaine. Donc le temps de lire et de comprendre ce que fait chacun d'eux...

Il y a effectivement d'autres méthodes mais finalement je pense que chacune d'elle est en fait plus ou moins implémentée dans les ode solvers.
Mais si tu veux essayer de le faire toi-même, la méthode des différences finies (tu connais?) consiste à discrétiser ton intervalle de temps, à approcher la dérivée première à l'aide du développement de Taylor à l'ordre 1, à tout écrire sous la forme discrétisée et normalement au final tu as un système linéaire à résoudre pour chaque pas de temps.

Le programme que tu as écrit, c'est une traduction de celui que tu m'as mis dans le message 8? Si c'est le cas et s'il est pas trop long, est-ce que tu pourrais l'écrire dans ton prochain message? Comme ça ça m'éviterait de faire la traduction Matlab moi-même. Et puis aussi ce serait plus facile pour savoir où se situe l'erreur.

Pour les liens, je pense que je peux en trouver et te les mettre mais après ça dépend aussi de ce que tu connais en matière de résolution numérique d'équa diiff, je veux pas te mettre un truc trop gamin que tu connais déjà...

Et... de rien, t'inquiète... :-D Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le dimanche 17 février 2008 à 18:48:36
Re:bonjour:-)

en fait je pense que je suis pas loin de la solution, parce que j'ai commencer à avoir des sorties graphiques (avec des erreurs bien sûr), mais il y a une seule valeur qui me pose de problème ???????????? à chaque fois que je la modifier ça bloque tous et plus rien qui fonctionne
si tu veut je peut te passer mon programme mais c'est un peu long:

""""""""""­""""""la 1ére fonction""""""""&quo­t;"""""""""&quo­t;"""""""""&quo­t;

function jghki = jghk(pi,zi,cout,cin,psii)
%JGHK Summary of this function goes here
% Detailed explanation goes here
% FRT in 1/mV
% psi in mV (reference in outside bath)
% pi (permeability) in cm/s
% jghk then in micromoles/s/cm2

FRT = 0.037442;
if (abs(psii) < 0.001)
jghki = pi*(cout-cin);
else
jghki = -pi*zi*FRT*psii*(cout - cin*exp(zi*FRT*psii))/(1-exp(zi*FRT*psii));
end

end
""""""""""­""""""""""­""la 2éme fonction""""""""&quo­t;"""""""""&quo­t;"""""""

function Jnapump = jnapump(vmax,cout,km)

Jnapump = (vmax*cout)/(km+cout);
end
""""""""""­""""""""""­la 3éme fonction""""""""&quo­t;"""""""""&quo­t;"""""""""
function dydt = dnaclpsi(t,y)
%This calculates the RHS of the ODEs for
% NaCl diffusion across a GHK membrane.
% Psi is treated as a variable, so this system is stiff.
% method ode15s works with this, but ode45 does not.
%
%cna1 = y(1)/vol1 ; % mmol/l = umol/ml (i.e., qna1 is in umol)
%cna2 = y(2)/vol2 ; % mmol/l = umol/ml (i.e., qna2 is in umol)
%cna3 = y(3)/vol3 ; % mmol/l = umol/ml (i.e., qna3 is in umol)
%ccl1 = y(4)/vol1 ; % mmol/l = umol/ml (i.e., qcl1 is in umol)
%ccl2 = y(5)/vol2 ; % mmol/l = umol/ml (i.e., qcl2 is in umol)
%ccl3 = y(6)/vol3 ; % mmol/l = umol/ml (i.e., qcl3 is in umol)
%psi1 = y(7);
%psi2 = y(8);

global vol1 vol2 vol3 pna pcl zna zcl areaMem gammaMem faraday vmax km;
jna1 = areaMem*jghk(pna,zna,y(1)/vol1,y(2)/vol2,y(7))+ jnapump(vmax,y(1)/vol1,km);
jna2 = areaMem*jghk(pna,zna,y(2)/vol2,y(3)/vol3,y(8));
jcl1 = areaMem*jghk(pcl,zcl,y(4)/vol1,y(5)/vol2,y(7));
jcl2 = areaMem*jghk(pcl,zcl,y(5)/vol2,y(6)/vol3,y(8));
Itot1 = faraday*(zna*jna1 + zcl*jcl1);
Itot2 = faraday*(zna*jna2 + zcl*jcl2);

dydt = [ -jna1
jna1-jna2
jna2
-jcl1
jcl1-jcl2
jcl2
Itot1/gammaMem
Itot2/gammaMem];
end %dnaclpsi

""""""""""­""""""""""­""""""""""­"le main.m"""""""""­""""""""""­""""
global vol1 vol2 vol3 pna pcl zna zcl areaMem gammaMem faraday vmax km;

cnacl1init = 50.0 ; %mmol/l, initial NaCl concentration in bath 1
cnacl2init = 20.0 ; %mmol/l, initial NaCl concentration in bath 2
cnacl3init = 0.0 ; %mmol/l, initial NaCl concentration in bath 3
vol1 = 20 ; %ml
vol2 = 10 ; %ml
vol3 = 10 ; %ml
qna1init = cnacl1init * vol1;
qna2init = cnacl2init * vol2;
qna3init = cnacl3init * vol3;
qcl1init = cnacl1init * vol1;
qcl2init = cnacl2init * vol2;
qcl3init = cnacl3init * vol3;
psi1Init = 18; %mv
psi2Init = 0; %mv

FRT = 0.037442 ; %1/mV
faraday = 96.5 ; %coul/mmol = mcoul/umol
pna=0.1 ; %cm/sec = cm3/(cm2 sec)
pcl = pna/2 ; %cm/sec = cm3/(cm2 sec)
zcl=-1;
zna=1;
gammaMem = 1e-6; %; memCapacitance = 1e-6 farads/cm2
areaMem = 1.0 ; %cm2
vmax = 0.49;
km = 10;

tspan = [0 2000];
y0 = [qna1init; qna2init; qna3init; qcl1init; qcl2init; qcl3init; psi1Init; psi2Init];

[T,Y] = ode15s(@dnaclpsi,tspan,y0);

cna1 = Y(:,1)/vol1;
cna2 = Y(:,2)/vol2;
cna3 = Y(:,3)/vol3;
ccl1 = Y(:,4)/vol1;
ccl2 = Y(:,5)/vol2;
ccl3 = Y(:,6)/vol3;
psi1 = Y(:,7);
psi2 = Y(:,8);
subplot(3,1,1);plot(T,cna1,'r',T,cna2,'-g',T,cna3,'b', 'DisplayName', 'Na in baths 1 & 2');grid; figure(gcf)
legend('cna1','cna2','cna3')
xlabel('temps en s')
ylabel('[Na+] en mmol/l')
title('variation de la concentration du sodium en fonction du temps')

subplot(3,1,2);plot(T,psi1,'r',T,psi2,'b', 'DisplayName', 'psi in baths 1 & 2');grid; figure(gcf)
legend('psi1','psi2')
xlabel('temps en s')
ylabel('psi en mV')
title('variation de psi en fonction du temps')


subplot(3,1,3);plot(T,ccl1,'r',T,ccl2,'-g',T,ccl3,'b', 'DisplayName', 'Cl in baths 1 & 2');grid; figure(gcf)
legend('ccl1','ccl2','ccl3')
xlabel('temps en s')
ylabel('[cl-] en mmol/l')
title('variation de la concentration du chlore en fonction du temps')

""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­

ce qui me pose problème maintenant c'est le cnacl3initquand je remplace 0 par 20 rien ne marche

mon niveau en math c'est vraiment niveau bac donc tous ce que tu peut me passer comme exemple ça peut être utile pour moi

je te re:re:remercie pour ton aide precieuse
A plus
Répondre à atiffa

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mardi 19 février 2008 à 11:12:39
Salut atiffa
En fait la description de Wikipédia pour les différences finies m'a l'air plutôt bien faite, donc si tu veux te faire une idée...
Wikipédia Méthodes des différences finies
Je cherche ce qui va pas dans ton code, si de ton côté t'as des nouvelles, dis-moi.
Ciao Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mardi 19 février 2008 à 18:03:30
Bon... désolé atiffa
Pour le moment je vois pas où ça bloque. Ça marche pour toutes les valeurs jusqu'à 20 j'ai l'impression mais pas pour 20.
Je continue de chercher quand j'ai un peu de temps.
A plouche Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sacabouffe, le mardi 19 février 2008 à 18:11:08
Pour les ode solvers je sais pas mais par expérience Matlab patauge un peu dans la semoule quand il a à travailler avec des Not a Number (NaN). Peut-être une piste... Tirelipimpon sur le Chihuahua
Répondre à Sacabouffe

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
atiffa, le jeudi 21 février 2008 à 12:02:04
Bonjour Sacabouffe,

je pense que ca marche cette fois ci, mais ce n'est que le début de mon travail, la suite et bien plus complique !!!!!!!!!!!!!!!!
je t'envoie le programme :

""""""""""­""""""""""­""""""""""­""" jghk.m"""""""""­""""""""""­""""""""""­""""""""""­""""""""""­"""

function jghki = jghk(pi,zi,cout,cin,psii)
%JGHK Summary of this function goes here
% Detailed explanation goes here
% FRT in 1/mV
% psi in mV (reference in outside bath)
% pi (permeability) in cm/s
% jghk then in micromoles/s/cm2

FRT = 0.037442;
if (abs(psii) < 0.001)
jghki = pi*(cout-cin);
else
jghki = -pi*zi*FRT*psii.*(cout - cin.*exp(zi*FRT*psii))./(1-exp(zi*FRT*psii));
end

end

""""""""""­""""""""""­""""""""jnapump.m&qu­ot;"""""""""&qu­ot;"""""""""&qu­ot;""""""""

function Jnapump = jnapump(vmax,cout,km)

Jnapump = (vmax*cout)./(km+cout);
end

""""""""""­""""""""""­"""""""""dnaclp­si.m"""""""""&q­uot;"""""""""&q­uot;"

function dydt = dnaclpsi(t,y)
%This calculates the RHS of the ODEs for
% NaCl diffusion across a GHK membrane.
% Psi is treated as a variable, so this system is stiff.
% method ode15s works with this, but ode45 does not.
%
%cna1 = y(1)/vol1 ; % mmol/l = umol/ml (i.e., qna1 is in umol)
%cna2 = y(2)/vol2 ; % mmol/l = umol/ml (i.e., qna2 is in umol)
%cna3 = y(3)/vol3 ; % mmol/l = umol/ml (i.e., qna3 is in umol)
%ccl1 = y(4)/vol1 ; % mmol/l = umol/ml (i.e., qcl1 is in umol)
%ccl2 = y(5)/vol2 ; % mmol/l = umol/ml (i.e., qcl2 is in umol)
%ccl3 = y(6)/vol3 ; % mmol/l = umol/ml (i.e., qcl3 is in umol)
%psi1 = y(7);
%psi2 = y(8);

global vol1 vol2 vol3 pna pcl zna zcl areaMem gammaMem faraday vmax km;
jna1 = areaMem*jghk(pna,zna,y(1)/vol1,y(2)/vol2,y(7))+ areaMem*jnapump(vmax,y(1)/vol1,km);
jna2 = areaMem*jghk(pna,zna,y(2)/vol2,y(3)/vol3,y(8));
jcl1 = areaMem*jghk(pcl,zcl,y(4)/vol1,y(5)/vol2,y(7));
jcl2 = areaMem*jghk(pcl,zcl,y(5)/vol2,y(6)/vol3,y(8));
Itot1 = faraday*(zna*jna1 + zcl*jcl1);
Itot2 = faraday*(zna*jna2 + zcl*jcl2);

dydt = [ -jna1
jna1-jna2
jna2
-jcl1
jcl1-jcl2
jcl2
Itot1/gammaMem
Itot2/gammaMem];
end %dnaclpsi


""""""""""­""""""""""­""""""""""­""""""""""­""""""main.m"""­""""""""""­""""""""""­""""""""""­"""""

global vol1 vol2 vol3 pna pcl zna zcl areaMem gammaMem faraday vmax km;


cnacl1init = 50.0 ; %mmol/l, initial NaCl concentration in bath 1
cnacl2init = 20.0 ; %mmol/l, initial NaCl concentration in bath 2
cnacl3init = 0.0 ; %mmol/l, initial NaCl concentration in bath 3
vol1 = 20 ; %ml
vol2 = 10 ; %ml
vol3 = 10 ; %ml
qna1init = cnacl1init * vol1;
qna2init = cnacl2init * vol2;
qna3init = cnacl3init * vol3;
qcl1init = cnacl1init * vol1;
qcl2init = cnacl2init * vol2;
qcl3init = cnacl3init * vol3;
psi1Init = 18; %mv
psi2Init = 0; %mv

FRT = 0.037442 ; %1/mV
faraday = 96.5 ; %coul/mmol = mcoul/umol1.0
pna=0.1 ; %cm/sec = cm3/(cm2 sec)
pcl = pna/2 ; %cm/sec = cm3/(cm2 sec)
zcl=-1;
zna=1;
gammaMem = 1e-6; %; memCapacitance = 1e-6 farads/cm2
areaMem = 1.0 ; %cm2
vmax = 7;
km = 10;

tspan = [0 2000];
y0 = [qna1init; qna2init; qna3init; qcl1init; qcl2init; qcl3init;
psi1Init; psi2Init];

[T,Y] = ode15s(@dnaclpsi,tspan,y0);

cna1 = Y(:,1)/vol1;
cna2 = Y(:,2)/vol2;
cna3 = Y(:,3)/vol3;
ccl1 = Y(:,4)/vol1;
ccl2 = Y(:,5)/vol2;
ccl3 = Y(:,6)/vol3;
psi1 = Y(:,7);
psi2 = Y(:,8);

jnap = areaMem*jnapump(vmax,cna1,km);
jnaghk1 = areaMem*jghk(pna,zna,cna1,cna2,psi1);
jnaghk2 = areaMem*jghk(pna,zna,cna2,cna3,psi2);
jclghk1 = areaMem*jghk(pcl,zcl,ccl1,ccl2,psi1);
jclghk2 = areaMem*jghk(pcl,zcl,ccl2,ccl3,psi2);

subplot(3,2,1);plot(T,cna1,'r',T,cna2,'-.g',T,cna3,'--b', 'DisplayName','Na in baths 1 & 2 & 3');grid; figure(gcf)
legend('cna1','cna2','cna3')
xlabel('temps en s')
ylabel('[Na+] en mmol/l')
title('variation de la concentration du sodium en fonction du temps')

subplot(3,2,2);plot(T,psi1,'r',T,psi2,'-.b', 'DisplayName', 'psi in baths 1 & 2 & 3');grid; figure(gcf)
legend('psi1','psi2')
xlabel('temps en s')
ylabel('psi en mV')
title('variation de psi en fonction du temps')


subplot(3,2,3);plot(T,ccl1,'r',T,ccl2,'-.g',T,ccl3,'--b', 'DisplayName','Cl in baths 1 & 2 & 3');grid; figure(gcf)
legend('ccl1','ccl2','ccl3')
xlabel('temps en s')
ylabel('[cl-] en mmol/l')
title('variation de la concentration du chlore en fonction du temps')


subplot(3,2,4);plot(T,jnap,'r',T,jnaghk1,'-.g',T,jnaghk2,'--­b','DisplayName','jnaghk in baths 1 & 2 & 3');grid; figure(gcf)
legend('jnap','jnaghk1','jnaghk2')
xlabel('temps en s')
ylabel('jna en micromoles/s/cm2')
title('variation jna en fonction du temps')


subplot(3,2,5);plot(T,jclghk1,'-.g',T,jclghk2,'--b','Display­Name','jclghk in baths 1 & 2 & 3');grid; figure(gcf)
legend('jclghk1','jclghk2')
xlabel('temps en s')
ylabel('jcl en micromoles/s/cm2')
title('variation jcl en fonction du temps')

""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­""""""""""­"""""


si tu peut ,si besoin de savoir comment je peut utiliser "varargout" et "varargin" dans un programme matlab???????????????

je te remercie vraiment de ton aide

A plus
Répondre à atiffa

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs