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.
Capítulo 6: Programación <strong>de</strong> MATLAB página 79<br />
En cualquier caso, es importante observar que para calcular las raíces o los valores mínimos<br />
<strong>de</strong> una función, hay que pasar el nombre <strong>de</strong> esta función como argumento a la función <strong>de</strong> MATLAB<br />
que va a hacer los cálculos. En esto consiste el concepto <strong>de</strong> función <strong>de</strong> función.<br />
MATLAB tiene un toolbox o paquete especial (que <strong>de</strong>be ser adquirido aparte)) con muchas<br />
más funciones orientadas a la optimización, es <strong>de</strong>cir al cálculo <strong>de</strong> valores mínimos <strong>de</strong> funciones,<br />
con o sin restricciones.<br />
6.9.3. INTEGRACIÓN NUMÉRICA DE ECUACIONES DIFERENCIALES ORDINARIAS<br />
Este es otro campo en el que las capacida<strong>de</strong>s <strong>de</strong> MATLAB pue<strong>de</strong>n resultar <strong>de</strong> gran utilidad a los<br />
ingenieros o futuros ingenieros interesados en la simulación. MATLAB es capaz <strong>de</strong> calcular la<br />
evolución en el tiempo <strong>de</strong> sistemas <strong>de</strong> ecuaciones diferenciales ordinarias <strong>de</strong> primer or<strong>de</strong>n, lineales<br />
y no lineales. Por el momento se supondrá que las ecuaciones diferenciales se pue<strong>de</strong>n escribir en la<br />
forma:<br />
( )<br />
y& = f y,<br />
t (7)<br />
don<strong>de</strong> t es la variable escalar, y tanto y como su <strong>de</strong>rivada son vectores. Un ejemplo típico pue<strong>de</strong> ser<br />
el tiro parabólico, consi<strong>de</strong>rando una resistencia <strong>de</strong>l aire proporcional al cuadrado <strong>de</strong> la velocidad.<br />
Se supone que dicha fuerza respon<strong>de</strong> a la expresión vectorial:<br />
⎧F<br />
⎨<br />
⎩<br />
F<br />
x<br />
y<br />
⎫<br />
x<br />
⎬ c ( x y )<br />
⎭ = − + ⎧ & ⎫<br />
2 2<br />
& & ⎨⎩ ⎬⎭<br />
y&<br />
don<strong>de</strong> c es una constante conocida. Las ecuaciones diferenciales <strong>de</strong>l movimiento serán:<br />
&& x<br />
&& y<br />
0<br />
2 2<br />
c<br />
( & & )<br />
m x y x<br />
y&<br />
= - +<br />
- g<br />
pero éste es un sistema <strong>de</strong> 2 ecuaciones diferenciales <strong>de</strong> or<strong>de</strong>n 2. Para po<strong>de</strong>rlo integrar <strong>de</strong>be tener la<br />
forma <strong>de</strong>l sistema (7), y para ello se va a trasformar en 4 ecuaciones <strong>de</strong> primer or<strong>de</strong>n, <strong>de</strong> la forma<br />
siguiente:<br />
&<br />
(8)<br />
(9)<br />
u&<br />
v&<br />
x&<br />
y&<br />
0<br />
g<br />
= - - +<br />
u<br />
u<br />
c<br />
( )<br />
m u v v<br />
2 2<br />
0<br />
v<br />
0<br />
(10)<br />
MATLAB dispone <strong>de</strong> varias funciones para integrar sistemas <strong>de</strong> ecuaciones diferenciales<br />
ordinarias <strong>de</strong> primer or<strong>de</strong>n, entre ellas o<strong>de</strong>23, que utiliza el método <strong>de</strong> Runge-Kutta <strong>de</strong><br />
segundo/tercer or<strong>de</strong>n, y o<strong>de</strong>45, que utiliza el método <strong>de</strong> Runge-Kutta-Fehlberg <strong>de</strong> cuarto/quinto<br />
or<strong>de</strong>n. Ambas exigen al usuario escribir una función que calcule las <strong>de</strong>rivadas a partir <strong>de</strong>l vector <strong>de</strong><br />
variables, en la forma indicada por la ecuación (7).<br />
Cree con el Editor/Debugger un fichero llamado tiropar.m que contenga las siguientes líneas:<br />
function <strong>de</strong>riv=tiropar(t,y)<br />
fac=-(0.001/1.0)*sqrt((y(1)^2+y(2)^2));<br />
<strong>de</strong>riv=zeros(4,1);<br />
<strong>de</strong>riv(1)=fac*y(1);<br />
<strong>de</strong>riv(2)=fac*y(2)-9.8;<br />
<strong>de</strong>riv(3)=y(1);<br />
<strong>de</strong>riv(4)=y(2);