Aprenda Matlab 6.1 - Universidad Politécnica de Madrid
Aprenda Matlab 6.1 - Universidad Politécnica de Madrid
Aprenda Matlab 6.1 - Universidad Politécnica de Madrid
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Aprenda</strong> <strong>Matlab</strong> <strong>6.1</strong> como si estuviera en Primero página 84<br />
Por otra parte, el fichero tiropar3.m que evalúa la ecuación diferencial es el siguiente:<br />
1. function dy=tiropar3(t,y,m,c) % version vectorizada<br />
2. fac=-c*sqrt(y(1,:).^2+y(2,:).^2);<br />
3. dy=zeros(size(y));<br />
4. dy(1,:)=fac.*y(1,:);<br />
5. dy(2,:)=fac.*y(2,:)-9.8*m;<br />
6. dy(3,:)=y(1,:);<br />
7. dy(4,:)=y(2,:);<br />
Sobre las funciones <strong>de</strong>finidas en el fichero tiropar3Main.m se pue<strong>de</strong>n hacer los siguientes<br />
comentarios:<br />
1. El programa se ha <strong>de</strong>finido como función (línea 2) y no como fichero <strong>de</strong> comandos. La razón<br />
es para po<strong>de</strong>r utilizar sub-funciones (funciones <strong>de</strong>finidas en el mismo fichero), que no están<br />
permitidas en los ficheros <strong>de</strong> comandos.<br />
2. Las condiciones iniciales (línea 7) se parecen a las <strong>de</strong> los ejemplos anteriores, pero el<br />
movimiento comienza con una or<strong>de</strong>nada negativa (por <strong>de</strong>bajo <strong>de</strong>l origen). Este hecho se<br />
utilizará en relación con los eventos.<br />
3. Las ecuaciones diferencias se suponen en la forma <strong>de</strong> la ecuación (14) ( M(, t yy )& = f(, t y)<br />
),<br />
que permite proporcionar más información al integrador. En la línea 9 se <strong>de</strong>fine una matriz<br />
dispersa con "unos" en las posiciones correspondientes a los términos distintos <strong>de</strong> cero <strong>de</strong> la<br />
matriz Jacobiana <strong>de</strong>l segundo miembro, esto es, a las <strong>de</strong>rivadas distintas <strong>de</strong> cero <strong>de</strong>l vector<br />
f(t,y) respecto al vector y. El integrador o<strong>de</strong>15s va a calcular dichas <strong>de</strong>rivadas numéricamente<br />
y la información contenida en la matriz Jp le permite ahorrar mucho trabajo.<br />
4. La estructura options, <strong>de</strong>finida en las líneas 10-12, tiene una gran importancia pues controla<br />
los aspectos fundamentales <strong>de</strong> la integración. Como ya se ha dicho, sus valores se establecen<br />
en la forma <strong>de</strong> parejas parámetro/valor. Los primeros argumentos son los valores <strong>de</strong> las<br />
tolerancias <strong>de</strong> error relativo y absoluto, ya comentados previamente. A continuación se<br />
comentan las restantes opciones. En los nombres <strong>de</strong> los parámetros no se distingue entre<br />
mayúsculas y minúsculas y no hace falta escribirlos con todas las letras: basta poner<br />
suficientes letras para evitar la ambigüedad en el nombre. Por ejemplo, MStateDep y mstate<br />
serán consi<strong>de</strong>rados como equivalentes. Es conveniente sin embargo que la elección <strong>de</strong> estos<br />
nombres no afecte a la legibilidad <strong>de</strong>l código.<br />
5. La tercera pareja <strong>de</strong> argumentos <strong>de</strong> options <strong>de</strong>clara que la matriz <strong>de</strong> masas (parámetro Mass)<br />
es <strong>de</strong>finida por la función tiropar3Masa, cuya referencia se da como valor. Otra posibilidad,<br />
cuando la matriz <strong>de</strong> masas es constante, es calcular previamente su valor e incluir el nombre<br />
<strong>de</strong> la variable como valor <strong>de</strong> este argumento. La línea 11 incluye el argumento MStateDep,<br />
también relacionado con la matriz <strong>de</strong> masas, que establece el tipo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong> dicha<br />
matriz respecto al vector <strong>de</strong> estado y. Sus posibles valores son none, weak y strong. Otro<br />
argumento relacionados con la matriz <strong>de</strong> masas, no utilizado en este ejemplo, es MvPattern,<br />
cuyo valor <strong>de</strong>be ser una matriz sparse análoga a Jp, utilizada para <strong>de</strong>finir los elementos<br />
distintos <strong>de</strong> cero <strong>de</strong> la matriz <strong>de</strong> masas (su sparsity pattern).<br />
6. El parámetro OutputFcn permite al usuario controlar la salida <strong>de</strong> resultados a medida que se<br />
van haciendo los cálculos y no solamente al final. El valor <strong>de</strong> este parámetro es una referencia<br />
<strong>de</strong> función (tiropar3Salida) que será llamada por el integrador varias veces a lo largo <strong>de</strong> la<br />
integración. MATLAB dispone <strong>de</strong> cuatro funciones <strong>de</strong> salida preprogramadas (o<strong>de</strong>plot,<br />
o<strong>de</strong>phas2, o<strong>de</strong>phas3 y o<strong>de</strong>print) que pue<strong>de</strong>n ser utilizadas sin más que pasar como valor una<br />
referencia a ellas. En este caso se ha programado una función <strong>de</strong> salida llamada<br />
tiropar3Salida que está <strong>de</strong>finida a partir <strong>de</strong> la línea 33. Esta función se llama al inicio <strong>de</strong> la<br />
integración, en cada instante <strong>de</strong> salida <strong>de</strong> resultados y al terminar la integración. El parámetro