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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Capítulo 6: Programación <strong>de</strong> MATLAB página 85<br />
OutputSel permite <strong>de</strong>finir los elementos <strong>de</strong>l vector <strong>de</strong> estado en los que se está interesado. En<br />
este caso se le han pasado como valor el vector [3, 4], lo que hará que la función <strong>de</strong> salida<br />
reciba las posiciones y no las velocida<strong>de</strong>s (que están al comienzo <strong>de</strong>l vector <strong>de</strong> estado).<br />
7. La Jacobiana <strong>de</strong> la función f(t,y) respecto al vector y tiene una gran importancia, sobre todo<br />
en problemas stiff. El usuario pue<strong>de</strong> proporcionar una Jacobiana al integrador, pero si no lo<br />
hace éste la calcula numéricamente. El usuario pue<strong>de</strong> proporcionar una referencia <strong>de</strong> función<br />
que calcule una Jacobiana analíticamente (<strong>de</strong> modo exacto o aproximado) por medio <strong>de</strong>l<br />
parámetro Jacobian. Cuando no se utiliza este parámetro, el integrador calcula la Jacobiana<br />
numéricamente y también en este caso el programador pue<strong>de</strong> ayudar a acelerar mucho los<br />
cálculos. El parámetro JPattern, ya comentado previamente, permite indicar al integrador qué<br />
elementos <strong>de</strong> la Jacobiana son distintos <strong>de</strong> cero. A<strong>de</strong>más, como una Jacobiana contiene n 2<br />
<strong>de</strong>rivadas parciales y cada <strong>de</strong>rivada se calcula a partir <strong>de</strong> la diferencia entre dos evaluaciones<br />
<strong>de</strong> f(t,y), este cálculo pue<strong>de</strong> ser muy costoso para valores gran<strong>de</strong>s <strong>de</strong> n. El parámetro JPattern<br />
permite reducir el cálculo <strong>de</strong> <strong>de</strong>rivadas numéricas. A<strong>de</strong>más, el parámetro Vectorized permite<br />
realizar este cálculo mucho más rápidamente utilizando las capacida<strong>de</strong>s vectoriales <strong>de</strong><br />
MATLAB; sus posibles valores son on y off. Más a<strong>de</strong>lante se verá cómo se ha vectorizado en<br />
este ejemplo la función tiropar.<br />
8. El penúltimo parámetro que aparece en la estructura options es Events. Este parámetro pue<strong>de</strong><br />
tener una gran importancia en simulación. En este contexto, se llaman eventos a todas<br />
aquellas circunstancias que pue<strong>de</strong>n suce<strong>de</strong>r a lo largo <strong>de</strong> la simulación y que cambian su<br />
naturaleza u obligan a tomar una <strong>de</strong>cisión. Si se está simulando el movimiento <strong>de</strong> un vehículo<br />
todo terreno, cada vez que las ruedas pier<strong>de</strong>n o vuelven a tomar contacto con el suelo se<br />
produce un cambio en el sistema a simular, pues se eliminan o aña<strong>de</strong>n ecuaciones y grados <strong>de</strong><br />
libertad. Los eventos <strong>de</strong> MATLAB permiten <strong>de</strong>tectar semi-automáticamente estas situaciones<br />
y tomar las medidas a<strong>de</strong>cuadas. En el ejemplo <strong>de</strong> tiro parabólico que se está consi<strong>de</strong>rando el<br />
único evento que se va a consi<strong>de</strong>rar es que el proyectil llegue al suelo, es <strong>de</strong>cir, que su<br />
coor<strong>de</strong>nada y se anule (se supone que el suelo es la superficie y=0). El valor <strong>de</strong>l parámetro<br />
Events es la referencia <strong>de</strong> la función <strong>de</strong> usuario que se ocupará <strong>de</strong> gestionarlos.<br />
9. El último parámetro <strong>de</strong> options es Stats, que cuando está en on hace que el integrador calcule<br />
e imprima las estadísticas sobre el trabajo que ha sido necesario en la integración.<br />
10. La línea 13 contiene la llamada al integrador, en este caso a la función o<strong>de</strong>15s. La línea 15<br />
muestra −comentada, para que no se ejecute− una forma alternativa <strong>de</strong> realizar esta llamada.<br />
En el primer caso, que es una novedad <strong>de</strong> la versión 6.0 <strong>de</strong> MATLAB, el integrador entrega<br />
todos los resultados como campos <strong>de</strong> una estructura, que en este caso se ha llamado sol. El<br />
listado <strong>de</strong>l programa indica los significados <strong>de</strong> los campos más importantes: sol.x es un vector<br />
con los tiempos en los que se <strong>de</strong>vuelven resultados y sol.y es una matriz cuyas filas son los<br />
resultados correspondientes. Si están activados los eventos hay tres campos adicionales xe, ye<br />
e ie, que representan respectivamente los instantes <strong>de</strong> tiempo en que se han producido los<br />
eventos, los valores <strong>de</strong>l vector <strong>de</strong> estado en esos instantes <strong>de</strong> tiempo, y el evento concreto<br />
(pue<strong>de</strong>n controlarse varios eventos diferentes) que se ha producido en cada uno <strong>de</strong> esos<br />
instantes.<br />
11. Tanto en la línea 13 como en la 15 aparecen <strong>de</strong>trás <strong>de</strong> options dos argumentos adicionales<br />
que representan la masa m y el amortiguamiento c. Todos los argumentos que aparezcan<br />
<strong>de</strong>trás <strong>de</strong> options son siempre consi<strong>de</strong>rados argumentos adicionales por el integrador, que se<br />
limita a recogerlos y pasárselos a todas las funciones <strong>de</strong> usuario tales como tiropar3,<br />
tiropar3Masa, etc. El integrador es un mero transmisor <strong>de</strong> argumentos entre el programa<br />
principal y las restantes funciones <strong>de</strong> usuario. Es muy importante que todas las funciones <strong>de</strong>