Rechercher : dans
Par :

Equation differentielle sur matlab

Dernière réponse le 9 fév 2009 à 17:46:17 atiffa, le 12 fév 2008 à 11:51:11 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « equation differentielle sur matlab » dans :
Représentation des courbes sous Matlab VoirLa fonction plot permet essentiellement de tracer des courbes sous Matlab. Dans cette astuce, nous allons essayer de détailler le fonctionnement de cette commande. Simple utilisation Vecteur Matrice Vecteur en fonction d'un autre Autres...
Concaténer les vecteurs ou les matrices sous Matlab VoirL'opération de concaténation des variables de Matlab consiste à regrouper ces variables dans une seule (vecteur ou matrice). Exemple : |2 3 4| X= |1 2 5| |0 2 7| Avec : |9 6 8| Y= |5 6 2| |3 2 1| Donne...

1

Sacabouffe, le 12 fév 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

kadide, le 12 fév 2008 à 22:00:17

Donner moi une equa diff

Répondre à kadide

3

Sacabouffe, le 12 fév 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

atiffa, le 13 fév 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

Sacabouffe, le 13 fév 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

atiffa, le 14 fév 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

Sacabouffe, le 14 fév 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

atiffa, le 14 fév 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"""""""""""""""""""""""""

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"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

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

""""""""""""""""les eq.diff.""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

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""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

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

Sacabouffe, le 14 fév 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

Sacabouffe, le 15 fév 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

atiffa, le 15 fév 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

Sacabouffe, le 15 fév 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

atiffa, le 16 fév 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

Sacabouffe, le 17 fév 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

atiffa, le 17 fév 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

Sacabouffe, le 17 fév 2008 à 18:15:07
  • +1

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

atiffa, le 17 fév 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"""""""""""""""""""""""""""""

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""""""""""""""""""""""""""

function Jnapump = jnapump(vmax,cout,km)

Jnapump = (vmax*cout)/(km+cout);
end
""""""""""""""""""""la 3éme fonction""""""""""""""""""""""""""""
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

Sacabouffe, le 19 fév 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

Sacabouffe, le 19 fév 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

Sacabouffe, le 19 fév 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

atiffa, le 21 fév 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"""""""""""""""""""""""""""""

function Jnapump = jnapump(vmax,cout,km)

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

"""""""""""""""""""""""""""""dnaclpsi.m"""""""""""""""""""""

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','DisplayName','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

Sacabouffe, le 21 fév 2008 à 18:22:29

Merci bien, j'm'en vais essayer ça. C'était quoi le problème finalement? J'aurai pas été d'un grand secours finalement... :-D
Pour varargin et varargout c'est quand tu veux pouvoir changer des valeurs par défaut (entre autres) dans une fonction. Par exemple (pour changer de celui donné par Matlab), dans la résolution de ton équa diff, tu peux choisir des options d'entrée ode15s. Dans ce cas tu peux modifier ton programme main en un truc du genre :

function main(varargin)
...
[T,Y] = ode15s(@dnaclpsi,tspan,y0,varargin);
...

Et quand tu lanceras ton main tu pourras lui préciser une liste d'options de résolution si tu veux...

Pour le varargout, pour ton programme j'ai pas d'exemple en tête. Mais si tu as besoin d'ouvrir un fichier de données sous Matlab, tu as la possibilité de savoir ce qui s'est passé pendant l'ouverture du fichier (réussite, échec, pourquoi...).
fid = fopen(nom_du_fichier,permission);

ou si tu veux avoir le message d'erreur
[fid,message]= fopen(nom_du_fichier,permission);

Si tu veux garder trace du message.
Donc si l'ouverture du fichier est contenue dans un programme main, tu peux écrire quelque chose du type
function [val,varargout]=main(liste_arguments)
...
[fid,message]= fopen(nom_du_fichier,permission);
if (nargout==1)
varargout(1)=message;
end
...

Tu pourras lancer le programme en choisissant de garder trace du message ou en prenant seulement la valeur retournée par le programme, au choix...

Si tu veux pouvoir utiliser un programme qui tourne avec des valeurs par défaut que toi tu as choisies, par exemple pour les concentrations, etc... tout en pouvant les modifier si t'en as envie, pas besoin des vararg, tu utilises juste nargin dans ton programme en lui disant quelles valeurs par défaut prendre quand elles ne sont pas passées en argument. Si c'est plutôt ça que tu voulais, dis-moi.
A plus Tirelipimpon sur le Chihuahua

Répondre à Sacabouffe

25

atiffa, le 22 fév 2008 à 12:28:46

Bonjour,

On fait le probléme dans mon programme c'était que dans la définition de mes deux fonctions (jghk.m et jnapump.m) j'ai oublier de mettre des points quand je multiplier ou quand je diviser deux vecteurs,
c'était pour cela il comprend pas ce que je lui demande ou il affiche des graphiques qui ne sont pas juste.

pour varargin et varargout je l'ai besoin dans mon prochaine programme
hier j'était entrain de dechiffrer un programme d'une personne qui fait la même chose que nous, alors je te garanti que j'ai pas compris grand chose????????????

"""""""""""""""""""""""""""""""""""""""""""""juste le debut de programme""""""""""""""""""""""""""

function varargout = cell_simulator(varargin)

% CELL_SIMULATOR M-file for cell_simulator.fig
% CELL_SIMULATOR, by itself, creates a new CELL_SIMULATOR or raises the existing
% singleton*.
%
% H = CELL_SIMULATOR returns the handle to a new CELL_SIMULATOR or the handle to
% the existing singleton*.
%
% CELL_SIMULATOR('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in CELL_SIMULATOR.M with the given input arguments.
%
% CELL_SIMULATOR('Property','Value',...) creates a new CELL_SIMULATOR or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before cell_simulator_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to cell_simulator_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help cell_simulator
% Last Modified by GUIDE v2.5 21-Mar-2006 14:36:05
% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...varargin et varargout
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @cell_simulator_OpeningFcn, ...
'gui_OutputFcn', @cell_simulator_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

c'etait juste le début de son programme

je sais pas si tu va comprendre qlq chose dans ce programme ???????????????

on fait c'est si pas descrit c'est quoi ta spécialité ?????????????????

parceque ca me géne de te posée des questions qui sont loin de ton domaine

merci pour ton message :-)))

A plus

Répondre à atiffa

26

atiffa, le 22 fév 2008 à 12:58:19
  • +1

Re:bonjour:

je pense que ce message est destiné à qlq 'un d'autre ????? et pas à moi

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Salut
Fais ton propre sujet majid01.
#include<stdio.h>
#include<stdlib.h>
main()
{
float a,b,x;
printf("entre la valeur de a :");
scanf("%f",&a);
printf("entre la valeur de b :");
scanf("%f",&b);
if (a<>0)
{
x=-b/a;
printf("x=:",x);
}
else
{
printf("solution impossible");
}
}
A plus
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

je l'ai trouver dans ma boite email, et je l'ai transfere à la bon prsonne

A plus

Répondre à atiffa

27

Sacabouffe, le 22 fév 2008 à 13:05:48

Salut atiffa
Effectivement c'était pour quelqu'un d'autre, une personne qui était venue demander de l'aide pour un programme dans ton topic, je lui avais répondu et aussi dit de faire son propre sujet.
Je regarde ton petit bidule quand j'ai le temps.
Ah oui... Et puis j'avais oublié... Evite d'utiliser pi pour un nom de variable en Matlab c'est pas très sage. pi c'est le 3.1415926535... sous Matlab donc si un jour t'as besoin de l'utiliser dans une fonction et que t'as appelé une variable comme ça, ça risque de poser problème.
Mon domaine c'est plus l'électromagnétisme et l'acoustique. Mais je suis toujours bien content d'apprendre d'autres trucs.
A plus tard Tirelipimpon sur le Chihuahua

Répondre à Sacabouffe

28

atiffa, le 22 fév 2008 à 18:06:09

Re:bonjour sacabouffe

"""""""""""""
Ah oui... Et puis j'avais oublié... Evite d'utiliser pi pour un nom de variable en Matlab c'est pas très sage. pi c'est le 3.1415926535... sous Matlab

"""""""""""""""

merci pour la remarque
mais dans mon programme j'ai utiliser psi (c.à.d. la perméabilité membranaire) et pas pi
je sais que pi en math = 3.14 environ

je te remercie beaucoup
on fait moi je connais presque rien dans ton domaine, mais je pense que c'est une branche en physique !!!!!!!!!!!!

moi je suis spécialisée en biologie et plus précisément en électrophysiologie rénal


A plus

Répondre à atiffa

29

Sacabouffe, le 22 fév 2008 à 18:21:14

Salut atiffa
Comme dans le programme de ton message 21 il y avait écrit % pi (permeability) in cm/s , j'ai préféré te prévenir.

Sinon, t'inquiète, je me doutais bien que tu connaissais la valeur de pi, c'est juste que je voyais pas comment formuler ma phrase pour dire que c'était le "pi mathématique"

Pour ce qui est de ton domaine, j'avais deviné grâce au message 6

Oui mon domaine c'est à peu près ça...

Je regarde ton truc ce soir ou demain si je peux. Tirelipimpon sur le Chihuahua

Répondre à Sacabouffe

30

atiffa, le 22 fév 2008 à 20:35:53

Re: Salut Sacabouffe

Ah oui.................; mais tu as vraiment raison, j'ai même pas fait attention que j'ai utilisée pi dans la définition de la fonction jghk
on fait pi ca veut dir perméabilité membranaire pour un ion i
et dans le main c'était remplacer par: pna (perméabilité membranaire pour le sodium) et pcl (perméabilité membranaire pour le chlore)
je pense que pour mon programme ça pas poser de problème ( y a pas de confusion)

mais t'avais raison parce que ça peut être une source d'erreur si je l'utilise une autre fois

je te remercie vraiment pour la remarque

A plus :-)

Répondre à atiffa