08.11.2014 Views

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

SHOW MORE
SHOW LESS

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>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!