|
|
|
|
Posté par
atiffa, le mardi 12 février 2008 à 11:51:11Configuration: Linux Firefox 2.0.0.3
Salut atiffa
Il faudrait être plus clair sur ce que sont tous les termes de ton équa diff. A plus Tirelipimpon sur le Chihuahua |
donner moi une equa diff
|
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
|
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
|
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
|
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
|
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
|
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 + |
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 |
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 |
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 |
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 |
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 |
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 |