Unidad: Iztapalapa División:Ciencias Básicas e Ingeniería Carrera: Licenciatura enComputación Materia: Proyecto de Investigación Título: "Simulacióndelmovimientode carga enmúsculo esquelético durante elacople Excitación-Contracción" Fecha: Marzo/2000 Alumno:Olivama Garcia Bello Matrícula: 94217533 ------ 1 ------------ 3 ------------- 5 4 . 3 Conductancia del sodio -------------- 6 4.4 Conductancia del calcio ------------- 8 -------------- 9 3. Modelo eléctrico de la membrana 4. Ecuaciones de Hodgkin & Huxley 4.1 Corriente de la membrana 4.2 Conductancia del potasio 5. Código de la aplicación l. Objetivo Representar mediante modelos eléctricos las corrientes capacitativas no lineales debida a los iones de potasio, sodio, y la corriente total de lamembrana que se atribuye a ambos iones durante el acople excitación-contracción del músculo esquelético. 2. Introducción Las células están completamente rodeadas por una unidad de membrana delgada. La exitación de las células está siempre acompañada por cambios en el potencial de la membrana. Estos cambiospueden serabruptos o lentos,breves o permanentemente largos,dependiendodelacélulaylaestimulación,peroel mecanismo de cambio de potencial es fundamentalmente el mismo. La corriente eléctrica que fluye a través de membranas es transportado por el movimiento de los iones. Cualquier cambio en ladirecciónpositivadesdeelreposo es llamada despolarización,porelcontrario, uncambioenla direcciónnegativa esllamada hiperpolarización. una una LOSpotenciales de acción son generalmente similares en todas las células pero difieren en la forma y el tiempo de corriente deun tipo de célula a otro. En los siguientes capítulos podremos ver el comportamiento de la membrana como un equivalente a un circuito, así como la variaciones de la corriente debida a los iones y al potencial. 3. Modelo eléctrico de la membrana Lamembranabiológicapuedeserconsideradaenelsentido eléctrico como el equivalente a capacitores, separando 2 fases de conducción, conteniendo principalmente iones de sodioenlaprimerafase y depotasioen la segunda. La existencia de una diferencia de voltaje (E, envolts) a través de un capacitor (C, en farads) indica la separación de carga (9, en coulombs). La relación entre estas cantidades es: q = CE La diferencia de potencial a través de la capacitancia de la membrana (C) puede ser alterado por la transferencia de cargas a lo largo de cualquiera de los t r e s canales ionicos. 1 Bajo condiciones de reposo la membrana permite pequeñas corrientes que fluyen a través de ésta. En el modelo, estas corrientes se mueven a través de canales de sodio, potasio y cloro separados, y cada uno tiene su propio gradiente químico (representado por el potencial de equilibrio para elion) y una resistencia variable. Un incremento de la permeabilidad de la membrana para un ionparticularcorresponde a una caída de la resistencia. De esta forma, los biólogos encontraron la relación inversa entre la permeabilidad y la resistencia. Permeabilidad a 1 Resistencia Utilizando la ley deOhm: Conductancia = 1 Resistencia Entonces, permeabilidad es proporcional a la conductancia. Estas características pueden ser incorporadas dentro deun circuito eléctrico. El modelo en la figura da una buena aproximación del comportamiento delas células. 2 4. Ecuaciones de Hodgkin & Huxley 4.1 Corriente de la membrana Como ya se mencionó anteriormente, la existencia de una diferencia de voltaje estable a través de un capacitorindicanlaseparacióndecarga. Y la relación entre estascantidades es: q = CE Diferenciando la ecuación se obtiene: &= C& dt dt De este modo, el cambio del voltaje en la membrana con el tiempo da un ascenso para un cambio en la separación de carga o desplazamiento de carga con el tiempo. Esta es la corriente capacitativa. En resumen, las membranas biológicas son requebrajadas en pequeñas partículascargadas (¡.e, iones), obteniendo un ascenso enla corriente ionica. Así, la membrana exhibe su propiedad de conductancia G, de ese modo: GE = y (1) Cuando I = O, no habrá diferencia de voltaje a través de la membrana. Esto será así si la membrana está compuesta sólo de componentes eléctricos pasivos. ES de conocimiento común que una fuentedevoltajeexista a travésde las membranas biológicas (¡.e, potencial en reposo). Así la ecuación (1) puede ser modificada como: G(E - E,) = y (2) Só10 cuando E = E, hace que I sea cero. El valor de la diferencia de voltaje E a través de la membrana cuando I = O es llamado potencial de equilibrio. Si un ionde una membrana permeable no está enequilibrio a travésdela membrana, entonces se moverá bajo su gradiente de potencial electroquímico. La razón (j),es decir, Ij, es determinado por el producto de la fuerza de conducción en el ion (¡.e, E - Ej) y la conductancia de la membrana para de este movimiento del ion particular este ion (Gj). Esto puede ser escrito: (3) Ij = Gj (E - Ej) Aunque la ecuación (3) es formalmenteequivalente a la ecuación (2) I esla corriente total debido al movimiento de todos los iones (¡.e, I = C j I j ) cuando I + I, en la ecuación (3) I I j es la corriente transportada por el ion particular j cuando E # Ej. Cuando = O, E, = E es el potencial interno, considerando que la corriente I j Ej es el potencial interno cuando es cero. Esto simplemente muestra que E, es el potencial de la membrana en reposo, considerando que Ej es el potencial de equilibrio para ese ionj. 3 La corriente totalI para dos iones, j y k, se obtienen por: I=Ij+Ik Substituyendo la ecuación(3) se tiene: I = Gj (E - Ej) + Gk (E - Ek) La corriente a través de la membrana del axon se asume a la consistencia de 2 componentes, una corriente capacitativa debidoa cambios en la densidad de cargacomo las superficies interiores y exteriores de la membrana y una corriente ionica debido al flujo de iones a través de los caminos dentro de la membrana. Por lo tanto, la corriente total de la membrana I se obtiene por: I=Cm&+CiIi dt De acuerdo a la hipótesis ionica interno de iones de sodio. Silamagnituddel , la corriente interna inicial pulso dedespolarización es menorque (6) es debido al flujo VNa, la corriente de sodio ser6 interna, y si essuperiorde VNa, la corriente será externa. La corriente interna queda inafectada por cambios en la concentración de sodio externa, y así ese componente de la corriente de la membrana es debido a algún o t r o ion, posiblemente potasio. La dinámica del cambio de conductancia siguiendo los cambios en el potencial de la membrana fueron descritos por: Hodgkin y Huxley usando un conjunto de ecuaciones empíricas. La corriente totala través de la membrana es obtenida por la ecuación (6), y 'q" t iIi = Ik + I N a + Ita+ IL,donde IL es una corriente ohmica por lo general referida a corriente de fuga. Las permiabilidadesionicasde las membranassonexpresadasen términos deSUS conductancias. Por tanto: = Gk (E - Ek) + Gk (v - v k ) I N a = G N a (E - E N a ) + G N a (V - VNa) h a G c a (E - E c a ) + G c a (V - Vea) IL = GL (E - EL) + GL (V - VL) Ik (7) (8) (9) (10) Dónde V=E-Er,Vk=Ek-Er,VNa=ENa-Er, V b = L - E , . ,VL = EL - E , ; las V'S son medidas directamente como desplazamientos desde E,. EL es el potencial al que la corriente de fuga debido al cloruroy otros iones es cero. 4 Experimentos indican que GNa y Gk varían con el tiempo, y los otros parámetros son asumidos como constantes, Desde una examinación de los antecedentes experimentales de voltaje, Hodgkiny Huxley revisaron ecuaciones empíricas para evaluar Gk y GNa como más adelante con mayor función del voltaje y el tiempo. Estas conductancias se verán detalle. 4.2 Conductancia del potasio Hodgkin & Huxley revisaron ecuaciones empíricas para evaluar Gk y GNa como función del voltaje y del tiempo. Ellos asumieron que éste requiere de 4 partículas para ocupar sitios específicos en lamembranapara causaruncambio en la conductanciadelpotasio. Si nesla probabilidad para que una partícula singular estéen el lugar derecho, entonces: - Dónde Gk es la máxima conductancia del potasio. El valor de n se obtiene por la solución de la ecuación: Dónde any fin son los valores de las constantes , las cuales dependen solamente del potencial. La dependencia del voltaje de a n y Rn determinada por Hodgkin y Huxley desde sus curvas experimentales se obtienepor: an= O.Ol(V+lO)/{ exp[(V+10)/10 Rn= 0.125exp(V/80) - 13 } Con ayuda de las ecuaciones (12) y (13), los valores para an y calculados para cualquier potencial. Reacomodando la ecuación (11) se obtiene: dn = a n - (an + pn)n dt Si y = a n - (an + pn)n, entonces dy/dt (14) puede ser escrita: dy/y = - ( a n + pn)dt =- (an + (13) (14) R,, pueden ser (15) pn)dn/dt, y así la ecuación (16) 5 En el estado de reposo, V=O y n tuvo un valor de reposo obtenido por: no = ano/( ano+fino). Cuando la membrana está retenida en un voltaje constante, la ecuación (15) puede ser integrada. El resultado es: In y = - ( a n + p n ) t + const. Con t=O, n=no,y así la constante de integración, queda In[an - ( a n + pn) no]. Entonces la ecuación obtenida es: (17) en substitución para y, Sustituyendo: no0 = an a n + pn ‘cn = 1 a n + pn b e la ecuación (17) se tiene: no0 - n = exp(-t / m) no0 - no O bien: 4.3 Conductanciadel sodio Ladespolarizaciónde la membrana ejerce 2 efectos, los cuales son la activación de sodio e inactivación de sodio. Para describir el resultado experimental, fueron introducidos 2 parámetros, entonces: GNa = GNam3h (23) 6 La activación del parámetro m es similar a n, existen ambos potenciales y dependen del tiempo y tienen valores desde O hasta 1. GNa es una constante igual al valor máximo de GNa. La ecuación (12) está basada en la idea de que el canal de sodio puede ser abierto por el movimiento de 3 partículas, cada una con una probabilidad m existente en el lugar correcto e inactivo por un proceso de probabilidad 1 - h , m y h se obtienen por: dm=am(l-m)-pmm (24) dt dh = dt (25) a h (I - h) - ph h La solución de estas ecuaciones que satisfacen las condiciones límite m=mo y h=ho con t = O son: (26) m = mm- (mm - mo)exp(-t / zm) h = h a - (ha - ho)exp(-t / zh) (27) Donde: ma = am am zm = + pm 1 a n + pn ha = ah a h + ph zh 1 a h + ph Además: am = 0.1(V+25) / [exp{(V+25)/10} - 13 4exp(V/18) a h = 0.07exp(V/20) p h = 1 / [exp{ (V+30)/10} pm + 11 7 4.4 Conductanciadelcalcio Ca++ es el ion más controlado en el cuerpo humano, y ha sido largamente conocido por afectar la excitabilidad del nervio y del músculo. Los iones del calcio no fueron directamente involucrados en las fórmulas de Hodgkin y Huxley, excepto en la medidaen que estosfueronintroducidosdentrodeltérminopara lasalida de la corriente.Recientemente las corrientesde Ca++ fuerondemostradosenvarios tejidos, incluyendo axones de calamar. La magnitud de la corriente varía comenzando siendo pequeña en axones de calamar hasta que es más grande que la corriente de Na+. Adiconalmente, Frankenhaeuser & Hodgkin demostraron que la concentraciónde Ca++ tiene un efectoindirectoimportante en el cambio de las curvas de activación e inactivación de las variables que predominan en los canales de Na+ y K+. 8 5. Código - de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ***** ***** Olivama Garcia Bello ***** (942 17533) ***** **x** ***** Proyecto Final ***** ***** ***** ***** ***** ................................................ ***** ***** ***** #include <stdio.h> #include <conio.h> #include <graphics.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <math.h> #include <do&> #define LimIzq 1O0 #define LimDer 500 #define LimSup 150 #define LimInf 450 //Funciones Globales void mensaje(void); int validaf(char[]); void convierte-float-cadena(float); float mayorIm(float [I); float menorIm(float [I); void opciones-graficar(void); void rect(int,int ,int ,int ,int ,int); void escribe(char *,int , int , int ,int , int ); //Variables Globales int ni, opcion[5],ver; float Ek=-46, ENa=60, ECa=60, E[ 151, t[ 151, tiempo; float Emax, Emin; char salida[ 151; float Ik[401],INa[401], ICa[401], Im[401], max,min; float mO, hO, no; int flagl, flag2, flag3; 9 I*** Este es el inicio del programa y aqui es donde **** **** se hacen las llamadas de las dem S funciones * * * I void inicio(void) { void constantes(void); void potencial(void); void coordenadas(void); void grafica-E(void); void evaluaquntos(void); void visualiza(void); void inicializa-graf(); float texto; int controlador, modo; char ans,X-Esc[ 151, Y-Esc[ 151; int x=3IO,y1=15O,y2=450, q, xaux=lOO, xaux2=500; int xl=x-l0,x2=x+lO,y=250,a,yx, Z; char w,X[ 1O] ,Y[ 1O], textochll51; inicializa-graf(); do i if(ver==O) { /*si no se visualiza la gr fica(ver-O), captura los valores*/ I / constantes(); mensaje(); potencial(); 1 /*de otra forma, s6lamente se grafica con los valores anteriores*/ opciones-graficaro; coordenadas(); grafica-E(); evaluaquntos(); setcolor(L1GHTMAGENTA); line(x,yl ,x,y2); ll x line(x 1,y,x2,y); ll y itoa(x-100,X,lO); itoa(300-y,Y,IO); /*escribe las coordenadas tanto en pixeles como en escala*/ settextstyle(DEFAULT-FONT,HORIZ-DIR, 1); setcolor(WH1TE); outtextxy(550,10,"Pixeles"); outtextxy(540,20,X); outtextxy(580,20,Y); outtextxy(550,40,"Escala"); convierte-float-cadena((x- 1OO)*tiempo/4OO); strcpy(X-Esc,salida); 10 convierte-float-cadena(max-(max-min)*(y- 160)/280); strcpy(Y-Esc,salida); outtextxy(5 18,50,XEsc); outtextxy(570,50,Y-Esc); do { ans=getch(); while(tolower(ans)!='o' && tolower(ans)!='s'&& tolower(ans)!='v' && ans!='2' && ans!='4'&& ans!='6'&& ans!='8'); while(tolower(ans)!='s' && tolower(ans)!='o'&& tolower(ans)!='v'){ if(ans=='6') { I* derecha *I if(x<LimDer) { setcolor(BLACK); /* borrar*/ line(x,yl,x,y2); line(x 1,y,x2,y); setcolor(WH1TE); /*graficar coordenadas y funciones*/ line(100,150,100,450); line( 100,300,520,300); if(x1>100) xaux=x 1; if(x2<500) xaux2=x2; /*flagx indica si ,Sta gr fica h e solicitada para graficarla, si la bandera est encendida as¡ íüe; en caso contrario no. En donde xes el no. de la gr fica.*i for(q=xaux;q<=xaux2;q++) { if(flagl==l) putpixel(q,440-280*(Ik[q-1OO]-min)i(max-min),LIGHTRED); if(flag2==1) putpixel(q,440-280*(~a[q-100]-min)/(max-min),GREEN); if(flag3==l) putpixel(q,440-280*(Im[q-1OO]-min)/(max-min),YELLOW); I X++' x 1++; x2++; I if(ans=='4') { I* izquierda *i if(x>LimIzq) { setcolor(BLACK); line(x,yl,x,y2); line(x 1,y,x2,y); setcolor(WH1TE); 11 line(100,150,100,450); line( 100,300,520,300); if(xl>lOO) xaux=x 1 ; if(x2400) xaux2=x2; for(q=xaux;q<=xaux2;q++) { if(flagl==l) putpixel(q,440-280*(Ik[q-1OO]-min)/(max-min),LIGHTRED); if(flag2==l) putpixel(q,440-280*(INa[q-100]-min)/(max-min),GREEN); if(flag3==l) putpixel(q,440-280*(Im[q-100]-min)/(max-min),YELLOW); I x". xl"; x2"; 2 I if(ans=='2'){ /* abajo */ if(y<LimInf) { setcolor(BLACK); line(x,yl,x,y2); line(x 1 ,y,x2,y); setcolor(WH1TE); line( 100,150,100,450); line( 100,300,520,300); for(q=xl ;q<=x2;q++){ if(flagl==l) putpixel(q,440-280*(Ik[q-100]-min)/(max-min),LIGHTRED); if(flag2==l) putpixel(q,440-28O*(INa[q-1OO]-min)/(max-min),GREEN); if(flag3==1) putpixel(q,440-280*(Im[q-100]-min)/(max-min),YELLOW); 1 y++; I I I I if(ans=='8'){ I* arriba *I if(y>LimSup) { setcolor(BLACK); line(x,yl,x,y2); line(x 1 ,y,x2,y); setcolor(WH1TE); 12 line(100,150,100,450); line( 100,300,520,300); for(q=x l;q<=x2;q++) { if(flagl==l) putpixel(q,44O-28O*(Ik[q-100]-min)/(max-min),LIGHTRED); if(flag2==1) putpixel(q,44O-28O*(INa[q-lOO]-min)/(max-min),GREEN); if(flag3==1) putpixel(q,440-280*(Im[q-1OO]-min)/(max-min),YELLOW); 1 J Y"; 1 for(a= 1;a<= 1O;a++) line(a*40+ 100,30O,a*40+ 100,305); /*escribe las coordenadas en escala y pixeles durante los desplazamientos que ejecuta el usuario con la regla*/ settextstyle(SMALLFONT, HORIZ-DIR, 4); for(yx=O;yx<= 1O;yx++) { texto=yx*tiempo/ 1O; convierte-float-cadena(text0); strcpy(textoch,salida); outtextxy(90+40*yx,303,textoch); i setcolor(L1GHTMAGENTA); line(x,yl,x,y2); line(x1 ,y,x2,y); itoa(x- 1OO,X, 1O); itoa(300-y,Y, 1O); setfillstyle(SOL1D-FILL, BLACK); bar(530,18,610,30): bar(5 10.48,640,60); setcolor(WH1TE); settextstyle(DEFAULT-FONT,HORIZ-DIR, 1); outtextxy(540,20,X); outtextxy(580,20,Y); convierte-float-cadena((x- 1OO)*tiempo/400); strcpy(X-Esqsalida); convierte-float-cadena(max-(max-min)*(y-160)/280); strcpy(Y-Esc,salida); outtextxy(5 18,50,X-Esc); 13 ans=getch(); I if(tolower(ans)=='o') ver=O;/*si se quiere otra gr fica, ver=0 indica que se van a capturar nuevos datos*/ j while(tolower(ans)=='o'); if(tolower(ans)=='v') /*si se quieren verlos datos que se introdujeron...*/ visualiza(); restorecrtmode0; I I* Visualiza los datos en la pantalla* I void visualiza(void) { void guardar-datos(void); char Z, ENaInt[lS], EkInt[l5], tInt[l5], EInt[l5]; int z; clearviewport(); setbkcolor(BLACK); setcolor(WH1TE); gotoxy( 1o, 1O); printf("\n\t\tENa=%5fEk= %5f', ENa,Ek); printf("\n\n\tInteralodetiempo(ms)Potencial(mv)"); for(z=O;z<ni;z++) printf("\n\tt [%6.3f,%06.3fl\t\t%06.f',t[z],t[z+l],E[z+1]); printf("\n\n\n\n\t\t<pulsa una tecla para continuar>"); /*otro men&...*/ clearviewport(); rect(O,O,getmaxx(),230,8,3); escribe("1) Nuevos datos",50,50,1,15,1); escribe("2) Ver otra vez la gr fica",50,80,1,15,1); escribe("3) Guardar los datos",50,11 O, 1,15,1); escribe("4) Salir",50,140,1,15,1); do Z=getche(): while(Z!='I' && Z!='2' && Z!='3'&& Z!='4'); 14 if(Z=='I'){ ver=O; /*introducirnuevosdatos*/ inicio(); I else if(Z=='2'){ ver=l; /*ver la gr fica con los datos anteriores*/ inicio(); I I else if(Z=='3') guardar-datos(); else { restorecrtmode(); /*finalizar*/ exit(0); /*** captura el potencial(E)en cada intervalode tiempo * * * I void potencial(void) c char R, 1t [ 1S], E 1[ 151, Emax, Emaxaux; flagl=O; flag2=0; flag3=0; opcion[O]=O; ni=O; t[O]=O; escribe("1ntroduca el potencial en cada intervalo detiempo.",140,135,0,15,1); escribe("Cada vez que se introduzca un par metro, debe pulsar ENTER.", 140,155,0,15,1); escribe(" Intervalo de tiempo",185,180,0,15,1); do I if(tolower(R)=='s') { setfillstyle(SOLIDFILL,BLACK); bar( 180,246,400,265); //borra el tiempo bar(265,192,500,208); //borra el potencial bar(290,22 1,500,242); //borra la pregunta o aviso I gotoxy(46,12); printf("t[%f,t%d]:",t[ni],ni+l); do { do { gotoxy(30,13); printf("t%d = ' I , ni+l); scanf("%s",&tl); if(validaf(tl)!=l){ gotoxy(30,13); setfillstyle(SOL1D-FILL,BLACK); bar(265,192,500,208); 15 j while(validaf(tl)!=l); t[ni+l]=atof(tl); if(t[ni+ l]<=t[ni]) { /* valida los intervalos */ //printf("\tNo es v lido el intervalo!, intenta nuevamente"); escribe("No es v lido elintervalo!!, pulsa cualquier tecla para intentarlo nuevamente",15,250,0,15,1); bar(265,192,500,208); getch0; bar( 10,24O,getmaxx()-2,265); //borra la pregunta o aviso 1 j while(t[ni+l]<=t[ni]); gotoxy(30,15); printf("E(mv) = ); scanf("%s",&E1); if(validaf(El)!=l){ gotoxy(30,15); setfilIstyle(SOL1D-FILL,BLACK); bar(290,22 1,500,242); I 1 while(validaf(El)!=l); E[ni+l]=atof(El); ni++; tiempo=t[ni]; /*tiempo contiene el tiempo m ximo*/ escribe("0tro intervalo'? (sin)", 185,250,0,15,1); do I R=getche(); if(tolower(R)!='s'&&tolower(R)!='n'){ gotoxy(30,17); printf(" "); j *I while(tolower(R)!='s'&& tolower(R)!='n'); /* 1 while(tolower(R)=='s'); void opciones-graficar(void) 1 char gft. opcaux: mensaje(); flag 1=O; flag2=0; flag3=0; opcion[O]=O; 16 escribe("Para elegir las opciones se tiene que introducir", 150,140,0,15,1); escribe("1os numeros correspondientes a dicha opcion", 150,160,0,15,1); escribe("Opciones:",160,195,0,15,1); escribe("(1)Graficar Ik",160,220,0,15,1); escribe("(2)Graficar INa", 160,240,0,15,1); escribe("(3)Graficar Im", 160,260,0,15,1); escribe("(4)Finalizar", 160,280,0,15,1); do { //captura las opciones a graficar (1,2 o 3) do I opcaux=getch(); ~while(opcaux!='l'&&opcaux!='2'&&opcaux!='3'&&opcaux!='4'); if(opcaux==' 1') { flagl=l; escribe("",300,220,0,15,1); I if(opcaux=='2') { flag2= 1; escribe("",300,240,0,15,1); I if(opcaux=='3') { flag3= 1; escribe("",300,260,0,15,1); I 1while(opcaux!='4'); opcion[O]=O; opcion[ l]=flag1; opcion[2]=flag2; opcion[3]=flag3; ! I* grafica los ejes * * I void coordenadas0 i int a,b,d,x,y,time2; char cad[151, textoch[ 151; float minimo-E(void), maximo-E(void), Emax, Emin, texto; clearviewport(); setbkcolor(BLACK); rectangle(O,O,getmaxx(),getmaxy()); setfillstyle(0,DARKGRAY); setcolor(WH1TE); I* coordenadas para E * I 17 line(100,10,100,130); for(d=O;d<=4;d++) { line(95,30+20*d,100,30+20*d); I /* coordenadas para Im *I line(l00,150,100,450); line( 100,30O,S20,300); for(a= 1;a<= 1O;a++) line(a*40+100,300,a*40+100,305); for(b=l;b<=15;b++) line(95,20*b+140,100,20*b+140); outtextxy(530,140,"<s>"); outtextxy(530,150,"salir"); outtextxy(530,170,"<0>"); outtextxy(530,180,"nuevos datos"); outtextxy(S30,200,"<v>"); outtextxy(530,2 10,"visualizar"); outtextxy(530,220,"los datos"); /** letras para E **I settextstyle(SMALLFONT, HORIZ-DIR, 4); Emax=maximo-E(); Emin=minimo-E(): if(ni> 1 for(x=O;x<=4;x++){ texto=Emax-x*(Emax-Emin)/4; convierte-float-cadena(text0); strcpy(textoch,salida); outtextxy(35,26+20*x,textoch); I I else{ convierte-float-cadena(E[ 11); strcpy(textoch,salida); outtextxy(35,66,textoch); I /* letras para Im */ settextstyle(SMALLFONT, HORIZ-DIR, 4); for(y=O;y<= IO;y++) { texto=y*tiempo/lO; convierte-float-cadena(text0); strcpy(textoch,salida); outtextxy(90+40*y,303,textoch); I setfillstyle(SOLID_FILL. LIGHTRED); bar(590, 350, 605,360): setfillstyle(SOL1D-FILL, GREEN); bar(590, 390, 605,400); setfillstyle(SOL1D-FILL, YELLOW); bar(590,430,605,440); 18 settextstyle(DEFAULT-FONT,HORIZ-DIR, 1); outtextxy(560,350,"Ik"); outtextxy(560,390,"INa"); outtextxy(560,430,"Im"); settextstyle(SMALL-FONT, HORIZ-DIR, 4); outtextxy(550,303,"tiempo(mv)"); /** grafica el potencial(E) **/ void grafica-E(void) { int j ; float tauxl , taux2, Eauxil; setcolor(L1GHTCYAN); if(ni>l) for(j= 1;j<=ni; j++) { /*ni=n&mero de intervalos*/ tauxl=tlj-11; taux2=tb]; Eauxil=80*(Elj]-Emin)/(Emax-Emin); line(tauxl*40/(tiempo/l0)+100,11O-Eauxil,taux2*40/(tiempo/10)+99,11O-Eauxil); I I else line( 100,70,500,70); /* evalua cada puntopara Ik,INa e Im y calcula los datos m ximo y minim0 obtenidos */ void evaluaquntos(void) 1 void escribe-coordenadas-Imy(float,float); void grafica-I(void); float intervalo-E(float); float gk,gNa,Eaux; float Ikmax,INamax,Immax,Ikmin,INamin,Immin; float Gk(float, float); float GNa(float, float); void valores(void); float amo, BmO, ahO, BhO, ano, BnO; int k; int mOaux, hOaux, n0aux; Eaux=E[ l]/l000.0000; !* randomize(); mOaux= rand() %' O 100; mO= mOaux/100.00000; hOaux= rand() % 100; hO= h0aux/lOO.OOOOO; 19 nOaux= rand() YO100; nO= n0aux1100.00000; *I /x*********************************/ mO=O.8; hO=0.9; nO= 1.O; ................................... for(k=O;k<=4OO;k++) { Eaux=intervalo-E(k); gk = Gk(Eauxl1OOO,k*tiempol4OO);/lvolts Ik[k]=gk*(Eaux-Ek); gNa = GNa(Eaux/1OOO,k*tiempol4OO);llvolts INa[k]=gNa*(Eaux-ENa); gCa = GCa(Eauxl1OOO,k*tiempo/4OO);//volts ICa[k]=gCa*(Eaux-ECa); Im[k]=Ik[k]+INa[k]+ICa[k]; I Ik[401]='\0'; INa[401]='\O'; ICa[401]='\O'; Im[401]='\0'; Ikmax=mayor-Im(1k); Ikmin=menorIm(Ik); INamax=mayor-Im(1Na); INamin=menor-Im(1Na); Immax=mayor-Im(1m); Immin=menor-Im(1m); max=Ikmax; if(INamax>max) max=INamax; if(Immax>max) max=Immax; min=Ikmin; if(INamin<min) min=INamin; if(Immin<min) min=Immin: escribe-coordenadas-Imy(min,max); grafica-I(); 20 /****** Calcula la conductancia del Potasio ************I float Gk(float V, floatT) .r float an, Bn, n8,tn, n, GkAux, GkMax=36; T=T/ 1000; an = 0.01*(V+10)/(exp((V+10)/10)-1); Bn = 0.125*exp(VI80); n8 = an/(an+Bn); tn = l/(an+Bn); n = n8-(n8-nO)*exp(-T/tn); GkAux = GkMax*pow(n,4); return(GkAux); **********/ Calcula la conductancia del Sodio float GNa(float V, float T) I******** { float am, Bm, ah, Bh, m8, tm, h8,th; float m, h, GNaAux, GNaMax= 120; T=T/ 1000; am = 0.1*(V+0.25) / ( exp((V+25)/10) - I ) ; Bm = 4*exp(V/18); ah = 0.07*exp(V/20); Bh = 1/( exp((V+30)/10) +l); m8 = am/(am+Bm); tm = l/(am+Bm); h8 = ah/(ah+Bh); th = l/(ah+Bh); m = m8 - (m8-mO)*exp(-T/tm); h = h8 - (h8-hO)*exp(-T/th): GNaAux = GNaMax*pow(m,3)*h: return(GNaAux); /****** Calcula la conductancia del Calcio float Gk(float V, float T) ************/ { float an, Bn, n8, tn, n, GCaAux, GCaMax=36; T=T/ 1000: 21 am = O. 1*(V+0.25) / ( exp((V+25)110) - I ) ; Bm = 4*exp(V/18); ah = 0.07*exp(V/20); Bh = I/( exp((V+30)/10) +l); m8 = am/(am+Bm); tm = l/(am+Bm); h8 = ah/(ah+Bh); th = l/(ah+Bh); m = m8 - (m8-mO)*exp(-T/tm); h = h8 - (h8-hO)*exp(-T/th); GNaAux = GNaMax*pow(m,3)*h; return(GNaAux); I ..................................................... /* escribe los valores de Im en eleje de las y's, */ void escribe-coordenadas-Imy(float min,float max) i int x; float texto; char textoch[151; setcolor(WH1TE); settextstyle(SMALL-FONT,HORIZ-DIR, 4); for(x=O;x<=14;x++){ texto=max-x*(max-min)i14: convierte-float-cadena(text0); strcpy(textoch,salida); outtextxy(33,150+20*x,textoch): I /* dibuja las gr ficas solicitadas *Í void graficaI(void) { int h,graf; float Baux; delay( 1000); /*en opci$n est n almacenados los ngmeros de las gr ficas a dibujar*Í if(opcion[ I]==1) { /*graficar Ik*/ for(h=O;h<=40O;h++){ Baux=440-280*(Ik[h]-min)/(max-min); putpixel(h+ lOO,Baux,LIGHTRED); delay(2); 1 delay(200); 22 if(opcion[2]==1){ /*graficar INa*/ for(h=O;h<=400;h++){ Baux=(INa[h]-min)/(max-min); putpixel(h+l00,440-280*Baux,GFEEN); delay(2); I delay(200); if(opcion[3]== 1) { /*graficar Im*/ for(h=O;h<=40O;h++) { Baux=(Im[h]-min)/(max-min); putpixel(h+l00,440-280*Baux,YELLOW); delay(2); I delay(200); i delay( 1O); I* devuelve elpotencial(E) para el valor determinado de tiempo(t) (ya a escala) */ float intervalo-E(float tiemp) { int inter; float valor-E; for(inter= 1;inter<=ni;inter++) { if(tiemp<=400*t[inter]/tiempo && tiemp>400*t[inter-l]/tiernpo) valor-E=E[inter]; return(va1or-E); I /* calcula el valor mayor de E */ float maximo-E(void) i int k; Emax=E[ 11; for(k=2;k<=ni;k++) if(E[k]>Emax) Emax=E[k]; return(Emax); I /* calcula el valor menor de E */ 23 float minimo-E(void) í int k; Emin=E[ 11; for(k=2;k<=ni;k++) if(E[k]<Emin) Emin=E[k]; retum(Emin); i I* devuelve los valores mayores y menores para graficar Im*/ float mayor-Im(float 1[401]) I 1 int r; float mayor; mayol-I[O]; for(r= 1;r<=400;r++) if(I[r]>mayor) mayor=I[r]; return(mayor); I float menor-Im(float 1[401]) I int r; float menor: menor=I[O]; for(r==1;r<=400;r++) if(I[r]cmenor) menor-I[r]; retum(menor); i I** convierte un flotante en cadena para poder escribirlo en las coordenadas **I void convierte-floatcadena(float cade) í sprintf(salida,”%.2f”,cade); I I* valida que sea un flotante bien escrito *I int validaf(char 4 1S ] ) f int i,A,punto=O; 24 if(flO]=='-') A= 1; else A=O; for(i=A;i<strlen(f);i++) { if(!isdigit(qi])){ if(fli]=='.') punto++; else return(0); I J I if(punto>l)return(0); return( 1); I******* Inicializa el modo gr fico * * * * * * * * I void inicializa-graf(void) i int controlador, modo; controlador=DETECT; modo=O; initgraph(&controlador, &modo, ""); I I***** Guarda los datos en un archivo ******I void guardar-datos(void) int B; char an, nombre[30]; FILE *pa; clearviewport(); setbkcolor(RED); mensaje(): escribe(" Nombre del archivo:", 185,180,0,15,1); gotoxy(30,13); scanf("%s",&nombre); if((pa=fopen(nombre,"w"))==NULL) { gotoxy(30,15); printf("no se puede abrir el archivo\n"); exit( 1); I fprintf(pa,"\n\tENa= %f Ek= %fln\n",ENa, Ek); for(B= 1;B<=ni;B++) { fprintf(pa,"\n\tt[%.4f,%.4fl \t E=%.4f",t[B-l],t[B],E[B]); 25 I fclose(pa); escribe("1) Volver al men& anterior",l85.225,0,15,1); escribe("2)Salir",l85,253,0,15,1): an=getche(); if( an==' 1I ) visualiza(); else { restorecrtmode(); exit(2); I I*********** Dibuja las ventanas gr ficas **************/ void rect(int x1,int y1,int x2,int y2,int modelo,int color) i rectangle(x 1,y1 ,x2,y2); setfillstyle(modelo,color); floodfill(xl+l,yl+l,l5); !*********** Escribe el texto en modo gr fico ***********I void escribe(char *texto,int x, int y, int tipoletjnt colorlet, int tamanolet) { setcolor(color1et); settextstyle(tipolet,O,tamanolet); outtextxy(x,y,texto); i void mensaje(void) 1 clearviewport(); rect(O,O,getmaxx(),getmaxy(),8,3); /*crea la primerapantalla*/ setcolor( 15); line(O,O,O,getmaxy()); line(O,O,getmaxx(),O); line(getmaxx(),O,getmaxx(),getmaxy()); line(O,getmaxy(),getmaxx(),getmaxy()); rect(0,120,getmaxx(),300,1,0); 1/100,525 return: ! 26 6. Fórmulas Carga q = CE Corriente I = GE Corriente para ion un j Ij = Gj (E Corriente debida a todos los iones I = CjIj Corriente debida a los iones de potasio fk Corriente debida a 10s iones de sodio INa Corriente total de la membrana 1= = Gk (E = GNa - Ej) - Ek) (E - I k + INa + ENa) I,,+ IL Conductancia del potasio Gk = Gkn4 Conductancia del sodio &a = GNa m3h 27 7. Bibliografía 8 * e Douglas Junge Nerve and Muscle Excitation Second Edition Jane Croin Mathematics of cell elctrophysiology De. Board Richard B. Stein Nerve and Muscle (Membranes, Cells and Systems) D.C.S. White & John Thorson The Kinetics o f Muscle Contraction D. R, WiIkie Muscle.Second Edition Ed. Board 28