|
Estados transitorios de un circuitoEn el siguiente circuito el interruptor sigue la siguiente secuencia: 1, 2, 3, 2, 1, 2,... En cada estado está durante 10 ms. El condensador está inicialmente descargadoSegún recorre esta secuencia, el condensador se irá cargando ( puntos 1 y 2 ) y descargando ( punto 3).Se trata de dibujar la gráfica de la tensión en el condensador, Vc( t ). También define una función que genere una lista con la tensión del condensador al final de cada una de las cuatro etapas que tiene cada ciclo. Esta función tomará por argumento la tensión que tenía el condensador antes de empezar la primera etapa. Es decir: Vc(0) -> { Vc[ 1 ] , Vc[ 2 ] , Vc[ 3 ], Vc[ 4 ] } Nota: La ecuación de la carga de un condensador es la siguiente: Utiliza el sistema coherente de unidades: { V , mA , Kohm , uF , ms } Solución:Primero vamos a definir tres funciones una para cada estado del interruptor. Las llamaremos f1, f2, f3 , y tomarán como argumento la tensión que tenía el condensador al principio de esa etapa, y el tiempo :
La función 'f' que ahora defino, contiene un punto y coma ' ; '. Esto sirve para concatenar comandos. Además cuendo una expresión lleva un ' ; ' al final, entonces no se devuelve ningún resultado, aunque sí que se calculan. En nuestro caso es necesario usar los paréntesis para que Mathematica lo entienda todo como parte de la función. La variable k se asigna inicialmente a la tensión inicial. Después, en la primera
posición de la lista, se le reasigna el valor final de la primera etapa de este ciclo. In[1]:= f[v0_]:= ( k=v0;N[{k=f1[k, 10], k=f2[k, 10],
k=f3[k, 10], k=f2[k, 10]}] ) In[2]:= f[0] Out[2]={3.93469, 5.65402, 4.62912, 6.1516} In[3]:= f[6.1516] Out[3]={7.66583, 8.32749, 6.81797, 7.71998} Puedes evitarte hacer este trabajo a mano si el argumento en vez de ser una la tensión inicial, es el último elemento de una lista de 4 objetos: Definimos así 'g': In[4]:= g[v0_]:=( k=v0[[4]]; N[{k=f1[k, 10], k=f2[k,
10], k=f3[k, 10], k=f2[k, 10]}]) In[5]:= g[{0, 0, 0, 0}] Out[5]={3.93469, 5.65402, 4.62912, 6.1516} Así obtendríamos la tercera etapa: In[6]:=
g[g[g[{0, 0, 0, 0}]]] Out[6]={8.6171, 9.00911, 7.37603, 8.11985} Existe un comando que simplifica este trabajo muchísimo: Nest[ f, argumento inicial, n ] Este comando aplica la función f al primer argumento, lo que produce un resultado. Después vuelve a aplicar f a este primer resultado, lo que produce otro, y así sucesivamente. Esta función la aplica n veces: In[7]:= Nest[g, {0, 0, 0, 0}, 3] Out[7]={8.6171, 9.00911, 7.37603, 8.11985} Hay un comando asociado a Nest: NestList. Este comando hace exactamente lo mismo que Nest, pero devuelve como resultado todas las etapas por las que ha pasado: In[8]:= NestList[g, {0, 0, 0, 0}, 3] Out[8]={{0, 0, 0, 0}, {3.93469, 5.65402, 4.62912, 6.1516}, {7.66582, 8.32749, 6.81797, 7.71998}, {8.6171, 9.00911, 7.37603, 8.11985}} In[9]:= NestList[g, {0, 0, 0, 0}, 12] Out[9]={{0, 0, 0, 0}, {3.93469, 5.65402, 4.62912, 6.1516}, {7.66582, 8.32749, 6.81797, 7.71998}, {8.6171, 9.00911, 7.37603, 8.11985}, {8.85963, 9.18289, 7.51831, 8.22179}, {8.92146, 9.22719, 7.55459, 8.24779}, {8.93723, 9.23849, 7.56384, 8.25441}, {8.94125, 9.24137, 7.56619, 8.2561}, {8.94227, 9.24211, 7.5668, 8.25653}, {8.94253, 9.24229, 7.56695, 8.25664}, {8.9426, 9.24234, 7.56699, 8.25667}, {8.94262, 9.24235, 7.567, 8.25668}, {8.94262, 9.24236, 7.567, 8.25668}} In[10]:= TableForm[%] Out[10]//TableForm= Como se puede ver, a partir de la octava etapa , ya no hay modificaciones sustanciales en los valores finales de la tensión del condensador para cada estado. Ahora vamos a dibujar por separado estas funciones, cada una en el intervalo que le corresponda y las almacenamos en variables ( indexadas, porque no usan ' _ ' ). Después utilizaremos ' Show ' para ver todas en un mismo gráfico. En todas estas sentencias ' k ' representa el valor inicial de Vc en cada etapa. Por eso tiene que ir variando en cada una de ellas. El comando ' Do ' sirve para hacer bucles: Do[ Expresiones , {i , i0, i1, istep} ] Esto repite las expresiones mientras va cambiando el iterador ' i '. In[11]:= k=0; Do[graf[i]=Plot[f1[k,t-i],{t,i,i+10}];k=f1[k,10]; graf[i+10]=Plot[f2[k,t-i-10],{t,i+10,i+20}];k=f2[k,10]; graf[i+20]=Plot[f3[k,t-i-20],{t,i+20,i+30}];k=f3[k,10]; graf[i+30]=Plot[f2[k,t-i-30],{t,i+30,i+40}];k=f2[k,10];,{i,0,240,40}]
In[12]:= completo = Table [graf[i], {i,0, 240, 10}] Out[12]={ - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , -Graphics - , - Graphics -, - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , -Graphics - , - Graphics - , - Graphics -, - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics - , - Graphics -} In[13]:= Show[completo, PlotRange -> All] Out[2]=- Graphics - Aqui ya vemos como se han estabilizado en 150 ms. los valores transitorios de cada etapa. |
|