Está en la página 1de 335

Universidad Complutense de Madrid Laboratorio de Computaci on Cient ca

Juan Jim enez

ua

Bo

rr

ad o

r,j

n. ji m en ez @
29 de octubre de 2012

.u cm .es

2 Copyright 2012 Juan Jim enez. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License. Copyright 2012 Juan Jim enez. Se concede permiso para copiar, distribuir y/o modicar este documento bajo los t erminos de la Licencia de Documentaci on Libre de GNU, Versi on 1.3 o cualquier otra versi on posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la licencia est a incluida en la secci on titulada GNU Free Documentation License.

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Indice general
1. Introducci on al software cient co 1.1. Introducci on a los computadores . . . . . . . . . . 1.1.1. Niveles de descripci on de un ordenador . . 1.1.2. El modelo de computador de Von Neumann 1.1.3. Representaci on binaria . . . . . . . . . . . . 1.2. Aplicaciones de Software Cient co . . . . . . . . . 2. Introducci on a la programaci on en Matlab 2.1. El entorno de programaci on de Matlab . . . . . . 2.1.1. La ventana de comandos de Matlab . . . 2.1.2. Variables. . . . . . . . . . . . . . . . . . . 2.1.3. Vectores y matrices. . . . . . . . . . . . . 2.1.4. Estructuras y c elulas . . . . . . . . . . . . 2.2. Entrada y salida de Datos . . . . . . . . . . . . . 2.2.1. Exportar e importar datos en Matlab . . 2.3. Operaciones aritm eticas, relacionales y l ogicas . . 2.3.1. Operaciones aritm eticas . . . . . . . . . . 2.3.2. Precedencia de los operadores aritm eticos 2.3.3. Operaciones Relacionales y l ogicas. . . . . 2.4. Scripts y Funciones . . . . . . . . . . . . . . . . . 2.4.1. El editor de textos de Matlab. . . . . . . 2.4.2. Scripts . . . . . . . . . . . . . . . . . . . . 2.4.3. Funciones . . . . . . . . . . . . . . . . . . 2.4.4. Funciones incluidas en Matlab. . . . . . . 2.4.5. Depuraci on. . . . . . . . . . . . . . . . . . 2.5. Control de Flujo . . . . . . . . . . . . . . . . . . 2.5.1. Flujo condicional. . . . . . . . . . . . . . 2.5.2. Bucles . . . . . . . . . . . . . . . . . . . . 2.5.3. Funciones recursivas. . . . . . . . . . . . . 2.5.4. Algoritmos y diagramas de ujo. . . . . . 2.6. Representaci on Gr aca . . . . . . . . . . . . . . . 2.6.1. El comando plot y las guras en Matlab. 2.6.2. Gr acos en 2D . . . . . . . . . . . . . . . 2.6.3. Gr acos en 3D. . . . . . . . . . . . . . . .

n. ji m en ez @
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

s
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Bo

rr

ad o

r,j

ua

.u cm .es
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 16 16 18 20 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 25 26 33 37 40 40 45 45 52 53 65 65 66 68 74 74 80 80 85 90 91 94 94 102 110

4 3. Aritm etica del Computador y Fuentes de error 3.1. Representaci on binaria y decimal . . . . . . . . . . . 3.2. Representaci on de n umeros en el ordenador . . . . . 3.2.1. N umeros no enteros: Representaci on en punto 3.3. Errores en la representaci on num erica. . . . . . . . . 3.3.1. Error de redondeo unitario . . . . . . . . . . 3.3.2. Errores de desbordamiento . . . . . . . . . . 3.4. Errores derivados de las operaciones aritm eticas . . . 3.4.1. Acumulaci on de errores de redondeo . . . . . 3.4.2. Anulaci on catastr oca . . . . . . . . . . . . . 3.4.3. Errores de desbordamiento . . . . . . . . . .

INDICE GENERAL 125 125 126 128 136 136 139 140 140 143 144

6. Sistemas de ecuaciones lineales 6.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Condicionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. M etodos directos de resoluci on de sistemas de ecuaciones lineales 6.3.1. Sistemas triangulares . . . . . . . . . . . . . . . . . . . . . 6.3.2. M etodos Basados en las factorizaciones . . . . . . . . . . 6.3.3. El m etodo de eliminaci on de Gauss. . . . . . . . . . . . . 6.3.4. Gauss-Jordan y matrices en forma reducida escalonada . . 6.4. M etodos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1. El m etodo de Jacobi. . . . . . . . . . . . . . . . . . . . . . 6.4.2. El m etodo de Gauss-Seidel. . . . . . . . . . . . . . . . . . 6.4.3. Amortiguamiento. . . . . . . . . . . . . . . . . . . . . . . 6.4.4. An alisis de convergencia . . . . . . . . . . . . . . . . . . .

ad o

5. Aplicaciones del c alculo cient co al Algebra 5.1. Matrices y vectores . . . . . . . . . . . . . . . 5.2. Operaciones matriciales . . . . . . . . . . . . 5.3. Operadores vectoriales . . . . . . . . . . . . . 5.4. Tipos de matrices empleados frecuentemente 5.5. Factorizaci on de matrices . . . . . . . . . . . 5.5.1. Factorizacion LU . . . . . . . . . . . . 5.5.2. Factorizaci on de Cholesky . . . . . . . 5.5.3. Diagonalizaci on . . . . . . . . . . . . . 5.5.4. Factorizaci on QR . . . . . . . . . . . . 5.5.5. Factorizaci on SVD . . . . . . . . . . .

n. ji m en ez @
lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. C alculo de ra ces de una funci on 4.1. Ra ces de una funci on . . . . . . . . . . . . . . . . . . . . . . . 4.2. Metodos iterativos locales . . . . . . . . . . . . . . . . . . . . . 4.2.1. M etodo de la bisecci on . . . . . . . . . . . . . . . . . . . 4.2.2. M etodo de interpolaci on lineal o (Regula falsi ) . . . . . 4.2.3. M etodo de Newton-Raphson . . . . . . . . . . . . . . . 4.2.4. M etodo de la secante . . . . . . . . . . . . . . . . . . . . 4.2.5. M etodo de las aproximaciones sucesivas o del punto jo 4.3. C alculo de ra ces de funciones con Matlab. . . . . . . . . . . . . 4.3.1. La funci on de Matlab fzero. . . . . . . . . . . . . . . . 4.3.2. C alculo de ra ces de polinomios. . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

s
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

r,j

ua

Bo

rr

.u cm .es
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 147 149 149 150 155 158 159 169 169 174 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 177 179 193 204 205 205 216 218 224 231 235 235 239 242 242 244 251 255 258 259 265 268 271 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . jo y en . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . punto otante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

INDICE GENERAL 7. Interpolaci on y ajuste de funciones 7.1. El polinomio de Taylor. . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Interpolaci on polinomial. . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1. La matriz de Vandermonde . . . . . . . . . . . . . . . . . . . . 7.2.2. El polinomio interpolador de Lagrange. . . . . . . . . . . . . . 7.3. Diferencias divididas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1. El polinomio de Newton-Gregory . . . . . . . . . . . . . . . . . 7.4. Interpolaci on por intervalos. . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1. Interpolaci on mediante splines c ubicos . . . . . . . . . . . . . . 7.4.2. Funciones propias de Matlab para interpolaci on por intervalos . 7.5. Ajuste polin omico por el m etodo de m nimos cuadrados . . . . . . . . 7.5.1. M nimos cuadrados en Matlab. . . . . . . . . . . . . . . . . . . 7.5.2. An alisis de la bondad de un ajuste por m nimos cuadrados. . .

5 277 278 281 281 282 283 286 289 291 296 297 301 302 307 307 308 309 312 313 315 319 320 324

Bo

GNU Free Documentation License 1. APPLICABILITY AND DEFINITIONS . . . . . . . . . 2. VERBATIM COPYING . . . . . . . . . . . . . . . . . . 3. COPYING IN QUANTITY . . . . . . . . . . . . . . . . 4. MODIFICATIONS . . . . . . . . . . . . . . . . . . . . . 5. COMBINING DOCUMENTS . . . . . . . . . . . . . . . 6. COLLECTIONS OF DOCUMENTS . . . . . . . . . . . 7. AGGREGATION WITH INDEPENDENT WORKS . . 8. TRANSLATION . . . . . . . . . . . . . . . . . . . . . . . 9. TERMINATION . . . . . . . . . . . . . . . . . . . . . . . 10. FUTURE REVISIONS OF THIS LICENSE . . . . . . . 11. RELICENSING . . . . . . . . . . . . . . . . . . . . . . ADDENDUM: How to use this License for your documents

ua

9. Tratamiento estad stico de datos 9.1. N umeros aleatorios . . . . . . . . . . . . . . . 9.2. Probabilidad y distribuciones de probabilidad 9.3. El teorema de l mite central . . . . . . . . . . 9.4. Incertidumbre en las medidas experimentales 9.5. An alisis estadistico de datos con Matlab . . .

n. ji m en ez @
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8. Diferenciacion e Integraci on num erica 8.1. Diferenciaci on num erica. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1. Diferenciaci on num erica basada en el polinomio de interpolaci on. 8.1.2. Diferenciaci on num erica basada en diferencias nitas . . . . . . . 8.2. Integracion num erica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1. La f ormula del trapecio. . . . . . . . . . . . . . . . . . . . . . . . 8.3. Las f ormulas de Simpson. . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4. Problemas de valor inicial en ecuaciones diferenciales . . . . . . . . . . . 8.4.1. El m etodo de Euler. . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.2. M etodos de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . .

s
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

rr

ad o

r,j

.u cm .es
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 327 327 327 327 327 329 329 330 331 331 333 333 333 333 334 334 334 335 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

Bo r,j ua n. ji m en ez @ s

rr

ad o

INDICE GENERAL

.u cm .es

1.1. Descripci on por niveles de un computador . . . . . . . . . . . . . . . . . . . . . . . 1.2. Modelo de Von Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.

Entorno de desarrollo integrado de Matlab . . . . . . . . . . . . . . . . . . . . . . . 26 El Workspace de Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Aspecto de la herramienta de importaci on de datos . . . . . . . . . . . . . . . . . . 46 posici on del men u File y del icono de nuevo documento en el IDE de Matlab . . . 66 Vista del editor de textos de Matlab mostrando el contenido del chero prueba1.m 67 Ejemplo de uso de memoria y ambito de variables durante la ejecuci on de una funci on 71 Vista de el editor de texto de Matlab. Circulo rojo error en el c odigo. Circulos azules advertencias de posible mejoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.8. Breakpoint activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 2.9. Parada de programa en breakpoint y herramientas de depuraci on . . . . . . . . . . 79 2.10. Esquema general de la estructura de ujo condicional if los t erminos escritos entre par entesis son opcionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 2.11. Esquema general de la estructura switch-case-otherwise . . . . . . . . . . . . . . . 84 2.12. Esquema general de la estructura de un bucle for los t erminos escritos entre par entesis son opcionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 2.13. Esquema general de la estructura de un bucle while los t erminos escritos entre par entesis son opcionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.14. S mbolos empleados en diagramas de ujo . . . . . . . . . . . . . . . . . . . . . . . 92 2.15. Diagrama de ujo para el problema de los n umeros primos . . . . . . . . . . . . . . 93 2.16. Ventana gr aca de Matlab. representaci on de los punto de la tabla 7.2.1 . . . . . . 96 2.17. gr aco de los puntos de la tabla 7.2.1 obtenida con el comando plot . . . . . . . . 97 2.18. Datos de la tabla 7.2.1 representados mediante distintos tipos de lineas y colores . 99 2.19. gr acas de las funciones seno y coseno en el intervalo (, ). Representadas en la misma gura, usando el comando hold on. . . . . . . . . . . . . . . . . . . . . . . 100 2.20. Ejemplo de empleo del comando subplot . . . . . . . . . . . . . . . . . . . . . . . . 103 2.21. Ejemplo de empleo del comando fplot . . . . . . . . . . . . . . . . . . . . . . . . . 104 2.22. Representaci on de la funci on y = log10 (x) empleando el comando semilogx . . . . 105 2.23. Representaci on de la funci on y = 10x empleando el comando semilogy . . . . . . . 106 2.24. Representaci on de la funci on r = empleando el comando polar . . . . . . . . . 107 2.25. Comparci on entre los comandos stem, bar y stairs representando la misma colecci on de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 2.26. histogramas del n umero de autom oviles por cada 1000 habitantes para 213 pa ses . 108 2.27. Ejemplo de uso de la funci on plotyy . . . . . . . . . . . . . . . . . . . . . . . . . . 109 2.28. Ejemplo de uso de la funci on quiver . . . . . . . . . . . . . . . . . . . . . . . . . . 110 2.29. Datos de la tabla ?? representados empleando el comando errorbar . . . . . . . . 112

Bo

rr

ad o

r,j

ua

n. ji m en ez @
7

.u cm .es
17 19

Indice de guras

INDICE DE FIGURAS 2.30. Gr aco en 3D y rotaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.31. Ret cula para representar supercies. Los puntos negros son los nodos denidos por las matrices Xm e Ym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.32. Supercie elemental obtenida elevando los cuatros puntos centrales de la gura 2.31. 2.33. Comparaci on entre mesh y surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.34. ret cula con simetr a circular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.35. Cono representado sobre una ret cula circular . . . . . . . . . . . . . . . . . . . . . 2.36. ret cula con simetr a circular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.37. Comparaci on entre los resultados de contour, contour3, meshc y surfc, para la obtenci on de las curvas de nivel de una supercie. . . . . . . . . . . . . . . . . . . 2.38. Curva trazada sobre una supercie . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 114 115 120 121 122 122 123 124

Bo

Ejemplo de ecuaci on de Kepler para a = 40 y b = 2 . . . . . . . . . . . . . . . . . . 148 Ilustraci on del teorema de Bolzano . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Diagrama de ujo del m etodo de la bisecci on . . . . . . . . . . . . . . . . . . . . . 150 proceso de obtenci on de la ra z de una funci on por el m etodo de la bisecci on . . . 151 Obtenci on de la recta que une los extremos de un intervalo [a, b] que contiene una ra z de la funci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 4.6. Diagrama de ujo del m etodo de interpolaci on lineal . . . . . . . . . . . . . . . . . 153 4.7. proceso de obtenci on de la ra z de una funci on por el m etodo de interpolaci on lineal 154 4.8. Recta tangente a la funci on f (x) en el punto x0 . . . . . . . . . . . . . . . . . . . . 155 4.9. Diagrama de ujo del m etodo de Newton-Raphson . . . . . . . . . . . . . . . . . . 156 4.10. proceso de obtenci on de la ra z de una funci on por el m etodo de Newton . . . . . . 157 4.11. Recta secante a la funci on f (x) en los puntos x0 y x1 . . . . . . . . . . . . . . . . . 158 4.12. Diagrama de ujo del m etodo de la secante . . . . . . . . . . . . . . . . . . . . . . 159 4.13. proceso de obtenci on de la ra z de una funci on por el m e todo de la secante . . . . . 160 4.14. Obtenci on gr aca del punto jo de la funci on, g (x) = ex . . . . . . . . . . . . . 161 4.15. Diagrama de ujo del m etodo del punto jo. La ra z obtenida corresponde a la funci on f (x) = g (x) x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 4.16. g (x) = ex , Solo la rama negativa tiene un punto jo. . . . . . . . . . . . . . . . 164 x 2 4.17. proceso de obtenci on de la ra z de la funci etodo on f (x) = e x aplicando el m x del punto jo sobre la funci on g (x) = e . . . . . . . . . . . . . . . . . . . . . . 165 4.18. primeras iteraciones de la obtenci on de la ra z de la funci on f (x) = ex x2 aplicando 2 el m etodo del punto jo sobre la funci on g (x) = ln(x ). . . . . . . . . . . . . . . . 166 4.19. proceso de obtenci on de la ra z de la funci on f (x) = ex x2 aplicando el m etodo ex del punto jo sobre la funci on g (x) = x , el m etodo oscila sin converger a la soluci on.167 4.20. proceso de obtenci on de la ra z de la funci on f (x) = ex x2 aplicando el m etodo x del punto jo sobre la funci on g (x) = ex , el m etodo diverge r apidamente. . . . . . 168 4.21. Gr aca de la funci on f (x) = ex x2 , obtenida mediante pinta funcion. . . . . . . 171 5.1. 5.2. 5.3. 5.4. 5.5.

rr

ad o

Representaci on gr aca de vectores en el plano . . . . . Representaci on gr aca de vectores en el espacio . . . . interpretaci on ge ometrica de la norma de un vector . . efecto del producto de un escalar por un vector . . . . Representaci on gr aca de los vectores a = (1, 2), b = combinaci on lineal de a y b. . . . . . . . . . . . . . . .

r,j

ua

n. ji m en ez @

4.1. 4.2. 4.3. 4.4. 4.5.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (1, 1) y algunos vectores, . . . . . . . . . . . . . . . .

3.1. Ilustraci on del cambio de precisi on con la magnitud de los n umeros representados. 139 3.2. N umeros representables y desbordamientos en el est andar IEEE 754 de precisi on simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

.u cm .es
178 179 184 193 194

INDICE DE FIGURAS 5.6. Representaci on gr aca de los vectores a = (1, 2, 1), b = (2, 0, 1), c = (1, 1, 1) y del vector a b + c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7. Representaci on gr aca del vector a, en las base can onica C y en la base B . . . . . 5.8. Transformaciones lineales del vector a = [1; 2]. D, dilataci on/contracci on en un factor 1,5/0,5. Rx , reexi on respecto al eje x. Ry , reexion respecto al eje y. R rotaciones respecto al origen para angulos = /6 y = /3 . . . . . . . . . . . . 5.9. Formas cuadraticas asociadas a las cuatro matrices diagonales: |a11 | = |a22 | = 1, a12 = a21 = 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10. Obtenci on de un vector ortogonal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4.

195 197

n. ji m en ez @

Sistema de ecuaciones con soluci on u nica . . . . . . . . . . . . . . . . . . . . . . . . Sistema de ecuaciones sin soluci on . . . . . . . . . . . . . . . . . . . . . . . . . . . Sistema de ecuaciones con innitas soluciones . . . . . . . . . . . . . . . . . . . . . Diagrama de ujo general de los m etodos iterativos para resolver sistemas de ecuaciones. La funci on M (x) es la que especica en cada caso el m etodo. . . . . . . . . 6.5. evoluci on de la tolerancia (m odulo de la diferencia entre dos soluciones sucesivas) para un mismo sistema resuelto mediante el m etodo de Gauss-Seidel y el m etodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6. Evoluci on de la tolerancia para un mismo sistema empleando el metodo de Jacobi (diverge) y el de Jacobi amortiguado (converge). . . . . . . . . . . . . . . . . . . .

ua

7.1. Comparaci on entre resultados obtenidos para polinomios de Taylor del logaritmo natural de grados 2, 3, 5, 10, 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Polynomios de Taylor para las funciones coseno y seno . . . . . . . . . . . . . . . 7.3. Polinomio de interpolaci on de grado nueve obtenido a partir de un conjunto de diez datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4. Interpolaciones de orden cero y lineal para los datos de la gura 7.3 . . . . . . . . 7.5. Interpolaci on mediante spline c ubico de los datos de la gura 7.3 . . . . . . . . . . 7.6. Polinomio de m nimos cuadrados de grado 0 . . . . . . . . . . . . . . . . . . . . . . 7.7. Ejemplo de uso de la ventana gr aca de Matlab para realizar un ajuste por m nimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8. Comparaci on entre los residuos obtenidos para los ajustes de m nimos cuadrados de un conjunto de datos empleando polinomios de grados 1 a 4. . . . . . . . . . . . . 8.1. Variaci on del error cometido al aproximar la derivada de una funci on empleando una f ormula de diferenciaci on de dos puntos. . . . . . . . . . . . . . . . . . . . . . 8.2. Comparaci on entre las aproximaciones a la derivada de una funci on obgtenidas mediante las diferencias de dos puntos adelantada y centrada . . . . . . . . . . . . . . 8.3. Interpretaci on gr aca de la f ormula del trapecio. . . . . . . . . . . . . . . . . . . . 8.4. Interpretaci on gr aca de la f ormula extendida del trapecio. . . . . . . . . . . . . . 8.5. Interpretaci on gr aca de la f ormula 1/3 de Simpsom. . . . . . . . . . . . . . . . . . 8.6. Interpretaci on gr aca de la f ormula 3/8 de Simpsom. . . . . . . . . . . . . . . . . . 8.7. Circuito RC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8. Comparacion entre los resultados obtenidos mediante el m etodo de Euler para dos pasos de integraci on h = 0,05 y h = 0,001 y la soluci on anal tica para el voltaje Vo de un condensador durante su carga. . . . . . . . . . . . . . . . . . . . . . . . . . .

r,j

ad o

Bo

rr

.u cm .es
203 226 237 238 239 258 268 274 279 280 289 290 296 299 304 305 310 311 314 315 316 317 322 323

201

10

Bo r,j ua n. ji m en ez @ s

rr

ad o

INDICE DE FIGURAS

.u cm .es

3.1. Representaci on en exceso a 127, para un exponente de 8 bits. . . . . . . . . . . . . 132 3.2. Comparaci on entre los est andares del IEEE para la representaci on en punto otante. (bs bit de signo, mi bit de mantisa, ei bit de exponente) . . . . . . . . . . . . . . . 135 7.1. f (x) = erf (x) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 7.2. Tabla de diferencia divididas para cuatro datos . . . . . . . . . . . . . . . . . . . . 285 7.3. Tabla de diferencias para el polinomio de Newton -Gregory de cuatro datos . . . . 287 8.1. F ormulas de derivaci on basadas en diferencias nitas . . . . . . . . . . . . . . . . . 312

Bo

rr

ad o

r,j

ua

n. ji m en ez @
11

2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8.

Formatos num ericos m as comunes en Matlab . . . . . . . . . Operadores aritm eticos denidos en Matlab . . . . . . . . . . Operadores relacionales denidos en Matlab . . . . . . . . . . Operadores l ogicos elemento a elemento . . . . . . . . . . . . Algunas funciones matem aticas en Matlab de uso frecuente . Datos de prueba . . . . . . . . . . . . . . . . . . . . . . . . . tipos de l nea y color del comando plot . . . . . . . . . . . . Resultados experimentales de la medida de la velocidad de un

.u cm .es
. . . . . . . . . . . . . . . . . . . . . . . . . . . . m ovil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 . 47 . 54 . 61 . 74 . 95 . 98 . 111

Indice de Tablas

12

Bo r,j ua n. ji m en ez @ s

rr

ad o

INDICE DE TABLAS

.u cm .es

Prefacio

Somos como enanos a los hombros de gigantes. Podemos ver m as, y m as lejos que ellos, no por que nuestra vista sea m as aguda, sino porque somos levantados sobre su gran altura. En cuanto a los contenidos, ejemplos, c odigo, etc. Estos apuntes deben mucho a muchas personas. En primer lugar a Manuel Prieto y Segundo Esteban que elaboraron las presentaciones de la asignatura Introducci on al c alculo cient co y programaci on de la antigua licenciatura en f sicas, de la que el laboratorio de computaci on cient ca es heredera. En segundo lugar a mis compa neros de los departamentos de F sica de la Tierra, Astronom a y Astrof sica I y Arquitectura de computadores y Autom atica que han impartido la asignatura durante estos a nos: Rosa Gonz alez Barras, Bel en Rodr guez Fonseca, Maurizio Matessini, Pablo Zurita, Vicente Carlos Ru z Mart nez, Encarna Serrano, Carlos Garc a S anchez, Jose Antonio Mart n, Victoria L opez L opez, Alberto del Barrio, Blanca Ayarzag uena, Javier G omez Selles, Nacho G omez P erez, Marta Avalos, I naqui Hidalgo, Daviz s anchez, Juan Rodriguez, Mar a Ramirez, Alvaro de la C amara (Espero no haberme olvidado de nadie). Muchas gracias a todos por tantas horas de trabajo compartidas. Por u ltimo, los errores y erratas que encuentres en estas notas, esos s que son de mi exclusiva responsabilidad. Puedes si quieres ayudarme a corregirlos en futuras ediciones; juan.jimenez@s.ucm.es

ad o

r,j

ua

n. ji m en ez @
13

Estos apuntes cubren de forma aproximada el contenido del Laboratorio de computaci on cient ca del primer curso del grado en f sica. La idea de esta asignatura es introducir al estudiante a las estructuras elementales de programaci on y al c alculo num erico, como herramientas imprescindibles para el trabajo de investigaci on. Casi todos los m etodos que se describen en estos apuntes fueron desarrollados hace siglos por los grandes: Newton, Gauss, Lagrange, etc. M etodos que no han perdido su utilidad y que, con el advenimiento de los computadores digitales, han ganado todav a m as si cabe en atractivo e inter es. Se cumple una vez m as la famosa frase atribuida a Bernardo de Chartres:

Bo

rr

.u cm .es
Juan Jim enez.

14

Bo r,j ua n. ji m en ez @ s

rr

ad o

INDICE DE TABLAS

.u cm .es

Cap tulo 1

Introducci on al software cient co

Adquisici on de datos de dispositivos experimentales. An alisis y tratamiento de datos experimentales. C alculo Ci entico.

La primera de estas tareas queda fuera de los contenidos de esta asignatura. Su objetivo es emplear el ordenador para recoger datos autom aticamente de los sensores empleados en un dispositivo experimental. El procedimiento habitual es emplear dispositivos electr onicos que traducen las lecturas de un sensor (un term ometro, un man ometro, un caudal metro, una c amara etc.) a un voltaje. El voltaje es digitalizado, es decir, convertido a una secuencia de ceros y unos, y almacenado en un ordenador para su posterior an alisis o/y directamente monitorizado, es decir,mostrado en la pantalla del ordenador. En muchos casos el ordenador es a su vez capaz de interactuar con el dispositivo experimental: iniciar o detener un experimento, regular las condiciones en que se realiza, disparar alarmas si se producen errores, etc. De este modo, el investigador cient co, queda dispensado de la tarea de adquirir por s mismo los datos experimentales. Tarea que en algunos casos resultar a imposible, por ejemplo si necesita medir muchas variables a la vez o si debe medirlas a gran ritmo; y en la que, en general, es relativamente f acil cometer errores. El an alisis y tratamiento de datos experimentales, constituye una tarea fundamental dentro del trabajo de investigaci on cient ca. Los ordenadores permiten realizar dichas tareas, de una forma eciente y segura con cantidades de datos que resultar an imposibles de manejar hace 50 a nos. Como veremos m as adelante, una simple hoja de c alculo puede ahorrarnos una cuantas horas de c alculos tediosos. El an alisis estad stico de un conjunto de datos experimentales, el c alculo la estimaci on de los errores experimentales cometidos, la posterior regresi on de los datos obtenidos a una funci on matem atica que permita establecer una ley o al menos una relaci on entre los datos obtenidos, formar parte del trabajo cotidiano del investigador, virtualmente en todos los campos de la ciencia. Por u ltimo el c alculo. Cabr a decir que constituye el n ucleo del trabajo de investigaci on. El cient co trata de explicar la realidad que le rodea, mediante el empleo de una descripci on matem atica. Dicha descripci on suele tomar la forma de un modelo matem atico m as o menos complejo. La validez de un modelo est a ligada a que sea capaz de reproducir los resultados experimentales

Bo

rr

ad o

r,j

ua

n. ji m en ez @
15

En la actualidad, el ordenador se ha convertido en una herramienta imprescindible para el trabajo de cualquier investigador cient co. Su uso ha permitido realizar tareas que sin su ayuda resultar an sencillamente imposibles de acometer. Entre otras, distinguiremos las tres siguientes:

.u cm .es

16

AL SOFTWARE CIENT CAP ITULO 1. INTRODUCCION IFICO

obtenidos del fen omeno que pretende explicar. Si el modelo es bueno ser a capaz de obtener mediante c alculo unos resultados similares a los obtenido mediante el experimento. De este modo, el modelo queda validado y es posible emplearlo para predecir c omo se comportar a el sistema objeto de estudio en otras condiciones.

1.1.

Introducci on a los computadores

Almacenamiento de datos

Transferencias de datos entre el computador y el exterior Control de las anteriores operaciones

El computador se dise na para realizar funciones generales que se especican cuando se programa. La programaci on es la que concreta las tareas que efectivamente realiza un ordenador concreto.

1.1.1.

Niveles de descripci on de un ordenador

Bo

2. Circuito Digital. Los componentes del nivel f sico se agrupan formando circuitos digitales, (En nuestro caso circuitos digitales integrados). Los circuitos digitales trabajan solo con dos niveles de tensi on (V1 , V0 ) lo que permite emplearlos para establecer relaciones l ogicas: V1 =verdadero, V2 =falso. Estas relaciones l ogicas establecidas empleando los valores de la tensi on de los circuitos digitales constituyen el soporte de todos los c alculos que el computador puede realizar. 3. Organizaci on Hardware del sistema. Los circuitos digitales integrados se agrupan y organizan para forma el Hardware del ordenador. Los m odulos b asicos que constituyen el Hardware son la unidad central de procesos (CPU), La unidad de memoria y las unidades de entrada y salida de datos. Dichos componentes est an conectados entre s mediante un bus, que transere datos de una unidad a otra.

rr

ad o

1. Nivel F sico. Constituye la base del hardware del computador. Est a constituido por los componentes electr onicos b asicos, diodos, transistores, resistencias, etc. En un computador moderno, no es posible separar o tan siquiera observar dichos componentes: Se han fabricado directamente sobre un cristal semiconductor, y forman parte de un dispositivo electr onico conocido con el nombre de circuito integrado.

r,j

ua

La gure 1.1 muestra un modelo general de un computador descrito por niveles. Cada nivel, supone y se apoya en el nivel anterior.

n. ji m en ez @

Procesamiento de datos

M as o menos todos estamos familiarizados con lo que es un computador, los encontramos a diario continuamente y, de hecho, hay muchos aspectos de nuestra vida actual que ser an inimaginables sin los computadores. En t erminos muy generales, podemos denir un computador como una m aquina que es capaz de recibir instrucciones y realizar operaciones (c alculos) a partir de las instrucciones recibidas. Precisamente es la capacidad de recibir instrucciones lo que hace del ordenador una herramienta vers atil; seg un las instrucciones recibidas y de acuerdo tambi en a sus posibilidades como m aquina, el ordenador puede realizar tareas muy distintas, entre las que cabe destacar como m as generales, las siguientes:

.u cm .es

A LOS COMPUTADORES 1.1. INTRODUCCION

17

Sistema Operativo/ Compilador

Figura 1.1: Descripci on por niveles de un computador 4. Arquitectura del computador. La arquitectura dene c omo trabaja el computador. Por tanto, est a estrechamente relacionada con la organizaci on hardware del sistema, pero opera a un nivel de abstracci on superior. Establece c omo se accede a los registros de memoria, arbitra el uso de los buses que comunican unos componentes con otros, y regula el trabajo de la CPU. Sobre la arquitectura se establece el lenguaje b asico en el que trabaja el ordenador, conocido c omo lenguaje m aquina. Es un lenguaje que emplea todav a niveles l ogicos binarios (ceros o unos) y por tanto no demasiado apto para ser interpretado por los seres humanos. Este lenguaje permite al ordenador realizar operaciones b asicas como copiar el contenido de un registro de memoria en otro, sumar el contenido de dos registros de memoria, etc. El lenguaje m aquina es adecuado para los computadores, pero no para los humanos, por eso, los fabricantes suministran junto con el computador un repertorio b asico de instrucciones que su m aquina puede entender y realizar en un lenguaje algo m as asequible. Se trata del lenguaje ensamblador. Los comandos de este lenguaje son f acilmente traducibles en una o varias instrucciones de lenguaje m aquina. A un as se trata de un lenguaje en el que programar directamente resulta una tarea tediosa y proclive a cometer errores.

Bo

rr

ad o

5. Compiladores y Sistemas Operativos Los Compiladores constituyen un tipo de programas especiales que permiten convertir un conjunto de instrucciones, escritas en un lenguaje de alto nivel en lenguaje m aquina. El programador escribe sus instrucciones en chero de texto normal, perfectamente legible para el ser humano, y el compilador convierte las instrucciones contenidas en dicho chero en secuencias binarias comprensibles por la m aquina.

r,j

ua

n. ji m en ez @

Arquitectura del Computador Hardware del sistema Circuito Digital Nivel Fsico

.u cm .es

Aplicacin Lenguaje de alto nivel

18

AL SOFTWARE CIENT CAP ITULO 1. INTRODUCCION IFICO Los computadores primitivos solo eran capaces de ejecutar un programa a la vez. A medida que se fueron fabricando ordenadores mas sosticados, surgi o la idea de crear programas que se encargaran de las tareas b asicas: gestionar el ujo de informaci on, manejar perif ericos, etc. Estos programas reciben el nombre de sistemas operativos. Los computadores modernos cargan al arrancar un sistema operativo que controla la ejecuci on del resto de las aplicaciones. Ejemplos de sistemas operativos son DOS (Disk operating system), UNIX y su versi on para ordenadores personales LINUX. 6. Lenguajes de alto nivel. Los lenguajes de alto nivel est an pensados para facilitar la tarea del programador, desentendi endose de los detalles de implementaci on del hardware del ordenador. Los lenguajes de alto nivel est an compuestos por un conjunto de comandos y unas reglas sint acticas, que permiten describir las instrucciones para en computador en forma de texto.

7. Aplicaciones. Se suele entender por aplicaciones programas orientados a tareas espec cas, disponibles para un usuario nal. Habitualmente se trata de programas escritos en un lenguaje de alto nivel y presentados en un formato f acilmente comprensible para quien los usa. Existen multitud de aplicaciones, entre las m as conocidas cabe incluir los navegadores para Internet, como Explorer, Mocilla o Google Crome, los editores de texto, como Word, las hojas de c alculo como Excel o los clientes de correo como Outlook. En realidad, la lista de aplicaciones disponibles en el mercado ser a interminable.

1.1.2.

El modelo de computador de Von Neumann

La Unidad Central de Procesos. CPU (Central process unit) ) , esta unidad constituye el n ucleo en el que el ordenador realiza las operaciones.

Bo

rr

Dentro de la CPU pueden a su vez distinguirse las siguientes partes

ad o

Los computadores modernos siguen, en lineas generales, el modelo propuesto por Von Newmann. La gura 2.2 muestra un esquema de dicho modelo. En el modelo de Von Newman se pueden distinguir tres m odulos b asicos y una serie de elementos de interconexi on. Los m odulos b asicos son:

La unidad de proceso o ruta de datos: Est a formada por La Unidad Aritm etico L ogica
(ALU), capaz de realizar las operaciones aritm eticas y l ogicas que indican las instrucciones del programa. En general las ALUs se construyen para realizar aritm etica entre enteros, y realizar las operaciones l ogicas b asicas del algebra de Boole (AND, OR, etc). Habitualmente, las operaciones para n umeros no enteros, representados en punto otante se suelen realizar empleando un procesador espec co que se conoce con el nombre de Coprocesador matem atico. La velocidad de procesamiento suele medirse e millones de operaciones por segundo (MIPS) o millones de operaciones en punto otante por segundo (MFLOPS).

r,j

ua

n. ji m en ez @

De una manera muy general, se pueden dividir los lenguajes de alto nivel en lenguajes compilados y lenguajes interpretados. Los lenguajes compilados emplean un compilador para convertir los comandos del lenguaje de alto nivel en lenguaje m aquina. Ejemplos de lenguajes compilados son C , C++ y Fortran. Los lenguajes interpretados a diferencia de los anteriores no se traducen a lenguaje m aquina antes de ejecutarse. Si no que utilizan otro programa el interprete que va leyendo los comandos del lenguaje y convirti endolos en instrucciones m aquina a la vez que el programa se va ejecutando. Ejemplos de programas interpretado son Basic, Pyton y Java.

.u cm .es

A LOS COMPUTADORES 1.1. INTRODUCCION

19

Unidad de Control (UC)


Cont. Prog. (PC) Reg. Estado (SR)

R0

. . .

Registros

R7

Bus Datos

Memoria

El banco de registros: Conjunto de registros en los que se almacenan los datos con los

Bo

rr

ad o

que trabaja la ALU y los resultados obtenidos. en la memoria principal y guardarlas en el registro de instrucciones, las decodica, las ejecuta empleando la ALU, guarda los resultados en el registro de datos, y guardad las condiciones derivadas de la operaci on realizada en el registro de estado. El registro de datos de memoria, contiene los datos que se est an leyendo de o los que van a escribirse en la memoria principal. El registro de direcciones de memoria, guarda la direcci on de la memoria principal a las que esta accediendo la , para leer o escribir. El contador del programa, tambi en conocido como puntero de instrucciones, es un registro que guarda la posici on en la que se encuentra La CPU dentro de la secuencia de instrucciones de un programa.

La unidad de control (UC) o ruta de control: se encarga de buscar las instrucciones

La unidad de memoria. Se trata de la memoria principal o primaria del computador. Est a dividida en bloques de memoria que se identican mediante una direcci on. La CPU tiene acceso directo a dichos bloques de memoria.

r,j

ua

n. ji m en ez @
Bus Direcc.

Reg. Instr. (IR) Reg.Dir. Mem (MAR)

Reg.Dat. Men (MDR)

Bus Control

E/S

Figura 1.2: Modelo de Von Neumann

Unidad Aritmtico Lgica ALU

.u cm .es

C P U

20

AL SOFTWARE CIENT CAP ITULO 1. INTRODUCCION IFICO La unidad elemental de informaci on digital es el bit (0,1). La capacidad de almacenamiento de datos se mide en Bytes y en sus m ultiplos calculados siempre como potencias de 2:

1 Byte = 8 bits 1 KB = 210 bits = 1024 B 1 M B = 220 bits = 1024 KB 1 GB = 230 bits 1 T B = 240 bits

Unidad de Entrada/Salida. Transere informaci on entre el computador y los dispositivos perif ericos.

1.1.3.

Representaci on binaria

Si recorremos los d gitos que componen el n umero de izquierda derecha, cada uno de ellos representa una potencia de diez superior, porque cada uno representa la cantidad de grupos de 10 grupos, de grupos ... de diez grupos de unidades. Esto hace que potencialmente podamos representar cantidades tan grandes como queramos, empleando tan solo diez s mbolos. Esta representaci on, a la que estamos habituados recibe el nombre de representaci on en base 10 . Pero no es la u nica posible. Volvamos a la representaci on empleada por el computador. En este caso solo tenemos dos s mbolos distintos el 0 y el 1. Si queremos emplear una representaci on an aloga a la representaci on en base diez, deberemos agrupar ahora las cantidad en grupos de dos. As los u nicos n umeros que admiten ser representados con un solo d gito son el uno y el cero. Para representar el n umero dos, necesitamos agrupar: tendremos 0 unidades y 1 grupo de dos, con lo que la representaci on del n umero dos en base dos ser a 10. Para representar el n umero tres, tendremos una unidad m as un grupo de dos, por lo que la representaci on ser a 11, y as sucesivamente. Matem aticamente esto es equivalente emplear sumas de d gitos por potencias de 2:

Bo

rr

ad o

r,j

Veamos con algo m as de detalle, c omo representa la informaci on un computador. Como se explic o anteriormente, La electr onica que constituye la parte f sica del ordenador, trabaja con dos niveles de voltaje. Esto permite denir dos estados, alto, bajo que pueden representarse dos s mbolos 0 y 1. Habitualmente, empleamos 10 s mbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, es decir, empleamos una representaci on decimal. Cuando queremos representar n umeros mayores que nueve, dado que hemos agotado el n umero de d gitos disponibles, lo que hacemos es combinarlos, agrupando cantidades de diez en diez. As por ejemplo, el numero 16, representa seis unidades m as un grupo de diez unidades y el n umero 462 representa dos unidades m as seis grupos de diez unidades m as cuatro grupos de grupos de 10 unidades. Matem aticamente, esto es equivalentes a emplear sumas de d gitos por potencias de diez: 13024 = 1 104 + 3 103 + 0 102 + 2 101 + 2 100

ua

n. ji m en ez @

Los elementos de interconexi on se conocen con el nombre de Buses. Se pueden distinguir tres: En bus de datos, por el que se transeren datos entre la CPU y la memoria o la unidad de entrada/salida. El bus de direcciones, par especicar una direcci on de memoria o del registro de E/S. Y el bus de Control, por el que se env an se nales de control, tales como la se nal de reloj, la se nal de control de lectura/escrituras entre otras.

.u cm .es

A LOS COMPUTADORES 1.1. INTRODUCCION

21

10110 = 1 24 + 0 23 + 1 22 + 1 21 + 0 20 Esta representaci on recibe el nombre de representaci on binaria o en base 2. La expansi on de un n umero representado en binario en potencias de 2, nos da un m etodo directo de obtener su representaci on decimal. As , para el ejemplo anterior, si calculamos las potencias de dos y sumamos los resultados obtenemos: 1 24 + 0 23 + 1 22 + 1 21 + 0 20 = 16 + 0 + 4 + 2 + 0 = 22

que es la representaci on en base 10 del n umero binario 10110. Para n umeros no enteros, la representaci on tanto en decimal como en binario, se extiende de modo natural empleando potencias negativas de 10 y de 2 respectivamente. As , 835,41 = 8 102 + 3 101 + 5 100 + 4 101 + 1 102 y para un n umero en binario,

De nuevo, basta calcular el t ermino de la derecha de la expresi on anterior para obtener la representaci on decimal del n umero 101,01. C omo transformar la representaci on de un n umero de decimal a binario? De nuevo nos da la clave la representaci on sumas de productos de d gitos por potencias de dos. Empecemos por el caso de un n umero entero. Supongamos un n umero D, representado en decimal. Queremos expandirlo en una suma de potencias de dos. Si dividimos el n umero por 2, podr amos representarlo c omo: D = 2 C1 + R1

donde C1 representa el cociente de la divisi on y R1 el resto. Como estamos dividiendo por dos, el resto solo puede valer cero o uno. Supongamos ahora que volvemos a dividir el cociente obtenido por dos,

ua

rr

Bo

Supongamos que tras repetir este proceso n veces, obtenemos un conciente Cn = 1. L ogicamente no tiene sentido seguir dividiendo ya que a partir de este punto, cualquier divisi on posterior que hagamos nos dar a cociente 0 y resto igual a Cn . Por tanto, D = 1 2n + Rn 2n1 + R3 22 + R2 21 + R1 20 La expresi on obtenida, coincide precisamente con la expansi on en potencias de dos del n umero binario 1Rn R3 R2 R1 .

ad o

Si volvemos a dividir el nuevo cociente obtenido C2 por dos, y volvemos a sustituir, C2 = 2 C3 + R3 D = 22 (2 C3 + R3 ) + R2 21 + R1 20 = 23 C3 + R3 22 + R2 21 + R1 20

r,j

Si sustituimos el valor obtenido para C1 en la ecuaci on 1.1.3 obtenemos, D = 2 (2 C2 + R2 ) + R1 = 22 C2 + R2 21 + R1 20

n. ji m en ez @
C1 = 2 C2 + R2

101,01 = 1 22 + 0 21 + 1 20 + 0 21 + 1 22

.u cm .es

22

AL SOFTWARE CIENT CAP ITULO 1. INTRODUCCION IFICO

Como ejemplo,podemos obtener la representaci on en binario del n umero 234, empleando el m etodo descrito: vamos dividiendo el n umero y los cocientes sucesivos entre dos, hasta obtener un cociente igual a uno y a continuaci on, construimos la representaci on binaria del n umero colocando por orden, de derecha a izquierda. los restos obtenidos de las sucesivas divisiones y a nadiendo un uno m as a la izquierda de la cifra construida con los restos: Dividendo 234 117 58 29 14 7 3 Cociente 2 117 58 29 14 7 3 1 Resto 0 1 0 1 0 1 1

n. ji m en ez @
E1 , d1 = 0, d 2 0, d1 2 = E2 21 + 0, d2 21

Por tanto, la representaci on en binario de 234 es 11101010. Supongamos ahora un n umero no entero, representado en decimal, de la forma 0, d . Si lo multiplicamos por dos: (1.1)

Donde E1 representa la parte entera y d1 la parte decimal del n umero calculado. Podemos entonces representar 0, d como, 0, d 2 = (E1 , d1 ) 21 = E1 21 + 0, d1 21 Si volvemos a multiplicar 0, d1 por dos, (1.2)

y sustituyendo en 1.2

ua

0, d 2 = E1 21 + E2 22 + 0, d2 22

rr

Hasta cuando repetir el proceso? En principio hasta que obtengamos un valor cero para la parte decimal, 0, dn = 0. Pero esta condici on puede no cumplirse nunca. Puede darse el caso de hecho es lo m as probable de que un n umero que tiene una representaci on exacta en decimal, no la tenga en binario. El criterio para detener el proceso ser a entonces obtener un determinado n umero de decimales o bien seguir el proceso hasta que la parte decimal obtenida vuelva a repetirse. Puesto que los ordenadores tienen un tama no de registro limitado, tambi en est a limitado el n umero de d gitos con el que pueden representar un n umero decimal. Por eso, lo habitual ser a truncar el n umero asumiendo el error que se comete al proceder as . De este modo, obtenemos la expansi on del n umero original en potencias de dos,

Bo

ad o

r,j

0, d 2 = E1 21 + E2 22 + + En 23 +

Donde los valores E1 En son precisamente los d gitos correspondientes a la representaci on del n umero en binario: 0.E1 E2 En . (Es trivial comprobar que solo pueden valer 0 o 1). Veamos un ejemplo de cada caso, obteniendo la representaci on binaria del n umero 0, 625, que tiene representaci on exacta, y la del n umero 0, 626, que no la tiene. En este segundo caso, calcularemos una representaci on aproximada, tomando 8 decimales. Para construir la representaci on binaria del primero de los n umeros, nos basta tomar las partes enteras obtenidas, por orden, de derecha a izquierda y a nadir un 0 y la coma decimal a la izquierda.

.u cm .es
(1.3) (1.4) (1.5)

1.2. APLICACIONES DE SOFTWARE CIENT IFICO P decimal 0,625 0,25 0,5 2 1,25 0,5 1,0 P entera 1 0 1 P decimal 0,623 0,246 0,492 0,984 0,968 0,936 0.872 0.744 2 1,246 0,492 0,984 1,968 0,936 1,872 1.744 1.488 P entera 1 0 0 1 1 1 1 1

23

0 20 + 1 21 + 0 22 + 0 23 + 1 24 + 1 25 + 1 26 + 1 27 + 1 28 = 0, 62109375 (1.6) El error cometido es, en este caso: Error = 0, 623 0, 62109375 = 0, 00190625.

1.2.

Aplicaciones de Software Cient co

Bo

Dentro del mundo de las aplicaciones, merecen una menci on aparte las dedicadas al c alculo cient co, por su conexi on con la asignatura. Es posible emplear lenguajes de alto nivel para construir rutinas y programas que permitan resolver directamente in determinado problema de c alculo. En este sentido, el lenguaje FORTRAN se ha empleado durante a nos para ese n, y todav a sigue emple andose en muchas disciplinas cient cas y de la Ingenier a. Sin embargo, hay muchos aspectos no triviales del c alculo con un computador, que obligar an al cient co que tuviera que programar sus propios programas a ser a la vez un experto en computadores. Por esta raz on, se han ido desarrollando aplicaciones espec cas para c alculo cient co que permiten al investigador centrarse en la resoluci on de su problema y no el desarrollo de la herramienta adecuada para resolverlo. En algunos casos, se trata de aplicaciones a medida, relacionadas directamente con alg un area cient ca concreta. En otros, consisten en paquetes de funciones espec cos para realizar de forma eciente determinados c alculos, como por ejemplo el paquete SPSS para c alculo estad stico. Un grupo especialmente interesante lo forman algunos paquetes de software que podr amos situar a mitad de camino entre los lenguajes de alto nivel y las aplicaciones: Contienen extensas librer as de funciones, que pueden ser empleadas de una forma directa para realizar c alculos y adem as permiten realizar programas espec cos empleando su propio lenguaje. Entre estos podemos destacar Mathematica, Maple , Matlab, Octave y Scilab . El uso de estas herramientas se ha extendido enormemente en la comunidad cient ca. Algunas como Matlab constituyen casi un est andar en determinadas areas de conocimiento.

rr

ad o

r,j

ua

n. ji m en ez @

Por tanto la representaci on binaria de 0, 625 es 0, 101. Si expandimos su valor en potencias de dos, volvemos a recuperar el n umero original en su representaci on decimal. En el segundo caso, la representaci on binaria, tomando nueve decimales de 0, 623 es 0,10011111. Podemos calcular el error que cometemos al despreciar el resto de los decimales, volviendo a convertir el resultado obtenido a su representaci on en base diez,

.u cm .es

24

AL SOFTWARE CIENT CAP ITULO 1. INTRODUCCION IFICO

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 2

Introducci on a la programaci on en Matlab

Este cap tulo presenta una introducci on general a la programaci on. Para su desarrollo, vamos a emplear una de las aplicaciones inform aticas para c alculo cient co que m as aceptaci on ha tenido en los u ltimos a nos: el entorno de programaci on de Matlab. Matlab es el acr onimo de MATrix LABboratory. Su computaci on num erica emplea como elementos b asicos matrices Usaremos esta herramienta, entre otras motivos, porque nos ofrece la posibilidad de realizar programas similares a los que podr amos realizar con un lenguaje de programaci on de alto nivel, nos permite resolver problemas de c alculo cient co directamente, empleando las herramientas que incluye y adem as nos permite combinar ambas cosas. Este cap tulo no pretende ser exhaustivo, cosa que por otro lado resulta imposible en el caso de Matlab, sino tan solo dar una breve introducci on a su uso. Afortunadamente, Matlab cuenta con una muy buena documentaci on, accesible a trav es de la ayuda, eso s , en ingl es.

2.1.

El entorno de programaci on de Matlab

Bo

rr

Cuando iniciamos Matlab en el computador, se abre una ventana formada por uno o m as paneles. Esta ventana, constituye lo que en programaci on se llama un entorno de desarrollo integrado o, abreviadamente, IDE (acr onimo tomado de su nombre en Ingl es: integrated development environment. El IDE de Matlab, contiene todo los elementos necesarios para programar. La gura 2.1 muestra el aspecto del IDE de Matlab. Seg un como se congure, el IDE de Matlab puede mostrar un n umero mayor o menor de paneles y una disposici on de los mismos distinta a la mostrada en la gura. La mejor manera de aprender estos y otros detalles del IDE es usarlo. Aqu nos centraremos solo en algunos aspectos fundamentales.

2.1.1.

De los paneles mostrados en la ventana de la gura 2.1, vamos a empezar examinando el situado a la derecha. Se trata de la ventana de comandos (command window ) de Matlab. la ventana muestra el simbolo >>, que recibe el nombre de prompt y a continuaci on una barra vertical | parpadeante. La ventana de comandos permite al usuario interactuar directamente con Matlab: Matlab puede recibir instrucciones directamente a trav es de la ventana de comandos, ejecuta las instrucciones 25

ad o

La ventana de comandos de Matlab

r,j

ua

n. ji m en ez @

.u cm .es

26

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Figura 2.1: Entorno de desarrollo integrado de Matlab recibidas, y devuelve los resultados de nuevo en la ventana de comandos. Veamos un ejemplo muy sencillo: si escribimos en la ventana de comandos: >> a=18 + 3

Matlab calcula la suma pedida, devuelve el resultado y, por u ltimo, vuelve a presentar el prompt, para indicarnos que est a preparado para recibir otro comando. a = 21 >>

2.1.2.

En el el ejemplo que acabamos de ver, Matlab calcula el resultado pedido, y lo presenta en pantalla usando la expresi on

Bo

a =21

Por qu e hace falta escribir a = 18 + 3 en lugar de escribir directamente 18 + 3? La raz on tiene que ver con el modo de trabajo de Matlab, y de otros lenguajes de alto nivel. Esto nos lleva al concepto de variable. Podemos ver una variable como una regi on de la memoria del computador, donde un programa guarda una determina informaci on; n umeros, letras, etc. Una caracter stica fundamenta de una variable es su nombre, ya que permite identicarla. Como nombre para una variable se puede

rr

ad o

De este modo, podemos emplear Matlab de un modo an alogo a como emplear amos una calculadora: realizamos una operaci on, obtenemos el resultado, realizamos otra operaci on, obtenemos el resultado y as sucesivamente.

Variables.

r,j

ua

n. ji m en ez @

.u cm .es

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION

27

Nombre_variable = 4

Si escribimos en la ventana de comandos la expresi on anterior y pulsamos el retorno de carro. Matlab devuelve el siguiente resultado: >> Nombre_variable=4 Nombre_variable = 4 >>

1. Enteros positivos y negativos

Bo

rr

ad o

>> a=4 a =

>>b=-4 b = -4

2. N umeros con parte entera y parte decimal separadas por un punto, positivos y negativos. >> a=13.4568 a =

r,j

ua

Matlab ejecuta las instrucciones indicadas y nos conrma que ha creado en la memoria una variable Nombre variable y que ha guardado en ella el numero 4. En Matlab podemos emplear el s mbolo de asignaci on para construir variables que guarden distintos tipos de datos,

n. ji m en ez @

escoger cualquier combinaci on de letras y n umeros, empezando siempre con una letra, en el caso usculas y min usculas, de Matlab. Se puede adem as emplear el signo . Matlab distingue entre may por lo que si elegimos como nombres de variable Pino, PINO y PiNo, Matlab las considerar a como variables distintas. En algunos lenguaje, es preciso indicar al ordenador qu e tipo de informaci on se guardar a en una determinada variable, antes de poder emplearlas. Esto permite manejar la memoria del computador de una manera m as eciente, asignando zonas adecuadas a cada variable, en funci on del tama no de la informaci on que guardar an. A este proceso, se le conoce con el nombre de declaraci on de variables. En Matlab no es necesario declarar las variables antes de emplearlas. El m etodo m as elemental de emplear una variable es asignarle la informaci on para la que se cre o. Para hacerlo, se emplea el s mbolo de asignaci on, que coincide con signo = empleado en matem aticas. Como veremos m as adelante la asignaci on en programaci on y la igualdad en matem aticas no representan ex actamente los mismo. La manera de asignar directamente informaci on a una variable es escribir el nombre de la variable, a continuaci on el signo de asignaci on y, por u ltimo, la informaci on asignada,

.u cm .es

28

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

13.4568 >> b=-13.4568 b = -13.4568

3. N umeros expresados como potencias de 10 (la potencia de 10 se representa con la letra e seguida del valor del exponente). >> f=3e10 f = 3.0000e+010 >> g=-3e10 g = -3.0000e+010 >> h=3e-10 h = 3.0000e-010 >> t=-3e-10 t = -3.0000e-010

4. N umeros complejos. Para indicar la parte imaginaria se puede emplear la letra i o la letra j. >> s=2+3i s =

Bo

rr

>> w=4-5j w =

5. Caracteres, letras o n umeros, manejados estos u ltimos como s mbolos. Se indica a Matlab que se trata de un caracter escribendolo entre comillas simples, >> p=a p =

ad o

2.0000 + 3.0000i

4.0000 - 5.0000i

r,j

ua

n. ji m en ez @

.u cm .es

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION a >> k=1 k =

29

6. Cadenas de caracteres. >> m=hola amigos m = hola amigos

>> a=18 a = 18 >> b=a b = 18 >>

Por u ltimo, podemos asignar a una variable el valor de una funci on en un punto: >> x=0 x = 0

Bo

rr

>> y=cos(x) y = 1

>> La variable y contiene el valor de la funci on coseno en el punto x=0. M as adelante estudiaremos c omo manejar funciones en Matlab. Si escribimos directamente en la l nea de comandos de Matlab, un n umero, una expresi on algebraica o una funci on, sin asignarlas a una variable, Matlab crea autom aticamente una variable para guardar el resultado, As por ejemplo:

ad o

r,j

ua

n. ji m en ez @

La forma que hemos visto de asignar un valor a una variable es la m as sencilla pero no es la u nica. Tambi en podemos asignar un valor una variable a partir de una expresi on aritm etica, como hemos visto antes. Ademas podemos asignar un valor a una variable copiando el contenido de otra variable:

.u cm .es

30 >> 3 + 5 ans = 8

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Matlab guarda el resultado de la operaci on realizada: 3 + 4, en la variable ans. Se trata del nombre de variable por defecto; es una abreviatura de al palabra inglesa answer (respuesta). En cualquier caso es recomendable asignar los resultados de las operaciones expl citamente a una variable. La raz on para ello tiene que ver con lo que llamaremos reasignaci on de variables. Imaginemos que creamos en Matlab una variable asign andole un valor: >> a=34 a = 34 >>

Si a continuaci on, asignamos a esa misma variable el resultado de una operaci on, >> a=12+5 a = 17 >>

>> variable_vacia=[] variable_vacia =

Bo

>>

obtenemos una variable que no contiene nada. M as adelante veremos la utilidad de hacerlo. Hasta ahora, siempre que hemos realizado una operaci on en la ventana de comandos, Matlab nos ha respondido Escribiendo en pantalla el resultado de la misma. En muchas ocasiones, no nos interesa que Matlab nos muestre por pantalla el resultado de una operaci on; por ejemplo, porque se trata de un resultado intermedio, o porque es un resultado de gran tama no y su visualizaci on por

rr

[]

ad o

El valor inicialmente asignado a la variable a se pierde. Sencillamente hemos reasignado a la variable un nuevo valor sobreescribiendo el anterior. Si en la l nea de comandos escribimos operaciones sin asignar el resultado a una variable concreta, Matlab lo asignar a a la variable ans pero esto signica que cada nueva operaci on reasigna su resultado a la variable ans, con lo que solo conservaremos al nal el resultado de la u ltima de las operaciones realizadas. Es posible en Matlab crear una variable que no contenga nada. Para ello hay que emplear dos s mbolos especiales: [ y ]. As si escribimos en la l nea de comandos:

r,j

ua

n. ji m en ez @

.u cm .es

>>

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION

31

pantalla no es u til y sin embargo si que consume mucho tiempo. Podemos omitir la visualizaci on por pantalla del resultado de una operaci on, si terminamos la operaci on, a nadiendo al nal un punto y coma (;), >> A=3+5; >> B=A+1 B = 9

En la primera operaci on hemos a nadido (;) al nal de la l nea, Matlab no muestra el resultado. Sin embargo, si que ha realizado la operaci on pedida y guardado el resultado en la variable A. Por eso es posible emplearla en la segunda operaci on para crear la variable B. Recursi on. Hemos indicado antes c omo el s mbolo de asignaci on = en programaci on no coincide exactamente con la igualdad matem atica. Un ejemplo claro de estas diferencias lo constituye la recursi on. Esta se produce cuando la misma variable aparece a los dos lados del s mbolo de asignaci on: >> a=3 a = 3 >> a=a+1 a = 4

El espacio de trabajo de Matlab Workspace. Matlab guarda en memoria las variables que creamos en la ventana de comandos y las asocia a lo que se conoce como el espacio de trabajo de Matlab. Dicho espacio de trabajo contiene una relaci on de las variables creadas de modo que podamos volver a utilizarlas en la ventana de comandos. Uno de los paneles que el IDE de Matlab puede mostrarnos es precisamente el Workspace. La gura ?? muestra dicho panel. En el se muestran los nombres de las variables contenidas en el espacio de trabajo, as como informaci on relativa a su valor, tama no en memoria etc. Adem as del panel que acabamos de describir, es posible listar el contenido de las variables presentes en el Workspace empleando dos comandos especiales de Matlab; se trata de los comandos who y whos. El primero de ellos nos devuelve en la ventana de comandos los nombres de las variables contenidas en el Workspace. El segundo nos devuelve los nombres de las variables junto con informaci on adicional sobre su contenido, tama no, etc.

Bo

rr

ad o

La expresi on anterior no tiene sentido matem aticamente, ya que una variable no puede ser igual a si misma m as la unidad. Sin embargo, en programaci on, es una sentencia v alida: el ordenador toma el valor almacenado en la variable a, le suma 1 y guarda el resultado en la variable a, sobreescribiendo el valor anterior. La recursion se emplea muy a menudo en programaci on, ente otras ventajas, permite crear contadores, variables que van incrementando o decrementando su valor progresivamente y permite ahorrar espacio de memoria cuando se realizan operaciones que requieren c alculos intermedios.

r,j

ua

n. ji m en ez @

.u cm .es

32

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Figura 2.2: El Workspace de Matlab

>> who Your variables are: Nombre_variable a >> whos Name Nombre_variable a b x y >> b x

ua

Size 1x1 1x1 1x1 1x1 1x1

r,j

Bo

Para eliminar una variable del Workspace, se emplea el comando clear. Si escribimos en la ventana de comandos el comando clear, seguido del nombre de una variables, Matlab la elimina del Workspace. Si escribimos el comando clear, sin a nadir nada m as, Matlab eliminar a TODAS las variables contenidas en el Workspace. Formatos de visualizaci on Hemos visto en los ejemplos anteriores c omo al realizar una operaci on en Matlab, se nos muestra el resultado en la ventana de comandos. Adem as podemos examinar el contenido de cualquier variable contenida en el workspace sin m as que escribir su nombre en la

rr

ad o

n. ji m en ez @
y Bytes 8 8 8 8 8 Class double double double double double Attributes

.u cm .es

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION

33

ventana de comandos y pulsar la tecla retorno de carro. Matlab permite elegir la forma en que los resultados se presenta por pantalla. Para ello se emplea el comando format. La siguiente tabla, resume los formatos m as com unmente empleados. Tabla 2.1: Formatos num ericos m as comunes en Matlab formato Comentario 123,5462 coma ja. Cinco d gitos 1,2355e + 002 coma otante. Cinco d gitos 12,123456789012300 coma ja. Quice d gitos 1,212345678901230e + 001 coma otante. Quice d gitos

Comando format short format short e format long format long e

2.1.3.

Vectores y matrices.

>> matriz23 =[ 1 3 4 ;3 5 -1] matriz23 = 1 3 o tambi en: >> matriz23 =[ 1 3 4 3 5 -1] matriz23 = 1 3 3 5 4 -1

ad o

En el primer caso, se empleado el punto y coma para separar las las y en el segundo se ha empleado el retorno de carro. En ambos se emplea el s mbolo [ para indicar a Matlab que queremos empezar a construir una matriz, y el s mbolo ] para indicar a Matlab que hemos terminado de construirla. Una vez construida, Matlab nos devuelve en la ventana de comandos la Matriz completa. Matlab nos permite adem as emplear cada elemento de una matriz como si se tratase de una variable, es decir, se puede asignar a los elementos de una matriz un valor num erico, el resultados de una operaci on o un valor guardado en otra variable: >> a=1 a =

Bo

rr

r,j

3 5

4 -1

ua

n. ji m en ez @

Una de las caracter stica m as interesantes de Matlab, es la posibilidad de crear f acilmente matrices. Se pueden crear de muchas maneras, la m as elemental de todas ellas, emplea el operador de asignaci on =, y los s mbolos especiales [, ], el punto y coma ; y la coma ,. Las matrices se crean introduciendo los valores de sus elementos por las, serados por comas o espacios. Una vez introducidos todos los elementos de una la, se a nade un punto y coma, o se pulsa el retorno de carro, y se a naden los elementos de la la siguiente. El siguiente ejemplo muestra como crear una matriz de de dos las y tres columnas:

.u cm .es

34

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1.00 >> b=2

2.00 >> mtr=[ a a+b a-b; 1 0.5 cos(0)] mtr = 1.00 1.00 >> 3.00 0.50 -1.00 1.00

Matlab considera las matrices como la forma b asica de sus variables, as para Matlab un escalar es es una matriz de una la por una columna. Un vector la de 3 elementos es una matriz de una la por tres columnas y Un vector columna de tres elementos es una matriz de tres las y una columna. Indexaci on. Al igual que se hace en algebra, Matlab es capaz de referirse a un elemento cualquiera de una matriz empleando ndices para determinar su posici on (la y columna) dentro de la matriz. a11 a12 a13 a = a21 a22 a23 a31 a32 a33

>> a=[1 2 3; 4 5 6; 7 8 9]

ad o

a =

Bo

>> a(1,2) ans =

>> a(2,1) ans =

rr

1.00 4.00 7.00

r,j

ua

El criterio para referirse a un elemento concreto de una matriz, en Matlab es el mismo: se indica el nombre de la variable que contiene la matriz y a continuaci on, entre par entesis y separados por una coma, el ndice de su la y despu es el de su columna:

2.00 5.00 8.00

2.00

n. ji m en ez @
3.00 6.00 9.00

.u cm .es

b =

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION

35

4.00 >> Es interesante observar de nuevo c omo Matlab asigna por defecto el valor del elemento buscado a la variable ans. Como ya se ha dicho, es mejor asignar siempre una variable a los resultados, para asegurarnos de que no los perdemos al realizar nuevas operaciones: >> a12=a(1,2) a12 = 2.00 >> a21=a(2,1) a21 = 4.00 >>

Ahora hemos creado dos variables nuevas que contienen los valores de los elementos a12 y a21 de la matriz a. Matlab puede seleccionar dentro de una matriz no solo elementos aislados, sino tambi en submatrices completas. Para ello, emplea un s mbolo reservado, el s mbolo dos puntos :. Este s mbolo se emplea para recorrer valores desde un valor inicial hasta un valor nal, con un incremento o paso jo. La sintaxis es: inicio:paso:fin, por ejemplo podemos recorrer los n umeros enteros de cero a 8 empleando un paso 2: >> 0:2:8 ans =

r,j

>>

Bo

rr

El resultado nos da la lista de los n umeros 0, 2, 4, 6, 8. Adem as, si no indicamos el tama no del paso, Matlab tomar a por defecto un paso igual a uno. En este caso basta emplear un u nico s mbolo dos puntos para separar el valor de inicio del valor nal: >> 1:5

ans = 1.00 >> 2.00 3.00 4.00 5.00

ad o

ua

n. ji m en ez @
2.00 4.00 6.00

s
8.00

.u cm .es

36

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Podemos emplear el s mbolo dos puntos, para obtener submatrices de una matriz dada. As por ejemplo si construimos una matriz de cuatro las por cinco columnas: >> 3 5 4 5 3 3 matriz=[1 2 4 5 6 -6 0 2 8 9 0 -1 2 0]

matriz = 1.00 3.00 4.00 3.00 >> 2.00 5.00 5.00 3.00 4.00 -6.00 8.00 -1.00 5.00 0.00 9.00 2.00

Podemos obtener el vector formado por los tres u ltimos elementos de su segunda la: >> fil=matriz(2,3:5) fil = -6.00 >>

O el vector columna formado por su segunda columna completa: >> matriz(1:4,2) ans = 2.00 5.00 5.00 3.00

>>

Bo

>> subm=matriz(2:4,3:5) subm = -6.00 8.00 -1.00 >> 0 9.00 2.00 2.00 0 0

rr

o la submatriz de tres las por tres columnas formada por los elementos que ocupan las las 2 a 4 y las columnas 3 a 5:

ad o

r,j

ua

n. ji m en ez @
2.00

.u cm .es
6.00 2.00 0.00 0.00

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION

37

As por ejemplo, en una matriz A de 3 las y 4 columnas, >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 2 1 0 1 3 -1 5 9 0 7 8

las expresiones, >> A(2,3) ans = 5 y >> A(8) ans = 5

hacen referencia al mismo elemento de la matriz A.

2.1.4.

Estructuras y c elulas

Bo

>> est.nombre=Ana est = nombre: Ana >> est.edad=25 est = nombre: Ana edad: 25

rr

obtenemos una estructura con dos campos, el primero de ellos es el campo nombre, y guarda dentro una cadena de caract eres Ana, el segundo es el campo edad y guarda dentro el valor 25. La estructura que acabamos de denir es una sola variable llamada es y podemos aplicar cualquier comando de matlab cuyo resultado no dependa del contenido espec co de la variable. Podemos copiarla en otra estructura,

ad o

Estructuras. Una estructura es una variable que guarda la informaci on divida en campos. Por ejemplo, si escribimos en la ventana de matlab,

r,j

Se trata de dos tipos de variables especiales. Ambas comparten la propiedad de poder combinar dentro de s variables de distintos tipos.

ua

n. ji m en ez @

.u cm .es

A parte de la indexaci on t pica del algebra de los elementos de una matriz indicando su la y columna, en Matlab es posible referirse a un elemento de una matriz empleando un u nico ndice. En este caso, Matlab cuenta los elementos por columnas, de arriba abajo y de izquierda a derecha, a1 a4 a7 A = a2 a5 a8 a3 a6 a9

38 >> est2=est est2 = nombre: ana edad: 25

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

>> clear est >> who Your variables are: est2 >>

El n umero de campos de una estructura puede aumentarse a nadiendo a su nombre, el nombre del nuevo campo separado por un punto y asignando un valor o una variable a dicho campo. >> est.campo_nuevo=[1 2;3 4; 6 7] est = nombre: ana edad: 25 campo_nuevo: [3x2 double] >> y=[1 2 3] y = 1 2 3 >> est.campo_nuevo2=y est = nombre: ana edad: 25 campo_nuevo: [3x2 double] campo_nuevo2: [1 2 3]

Podemos tambien eliminar campos de una estructura mediante el comando rmfield, >> est=rmfield(est,edad) est = nombre: ana campo_nuevo: [3x2 double] campo_nuevo2: [1 2 3]

Bo

Por u ltimo, una estructura no permite denir y utilizar varios niveles de campos. para ello, basta ir deniendo los nombres de los campos de un nivel separados por un punto del nombre del nivel anterior,

rr

ad o

r,j

ua

n. ji m en ez @

>> x=est.edad+12 x = 37

No podemos realizar sobre ella, como un todo, operaciones aritm eticas o relacionales, pero sobre sus campo,

.u cm .es

podemos borrarla,

DE MATLAB 2.1. EL ENTORNO DE PROGRAMACION >> multinivel.datos_personales.nombre=Ana multinivel = datos_personales: [1x1 struct] >> multinivel.datos_personales.primer_apellido=Jim enez multinivel = datos_personales: [1x1 struct] >> multinivel.datos_personales.segundo_apellido=Lasarte multinivel = datos_personales: [1x1 struct] >> multinivel.domicilio.calle=Ponzano multinivel = datos_personales: [1x1 struct] domicilio: [1x1 struct] >> multinivel.domicilio.numero=724 multinivel = datos_personales: [1x1 struct] domicilio: [1x1 struct] >> multinivel.valor=[3 4 5; 3.5 2 3] multinivel = datos_personales: [1x1 struct] domicilio: [1x1 struct] valor: [2x3 double]

39

La informaci on se encuentra ahora estructurada en niveles. As por ejemplo, >> multinivel.domicilio ans = calle: Ponzano numero: 724

>> multinivel.datos_personales.segundo_apellido ans = Lasarte

Bo

rr

Matlab tiene denidas funciones propias para conseguir un manejo eciente de las estructuras. A parte de la funci on rmfield de la que hemos hablado anteriormente, Cabe destacar la funcion struct que permite crear directamente una estructura. Su sintaxis es, s= struct(field1, values1, field2, values2, ...)

donde s representa el nombre de la estructura, field1,field2, etc son los nombres correspondientes a cada campo, introducidos entre comillas, y values1, etc los valores contendidos en cada campo. Para un conocimiento m as profundo del uso de las estructuras se aconseja consultar la ayuda de Matlab.

ad o

r,j

Me de devuleve el contenido del campo domicilio que es a su vez una estructura formada por dos campos calle y numero. La informaci on queda estrucuturada en nivles que pueden ramicarse tanto como se desee. Para obtener la informaci on contenida al nal de una rama, es preciso indicar todos los campos que se atraviesan hasta llegar a ella,

ua

n. ji m en ez @

.u cm .es

40

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

>> a={[1 2 3; 4 5 6; 7 8 9],cadena, -45;pepe, [1 2 3], cadena2} a = [3x3 double] cadena [ -45] pepe [1x3 double] cadena2

>> size(a) ans = 2 3

Y podemos referirnos a una celda cualquiera de la c elula, y obtener su contenido indicando entre llaves la la y la columna a la que pertenece. As por ejemplo, para obtener el vector [1, 2, 3] de la c elula a del ejemplo anterior hacemos, >> vector=a{2,2} vector = 1 2 3

2.2.

Bo

2.2.1.

Datos en formato propio de Matlab Matlab posee un formato de archivo propio para manejar sus datos. Los archivos de datos propios de Matlab, emplean la extensi on .mat. Si tenemos un conjunto de variables en el workspace, podemos guardarlas en un chero empleando el comando save, seguido del nombre del chero donde queremos guardarlos. No es preciso incluir la extensi on .mat, Matlab la a nade autom aticamente: >> save datos

rr

Matlab posee una amplia colecci on de m etodos para importar datos desde y exportar datos a un chero. A continuaci on describimos algunos de los m as usuales.

ad o

Entrada y salida de Datos

Exportar e importar datos en Matlab

r,j

Las celdas, de modo an alogo a como suced a con las estructuras, nos permiten agrupar datos de distinto tipo empleando una sola variable. Adem as, el hecho de que los datos ester ordenados por celdas en las y columna, hace sencillo que se puede acceder a ellos.

ua

n. ji m en ez @

Hemos creado una c elula a, cuyos elementos son, una matriz 3 3, la cadena de caracteres cadena, el n umero 45, otra cadena de caracteres pepe, el vector [1, 2, 3] y una u ltima cadena de caracteres cadena2. Los elementos separados por espacios o por comas simples, pertenecen a la misma la dentro de la c elula. Los elementos pertenecientes a distintas las est an separados por un punto y coma. Podemos obtener el tama no de la c elula su n umero de las y columnas empleando el comando size , igual que hicimos para el caso de vectores o matrices,

.u cm .es

C elulas. Las c elulas, cells en Matlab, son objetos que almacenan datos de diversos tipos en una misma variable. A diferencia de las estructuras, las c elulas no expanden un arbol de campos sino que guardan cada dato en una celda. Para referirse a una celda concreta, empleamos un ndice, de modo an alogo a como hacemos con un vector. Para construir una c elula, procedemos de modo an alogo a como hacemos con un vector, pero en lugar de emplear corchetes como delimitadores, empleamos llaves. As , por ejemplo,

2.2. ENTRADA Y SALIDA DE DATOS

41

>>save datos1 A

matriz_1 B

carga en el workspace las variables contenidas en el chero datos.mat, la extensi on del chero puede omitirse al emplear la funci on load. Si conocemos los nombres de las variables contenidas en un archivo .mat, podemos cargar en Matlab solo una o varias de las variables contenidas en el archivo, escribiendo sus nombres, separados por espacios, detr as del nombre del archivo: >>load datos A G matriz1

cargar a tan solo las variables A, G y matriz1, de entre las que contenga el cheros datos.mat Datos en Formato ASCII Se puede emplear tambi en el comando save para exportar datos en formato ASCII. Pare ello es preciso a nadir al comando modicadores, >>save datos.txt A -ASCII

Bo

rr

>>save nombre_Archivo matriz_1, matriz2, ... -ASCII -DOUBLE Supongamos que en workspace tenemos guardada la siguiente matriz, 1,300236890000000e + 000 4,000230000000000e + 003 3,456983000000000e + 000 1,245677000000000e + 001 4,321678000000000e + 006 1,231565670000000e + 002

Si ejecutamos en Matlab, >>save datos.txt a -ASCII El chero resultante tendr a el aspecto siguiente,

ad o

Este comando guardar a la variable A en el chero datos.txt. Matlab no a nade ninguna extensi on por defecto al nombre del chero cuando empleamos el comando save con el modicador -ASCII. En este caso, hemos a nadido expl citamente la extensi on .txt, esto facilita que el archivo resultante se pueda examinar luego empleando un sencillo editor de texto o una hoja de c alculo. Cuando se exportan datos desde Matlab en formato ASCII, Matlab guarda tan solo los valores num ericos contenidos en las variables, pero no los nombres de estas. Por otro lado, guarda tan solo ocho d gitos, por lo que habitualmente se pierde precisi on. Es posible guardar datos en formato ASCII si a nadimos al comando save el modicador -DOUBLE,

a=

r,j

ua

n. ji m en ez @

load datos.mat

La instrucci on anterior guarda en un archivo llamado datos1.mat las variables A, matriz1 y B. Los datos contenidos en cualquier chero .mat generado con el comando save de Matlab, pueden volver a cargarse en el workspace empleando el comando load, seguido del nombre del chero cuyos datos se desean cargar:

.u cm .es

Matlab crear a en el directorio de trabajo un nuevo chero datos.mat en el que quedar an guardadas todas las variables contenidas en el workspace. Los cheros .mat generados por Matlab est an escritos en binario. No se puede examinar su contenido empleando un editor de textos. Matlab almacena toda la informaci on necesaria nombre de las variables, tipo, etc para poder volver a reconstruir las variables en el workspace tal y como estaban cuando se gener o el archivo. Es posible guardar tan solo algunas de las variables contenidas en el workspace en lugar de guardarlas todas. Para ello, basta a nadir al comando save, el nombre de las variables que se desean guardar, separadas entre s por un espacio

42 1.3002369e+00 4.0002300e+03

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION 3.4569830e+00 1.2456770e+01 4.3216780e+05 1.2315657e+02

La orden,

>>save datos.txt c A a -ASCII

produce el un archivo con el siguiente contenido, 3.0000000e+00 1.0000000e+00 4.0000000e+00 3.0000000e+00 3.0000000e+00 2.0000000e+00 8.0000000e+00 2.0000000e+00 3.0000000e+00 5.6000000e+00 0.0000000e+00 5.0000000e+00 1.0000000e+00 0.0000000e+00

Lectura y escritura de datos con formato Matlab puede tambi en escribir y leer datos, empleando formatos y procedimientos similares a los de el lenguaje C. Para ello, es preciso emplear varios comandos1 : En primer lugar es preciso crear o si ya existe abrir el archivo en que se quiere guardar o del que se quieren leer los datos. En ambos casos se emplea para ello el comando fopen. La sintaxis de este comando es de la forma, fid=fopen(nombre de fichero, permisos)
1 Lo que se ofrece a continuaci on es solo un resumen del uso de los comandos y formato m as frecuentes. Para obtener una informaci on completa, consultar la ayuda de Matlab.

Bo

rr

ad o

El comando load, presenta algunas limitaciones para cargar datos contenidos en un chero ASCII. Solo funciona correctamente si el contenido del chero puede cargarse en una u nica matriz, es decir, cada la de datos en el chero debe contener el mismo n umero de datos. As , en el ejemplo anterior, los datos guardados en el chero datos.txt, no pueden volver a cargarse en Matlab usando el comando load. Para el caso de un chero cuyos contenido pueda adaptarse a una matriz, el comando load carga todos los datos en una u nica matriz a la que asigna el nombre del chero sin extensi on.

r,j

ua

n. ji m en ez @
4.0000000e+00 2.0000000e+00 1.0000000e+00

es decir, los elementos de una misma la de la matriz a se guardan en una la separados por espacios, las las de la matriz se separan empleando retornos de carro cada una ocupa una linea nueva y los valores cuyos d gitos signicativos exceden de 8 se han truncado, redondeando el u ltimo d gito representado. Este u ltimo es el caso de los elementos a11 y a33 de la matriz del ejemplo. Cuando se guardan varias variables o todo el workspace en un mismo chero con formato ASCII, es preciso tener en cuenta que Matlab se limitar a a guardar los contenidos de las variables, uno debajo de otro, en el orden en que las escribamos detr as del comando save (en el caso de que guardemos todas las variables del workspace las guardar a una debajo de otra por orden alfab etico), por lo que resulta dif cil distinguir las variables originales. As por ejemplo, si tenemos en el workspace las variables, 3 5 1 3 4 A = 2 1 a = 4 5,6 2 c = 3 2 8 0 3 0 1

.u cm .es

2.2. ENTRADA Y SALIDA DE DATOS

43

control=fprintf(fichero1,formato,nombre_de_variable,...)

Los descriptores de formato se escriben entre ap ostrofos. Empiezan siembre con el car acter %, seguido de un n umero con formato e.d. Donde e es el n umero m nimo de d gitos empleados para guardar cada dato y e el n umero de decimales, por u ltimo se a nade un car acter, conocido como car acter de conversi on, que permite ajustar el formato num erico de los datos. Los m as usuales son: f notaci on de punto jo, e notaci on exponecial y g la notaci on que resulte m as compacta de las dos anteriores. Aqu hemos incluido solo los caracteres de conversi on m as usuales para el caso de datos num ericos. Cabe a nadir que para el caso de una cadena de caracteres se emplea como car acter de conversi on la letra s. Por ejemplo: >>A=mi cadena de caracteres >>num=fprinf(fid,%s, A) Escribe el texto contenido en el vector A en el archivo indicado por fid. Matlab, almacena los datos consecutivamente uno detr as de otro. Si se trata de matrices, los va leyendo por columnas y una variable tras otra en el orden en que se hayan introducido al llamar a la funci on fprintf. Para separar entre s los datos se puede a nadir a los descriptores de formatos, espacios y tambi en caracteres de escape como Retornos de carro \r, indicadores de salto de l nea \n o tabuladores \t, entre otros. Por ejemplo, supongamos que tenemos en Matlab las siguiente matrices 3,25 5,22 1,2345 3,0879 4234,2 5000,6 223 c = 30 2 A = 23,1 130,5 a = 40 8 0 3 0 1

Bo

rr

>>num=fprinf(fid,%2.1f, A, a c) Los datos se guardar an en el archivo indicado por fid en la siguiente forma: 3.223.15.2130.51.240.03.15000.64234.2223.030.00.0

ad o

Si empleamos,

r,j

ua

n. ji m en ez @

Para escribir en el emplearemos el comando fprintf. La sintaxis de este comando necesita un identicador de archivo en nuestro caso ser a chero1, un descriptor del formato con en que se desean guardar los datos y el nombre de la variable que se desea guardar.

fichero1=fopen(mi_fichero,wt)

.u cm .es

. El nombre del chero debe ser una cadena de caracteres, es decir, debe ir escrito entre ap ostrofos. Hay al menos ocho tipos de permisos distintos, para una descripci on detallada consultar la ayuda de Matlab. Aqu describiremos tan solo tres de ellos, w write abre o crea un archivo con permiso de escritura. Si el archivo ya exist a su contenido anterior se sobreescribe. Si se quiere a nadir datos a un archivo sin perder su contenido se emplea el modicador a append los nuevos datos introducidos se escriben al nal del chero, a continuaci on de los ya existentes. r read permiso de lectura, es la opci on por defecto, permite leer el contenido de un archivo. Cuando se trabaja en el sistema operativo Windows, es com un emplear los permisos en la forma wt y rt, de esto modo, los archivos se manejan en el denominado formato texto. La variable fid, es un identicador del chero abierto y es tambi en la forma de referirnos a el en un programa, o en la l nea de comandos mientras permanece abierto. Supongamos que hemos abierto o creado un archivo para escribir en el, datos contenidos en el workspace,

44

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION Guardados en este formato resulta bastante dif cil reconocerlos. Si probamos,

>>num=fprinf(fid,%2.1f , A, a c) El resultado ser a,

El formato es de punto jo y los datos aparecen separados por un espacio n otese que en el descriptor de formato se ha incluido un espacio entre la f y el ap ostrofo. Los datos de las tres matrices aparecen uno detr as de otro, y se han ido escribiendo en el archivo por columnas Si cambiamos de nuevo el descriptor de formato, >>num=fprinf(fid,%2.3g\n, A, a c) obtendremos, 3.25 23.1 5.22 130 1.23 40 3.09 5e+03 4.23e+03 223 30 0.0002

>>num=fprinf(fid,%2.3g %2.3g %2.3g\n, a)

1.23 40 3.09 5e+03 4.23e+03 223

Bo

>>num=fprinf(fid,%2.3g %3f %2.3f\n, a) 1.23 40.000000 3.088 5e+03 4234.200000 223.000 Por u ltimo indicar, que si se emplea el comando fprintf sin emplear un identicador de archivo o empleando como identicador el valor 1. Matlab escribe el resultado directamente en la ventana de comandos con el formato deseado. Por ejemplo,

rr

Es decir cada tres datos cambia a una l nea nueva. Por supuesto, podr amos hacer que los datos se guardaran con un formato distinto en cada caso,

ad o

Guarda los datos contenidos en a como,

r,j

ua

Matlab elige el formato m as compacto para cada dato, y guarda cada dato en una la nueva, debido al t ermino \n introducido al nal del descriptor. Por u ltimo indicar que es posible emplear varios descriptores consecutivos, en cuyo caso, Matlab los aplica a cada dato consecutivamente, cuando ha terminado con la lista de descriptores, comienza de nuevo por el principio. Por ejemplo,

n. ji m en ez @

.u cm .es

3.2 23.1 5.2 130.5 1.2 40.0 3.1 5000.6 4234.2 223.0 30.0 0.0

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS >>B = [8.8 7.7; 8800 7700]; >>fprintf(1, X is %6.2f metros o %8.3f mm\n, 9.9, 9900, B) Mostrar a en la ventana de comandos las siguientes l neas:

45

Para cargar archivos desde un chero que contiene datos en binario, se emplea el comando fscanf. Su uso es similar al de fprintf, pero ahora los datos pasar an desde el chero donde est an guardados a una matriz. >>A=fscanf(pid,%f)

Lee como m aximo M datos del chero y los guarda en un vector a. Es posible dar a los datos formato de matriz, mediante dos par ametros (la y columna), a=fscanf(fid,%5.2f,[M,N])

Ahora crear a una matriz a de M las por N columnas. Matlab ir a cogiendo los datos del chero, por columnas hasta rellenar la matriz. Es posible dar al segundo par ametro el valor inf. De este modo, Matlab crear a una matriz de M las y el n umero de columnas necesario para cargar todos los datos del chero. (Si faltan elementos para completar la matriz resultante, Matlab rellena los huecos con ceros) Por u ltimo, una vez que se han escrito o le do datos en el chero es preciso cerrarlo correctamente empleando el comando fclose, la sintaxis de este comando solo precisa que se incluya el identicador del chero que se quiere cerrar, >>fclose(pid)

Bo

Herramienta de importaci on de datos Matlab posee una herramienta especial para importar datos. Con ella, es posible cargar en Matlab datos de muy diverso tipo, no s olo num ericos sino tambi en im agenes, sonido, etc. Una de las ventajas de esta herramienta es que reconoce directamente entre otros los archivos creados por las hojas de c alculo. Para abrir en Matlab la herramienta de importaci on, basta seleccionar en la pesta na le la opci on Import Data. Matlab abre entonces una ventana que nos permite navegar por el arbol de directorio y seleccionar el archivo del que deseamos importar los datos. Una vez seleccionado, Matlab abre la ventana mostrada en la imagen 2.3. Se trata de un programa especial import wizard que sirve para guiar al usuario en el proceso de cargar las variables contenidas en el chero en el workspace de Matlab.

rr

2.3.
2.3.1.

Una vez que sabemos como crear o importar variables en Matlab, vamos a ver como podemos realizar operaciones aritm eticas elementales con ellas. La sintaxis es muy sencilla, y podemos

ad o

Operaciones aritm eticas, relacionales y l ogicas


Operaciones aritm eticas

r,j

ua

n. ji m en ez @

a=fscanf(fid,%5.2f,M)

EL comando fscanf, admite como par ametros el n umero m aximo de datos que se leer an del chero,

.u cm .es

X is 9.90 metros o 9900.000 mm X is 8.80 metros o 8800.000 mm X is 7.70 metros o 7700.000 mm

46

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Figura 2.3: Aspecto de la herramienta de importaci on de datos sintetizarla de la siguiente manera:

resultado = operando1 operador1 operando2 operador2 operando3 operandon1 operadorn Es decir basta concatenar los operadores con los operandos y denir una variable en la que guardar el resultado. Por ejemplo, >>x=1; y=2; z=3; q=x+y+z >>z=6

>> A=[1 2 3; 4 5 6; 7 8 9]

Bo

A =

rr

1 4 7

>> B=[4 5 6; 2 0 3; -1 2 4]

ad o

En este caso los operandos son las variables x, y, z, el operador, que se repite dos veces es el s mbolo + que representa la operaci on suma y q es la variable en la que se guarda el resultado, en este caso, de la suma de las tres variables anteriores. Los operadores aritm eticos disponibles en Matlab cubren las operaciones aritm eticas habituales, pero hay que recordar que Matlab considera sus varibles como matrices. Por lo tanto, las operaciones denidas Matlab las considera por de defecto operaciones entre matricee. La tabla 2.2 contiene los operadores denidos en Matlab. A continuaci on, veremos algunos ejemplos de manejo de operaciones b asicas. Hemos visto ya el manejo de la suma. Si se trata de matrices en vez de n umeros,

2 5 8

r,j

3 6 9

ua

n. ji m en ez @

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

47

B = 4 2 -1 >> C=A+B C = 5 20 35 11 32 53 24 63 102 5 0 2 6 3 4

A = 1 4 7

ad o

Bo

rr

>> B=[4 5 6; 2 0 3] B = 4 2 5 0 6 3

>> C=A+B Error using + Matrix dimensions must agree.

r,j

>> A=[1 2 3; 4 5 6; 7 8 9]

2 5 8

ua

Por supuesto, hay que respetar las condiciones en que es posible realizar una operaci on aritm etica entre matrices la operaci on,

3 6 9

n. ji m en ez @

.u cm .es

Tabla 2.2: Operadores aritm eticos denidos en Matlab operaci on s mbolo ejemplo notas suma + r=a+b suma matricial diferencia producto * r=a*b producto matricial producto .* r=a.*b producto por elementos divisi on / d=a/b Divisi on: a b1 divisi on ./ d=a./b Divisi on por elementos divisi on \ d=a\b divisi on por la izquierda: a1 b potenciaci on ^ y=a ^ b potencia de una matriz potenciaci on .^ y=a .^ b potencia elemento a elemento trasposici on y=a matriz traspuesta

48

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Da un error porque solo es posible sumar matrices del mismo tama no2 En el caso del producto, Matlab de ne dos operaciones distintas. La primera es el producto matricial normal, >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 4 7 2 5 8 3 6 9

>> B=[3 4; -2 1; 6 7] B = 3 -2 6 >> P=A*B P = 17 38 59 27 63 99 4 1 7

El segundo producto, no es propiamente una operaci on aritm etica denida sobre matrices. Se trata de un producto realizado elemento a elemento. Para ello los dos factores deben ser matrices del mismo tama no. El resultado es una nueva matriz de igual tama no que las iniciales en la que cada elemento es el producto de los elementos que ocupaban la misma posici on en las matrices factores, >> B=[2 3 4; 1 2 3] B = 2 1 3 2 4 3

>> C=A.*B C = 2 4

rr

Bo

En general, cualquier operador al que se antepone un punto .* ./ .^ indica una operaci on realizada elemento a elemento. La divisi on no est a denida para matrices. Sin embargo, en Matlab hay denidas tres divisiones. La primera, emplea el s mbolo cl asico de divisi on, para s mples n umeros realiza la divisi on normal. Para matrices, la operaci on es equivalente a multiplicar el primer operando por la matriz inversa del segundo. A/B A B 1 . Las siguientes tres operaciones son equivalentes en Matlab, aunque
2 Ver

las deniciones de las operaciones matriciales en el capitulo 5.2.

ad o

6 10

r,j

12 18

ua

n. ji m en ez @

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

49

desde el punto de vista de como realiza el c alculo para obtener el resultado, son num ericamente distintas, >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 4 7 2 5 8 3 6 9

>> B=[2 0 1; 3 2 -1; -2 0 2] B = 2 3 -2 >> C=A/B C = 0.6667 1.6667 2.6667 >> C=A*inv(B) C = 0.6667 1.6667 2.6667 >> C=A*B^-1 C = 0.6667 1.6667 2.6667 1.0000 2.5000 4.0000 1.0000 2.5000 4.0000 0 2 0 1 -1 2

r,j

Bo

En el primer caso se empleado la divisi on, en el segundo se a multiplicado la matriz A por la inversa de B, calcul andola mediante la funcion de Matlab inv, y en el tercer caso se ha multiplicado la matriz A por B elevado a 1. La divisi on elemento a elemento, funciona de modo an alogo a como lo hace la m ultiplicaci on elemento a elemento. La divisi on por la izquierda, representada mediante el s mbolo \ es equvalente a multiplicar la inversa del primer operando por el segundo, A\B A1 B . >> A=[1 2 3; 4 5 6; 3 -4 9] A = 1 2 3

rr

ad o

1.0000 2.5000 4.0000

ua

n. ji m en ez @
1.6667 3.4167 5.1667 1.6667 3.4167 5.1667 1.6667 3.4167 5.1667

.u cm .es

50 4 3 5 -4

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION 6 9

>> B=[2 0 1; 3 2 -1; -2 0 2] B = 2 3 -2 >> C=A\B C = -0.9000 0.8000 0.4333 >> C=A^-1*B C = -0.9000 0.8000 0.4333 1.0000 0.0000 -0.3333 1.0000 0 -0.3333 -1.5500 0.1000 0.7833 0 2 0 1 -1 2

-1.5500 0.1000 0.7833

>> C=inv(A)*B C = -0.9000 0.8000 0.4333 1.0000 0.0000 -0.3333

-1.5500 0.1000 0.7833

Uno de los usos t picos de la divisi on por la izquierda, es la resoluci on de sistema de ecuaciones lineales (ver tema 6). Por ejemplo, dado el sistema de ecuaciones,

r,j

ua

n. ji m en ez @
A x b

Podemos resolverlo en Matlab con una sencilla divisi on por la izquierda, >> A=[3 2 -4; 2 1 3; 1 3 2]

Bo

A =

rr

3 2 1

>> b=[3;-3;-7] b =

ad o

3x1 + 2x2 4x3 = 3 3 2x1 + x2 + 3x3 = 3 2 1 x1 + 3x2 + 2x3 = 7

2 1 3

4 x1 3 3 x2 = 3 2 x3 7

2 1 3

-4 3 2

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

51

3 -3 -7

1 -2 -1

>> A=[3 0 -1; 2 1 0; 1 3 2] A = 3 2 1 >> A^3 ans = 13 24 54 >> A*A*A ans = 13 24 54 -18 -5 18 -18 -12 -5 0 1 3 -1 0 2

Bo

rr

La exponenciaci on elemento a elemento eleva cada elemento de la matriz al valor que indique el exponente. Trasponer una matriz es obtener una nueva matriz intercambiando las las con las columnas de la matriz original, (ver cap tulo 5.2). As por ejemplo, >> A=[3 0 -1 0; 2 1 0 0] A = 3 2 0 1 -1 0 0 0

ad o

-18 -5 18

r,j

-18 -12 -5

ua

n. ji m en ez @

Aunque la potenciaci on en Matlab tiene m as usos, solo consideraremos el caso de una matriz elevada a un n umero. El resultado ser a multiplicar la matriz por si misma tantas veces como indique el exponente, A3 = A A A,

.u cm .es

>> x=A\b x =

52

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

>> B=A B = 3 0 -1 0 2 1 0 0

Las matrices A y B son traspuestas entre s .

2.3.2.

Precedencia de los operadores aritm eticos

Combinando operadores aritm eticos, es posible elaborar expresiones complejas. Por ejemplo, R=5*3-6/3+2^3+2-4

La pregunta que surge inmediatamente es en qu e orden realiza Matlab las operaciones, ones indicadas. Para evitar ambig uedades, Matlab, como todos los lenguajes de programaci on, establece un orden o de precedencia, que permite saber exactamente en qu e orden se realizan las operaciones. En Matlab el orden de precedencia es: 1. En primer lugar se realizan las exponenciaciones.

2. A continuaci on los productos y las divisiones, que tienen el mismo grado de precedencia. 3. Por ultimo, se realizan las sumas y las restas.

Por tanto, en el ejemplo que acabamos de mostrar , Matlab calcular a primero, 2^3=8

a continuaci on el producto y la divisi on

Por u ltimo sumar a todos los resultados intermedios, y guardar a el resultado en la variable R 15-2+8-4=17 R=17

Bo

Uso de par entesis para alterar el orden de precedencia. Cuando necesitamos escribir una expresi on complicada, en muchos casos el necesario alterar el orden de precedencia. Para hacerlo, se emplean par entesis. Sus reglas de uso son b asicamente dos: La expresiones entre par entesis tienen precedencia sobre cualquier otra operaci on. Cuando se emplean par entesis anidados (unos dentro de otros) los resultados siempre se calculan del par entesis m as interno hacia fuera. Por ejemplo,

rr

ad o

r,j

5*3=15 6/3=2

ua

n. ji m en ez @

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS >> y=2+4/2 y = 4

53

y = 3

Que en Matlab podr a expresarse como, h=(c1^2+c2^2)^(1/2)

O la expresi on general para obtener las ra ces de una ecuaci on de segundo grado, x= b (b2 4 a c) 2 2a
1

en este caso no es preciso dividir el c alculo en dos expresiones, una para la ra z positiva, x=(-b+(b^2-a*c)^(1/2))/(2*a) y otra para la ra z negativa x=(-b-(b^2-a*c)^(1/2))/(2*a) Es preciso ser cuidadosos a la hora de construir expresiones que incluyen un cierto n umero de operaciones. As , en el ejemplo que acabamos de ver, el par entesis nal 2*a es necesario; si se omite, Matlab multiplicar a por a el resultado de todo lo anterior, en lugar de dividirlo.

Bo

rr

2.3.3.

Aunque son distintas las operaciones relacionales y las l ogicas estas estrechamente relacionadas entre s . Al igual que en el caso de las operaciones aritm eticas, en las operaciones relacionales y l ogicas existen operandos, variables sobre las que se efect ua la operaci on y operadores, que indican cual es la operaci on que se efect ua sobre los operandos. La diferencia fundamental es que tanto en el caso de las operaciones relacionales como l ogicas el resultado solo puede ser 1 (cierto) o 0 (falso).

ad o

Operaciones Relacionales y l ogicas.

r,j

ua

n. ji m en ez @
2 2 h = (c2 1 + c2 )
1

En la primera operaci on, el orden de precedencia de los operadores hace que Matlab divida primero 4 entre 2 y a continuaci on le sume 2. En el segundo caso, el par entesis tiene precedencia; Matlab suma primero 2 y 4 y a continuaci on divide el resultado entre 2. El uso correcto de los par entesis para alterar la precedencia de los operadores, permite expresar cualquier operaci on matem atica que deseemos. Por ejemplo calcular la hipotenusa de un tri angulo rect angulo a partir de valor de sus catetos,

.u cm .es

>> y=(2+4)/2

54

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Operadores relacionales. La tabla 2.3 muestra los operadores relacionales disponibles en Matlab. Su resultado es siempre la verdad o falsedad de la relaci on indicada. Los operadores relacionales pueden trabajar sobre matrices de igual tama no, en ese caso la operaci on se realiza elemento a elemento y el resultado es una matriz de unos y ceros. Por ejemplo

>> B=[2 0 1; 3 2 -1; -2 0 2] B =

Bo

2 3 -2 >> C=A>B C = 1 0 1

rr

ad o

0 2 0

0 0 1

r,j

3 2 1

0 1 3

-1 0 2

1 -1 2

0 1 0

ua

>> A=[3 0 -1; 2 1 0; 1 3 2] A =

n. ji m en ez @

Tabla 2.3: Operadores relacionales denidos en Matlab s mbolo ejemplo notas < r=a<b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz mayor que > r=a>b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz mayor o igual que >= r=a>=b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz menor o igual que <= r=a<=b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz igual a == a==b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz Distinto de a~=b a~=b Compara matrices elemento a elemento o un escalar con todos los elementos de una matriz Especicadores todos all r=all(a) Verdadero si todas las columnas de una matriz son verdaderas alguno any r=any(a) Verdadero si alguna(s) columna(s) de una matriz Verdadera(s) encontrar find r=find(a) Devuelve como resultado los ndices de los elementos verdaderos operaci on menor que

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

55

>> r=3<=7 r = 1

>> A A = 3 2 1 0 1 3 -1 0 2

>> menor_que_tres=A<3 menor_que_tres = 0 1 1 1 1 0 1 1 1

>> distinto_de_tres=A~=3 distinto_de_tres =

ad o

0 1 1

Bo

rr

>> igual_a_tres=A==3 igual_a_tres = 1 0 0 0 0 1 0 0 0

Es importante se nalar que el operador relacional que permite comparar si dos variables son iguales es == (doble igual), no confundirlo con el igual simple = empleado como sabemos como s mbolo de asignaci on. En cuanto a la tilde,~, empleadad en el operardor ~=, se obtiene en Matlab

r,j

1 1 0

ua

1 1 1

n. ji m en ez @

Los operadores relacionales admiten tambi en que uno de sus operando sea un escalar y el otro una matriz, En este caso, Matlab compara el escalar con todos los elementos de la matriz y guarda el resultado en una matriz del mismo tama no,

.u cm .es

La matriz C contiene el resultado l ogico de comprobar uno a uno si los elementos de A son mayores que los elementos de B; como el elemento A(1,1) es mayor que B(1,1), la relaci on es cierta. por tanto el resultado C(1,1) es uno. La relaci on, en este caso ser mayor que se va comprobando elemento a elemento a elemento y su verdad o falsedad se consigna en el elemento correspondiente de la matriz resultado. Por supuesto, si se comparas dos valores escalares el resultado es un tambi en un escalar,

56

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

pulsando la tecla 4 mientras se mantien pulsada la tecla alt gr. la tilde en Matlab representa la negaci on l ogica. As por ejemplo si escribimos en Matlab, >> ~1 ans =

>> ~0 ans = 1

salida=any(entrada)

Si introducimos como entrada un vector la o un vector columna, la funci on any, devolver a un uno a la salida, si al menos uno de los elementos del vector de entrada es distinto de cero y devolver a un cero si todos los elementos del vector de entrada son ceros >> s=[1 -2 0 2] s = 1 -2 0 2

>> r=any(s) r = 1 >> s=zeros(3,1) s =

Bo

>> r=any(s) r =

Si introducimos como variable de entrada una matriz, la funci on any buscar a si hay alg un valor distinto de cero por columnas de la matriz de entrada. La salida de la funci on any ser a entonces un vector la con el mismo n umero de columnas que la matriz de entrada. Cada elemento del vector

rr

0 0 0

ad o

r,j

ua

n. ji m en ez @

Si negamos el uno (verdadero) nos da cero (falso) y viceversa. Hablaremos por u ltimo de los especicadores, incluidos en la parte inferior de la tabla 2.3. No son operadores. Se trata de funciones denidas en Matlab. La funci on any toma como variable de entrada una matriz. Como veremos en la secci on siguiente, esto se indica colocando el nombre de la variable de entrada, a continuaci on del nombre de la funci on entre par entesis. La salida de la funci on, entendiendo por tal el valor devuelto por la misma, se puede guardar en una variable mediante el s mbolo de asignaci on,

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

57

salida toma valor uno, si la columna correspondiente de la matriz de entrada tiene al menos un valor distinto de cero y toma valor cero si todos los elementos de dicha columna son cero. Por ejemplo, Si denimos en Matlab una matriz, >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 2 1 0 1 3 -1 0 0 0 0 0

y le aplicamos la funci on any, >> r=any(A) r = 1 1 1 0

El primer elemento del vector resultante es 1, puesto que todos los elementos de la primera columna de A son cero. El segundo tambi en es uno, porque al menos dos de los elementos de la segunda columna de A son distintos de cero, lo mismo sucede con la tercera que tiene un elemento distinto de cero. Solo el u ltimo elemento de la respuesta es cero ya que todos los elementos de la u ltima columna de A son cero. La funci on all funciona de modo an alogo a any, pero en este caso, el vector resultante toma valor uno si todos los elementos de la columna correspondiente de la matriz de entrada son distintos de cero. Si aplicamos all a la misma matriz del ejemplo anterior, >> r=all(A) r = 1 0

Bo

rr

Solo el primer elemento del vector salida r es ahora distinto de cero, ya que la matriz A tiene ceros en todas sus columnas menos en la primera. Queda por se nalar que ambas funciones pueden operar por las en lugar de hacerlo por columnas. De hecho la funci on admite un segundo par ametro de entrada que se introduce detr as de la matriz de entrada y separado por una coma, si dicho par ametro vale 1 (o se omite, como hemos hecho en los ejemplos anteriores), la funci on operan por columnas. Si a dicho par ametro se le da valor 2, la funci on opera por las, >> r=any(A,2) r = 1 1 1

>> r=all(A,2) r =

ad o

r,j

ua

n. ji m en ez @
0

.u cm .es

58

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

0 0 0 En este caso las funciones nos devuelven vectores columnas que indican si en la la correspondiente de la matriz de entrada hay alg un elemento distinto de cero (caso del funci on any) o si todos los elementos son distintos de cero (caso de la funci on all). La utilidad de esta dos funciones que acabamos de describir se ve m as clara cuando la combinamos con el uso de los operadores relacionales. por ejemplo, >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 2 1 >> C=A>2 C = 1 0 0 0 0 1 0 0 0 0 0 0 0 1 3 -1 0 0 0 0 0

>> r1=any(C) r1 = 1 1 0

>> r=any(r1) r =

Bo

Mediante el uso del operador > y de la funci on any, hemos comprobado que en la matriz A hay al menos alg un elemento distinto de cero. Por supuesto, esto podemos hacerlo en una sola sentencia, combinado operadores y funciones, >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 2 1 0 1 3 -1 0 0 0 0 0

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS

59

>> r=any(any(A>2)) r = 1 Como un segundo ejemplo, vamos a comprobar si todos los elementos de la matriz A son menores que 4, >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 2 1 0 1 3 -1 0 0 0 0 0

>> r=all(all(A<4)) r = 1

Por u ltimo insistir en que, si no se indica otra cosa,any and all, trabajan buscando los valores distintos de cero por columnas. As por ejemplo la sentencia, >> r=any(all(A>2)) r = 0

compruebas si en alguna de las columnas de A todos los elementos son menores que 2. y la sentencia, >> r=all(any(A>-1)) r = 1

Bo

comprueba si en todas las columnas de A hay alg un elemento mayor que 1. La u ltima de las funciones incluidas en la tabla 2.3 es la funci on find. Esta funci on admite como variable de entrada una matriz. Si se la llama con una sola variable de salida, devuelve un vector con los indices de los elementos de la matriz que son distintos de cero. Si se la llama con dos variables de salida en la primera devuelve un vector con el ndice de las las de los elementos de la matriz distintos de cero, y en la segunda variable devuelve un vector con los indices de las correspondientes columnas de los elementos de la matriz distintos de cero, >> A A = 1 0 1 0 1 1 1 1 0

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

60

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

>> indice=find(A) indice = 1 3 5 6 7 8

Los elementos 1, 3 ,5 6, etc, de la matriz A son distintos de cero (ver indexaci on con un u nico indice 2.1.3)

fila = 1 3 2 3 1 2

columna = 1 1 2 2 3 3 >>

Los elementos (1,1), (3,1), (2,2), etc, de la matriz A son distintos de cero. Podemos combinarlos con otros operadores relacionales para conocer qu e elementos de una matriz cumplen una determinada condici on Por ejemplo >> A=[3 0 -1 0; 2 1 0 0; 1 3 0 0] A = 3 0 -1 2 1 0 1 3 0 >> indice=find(A~=0) indice = 0 0 0

Bo

rr

ad o

r,j

ua

n. ji m en ez @

>> [fila,columna]=find(A)

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS 1 2 3 5 6 7

61

Nos permite conocer los ndices de los elementos de A que son distintos de cero.

operaci on and or or exclusivo negaci on

Tabla 2.4: Operadores l ogicos elemento a elemento s mbolo ejemplo notas & r=a&b Operaci on l ogica and entre los elementos de a y b | r=a|b Operaci on l ogica or entre los elementos de a y b xor() r=xor(a,b)>=b Operaci on l ogica or exclusivo entre los elementos de a y b ~ r=~a complemento de los elementos de a

En cuanto a su funcionamiento, son los operadores t picos del algebra de Bool. As el operador & sigue la tabla de verdad propia de la operaci on and, el resultado solo es verdadero (1) si sus operandos son verdaderos (1)3 , Tabla de verdad de la operaci on and operando 1 operando 2 Resultado 1 1 1 1 0 0 0 1 0 0 0 0 As por ejemplo,

Bo

rr

>> A=[1 0 1; 0 1 1;1 1 0] A = 1 0 1 0 1 1 1 1 0

>> B=[1 1 1; 0 0 1; 1 0 1] B =
3 En

ad o

realidad Matlab considerar a verdadero cualquier operando distinto de 0

r,j

ua

n. ji m en ez @

Operadores L ogicos En Matlab se distinguen tres conjuntos de operadores l ogicos seg un el tipo de variable sobre la que act uen. Aqu vamos a ver solo dos de ellos: los operadores l ogicos elemento a elemento y los operadores l ogicos para escalares. La tabla 2.4 muestra los operadores l ogicos elemento a elemento. Estos operadores l ogicos esperan que sus operando sean matrices de igual tama no, aunque pueden actuar tambi en sobre escalares. El resultado, es una matriz del mismo tama no que los operandos, compuesta por ceros y unos, que son el resultado de la operaci on l ogica realizada entre los elementos de operandos.

.u cm .es

62

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1 0 1 >> R=A&B R = 1 0 1

1 0 0

1 1 1

0 0 0

1 1 0

Tabla de verdad de la operaci on or operando 1 operando 2 Resultado 1 1 1 1 0 1 0 1 1 0 0 0

En este caso, el resultado es cierto si cualquiera de los dos operando es cierto. Si lo aplicamos a las matrices del ejemplo anterior, >> r=A|B r = 1 0 1 1 1 1 1 1 1

Bo

Tabla de verdad de la operaci on or operando 1 operando 2 Resultado 1 1 0 1 0 1 0 1 1 0 0 0

Es decir la salida solo es verdedera cuando una de las entradas en verdadera y la otra no. Esta operaci on solo existe en Matlab con formato de funci on. Usando de nuevo el ejemplo anterior, >> r=xor(A,B)

rr

ad o

Solo es cero el elemento r(2,1) de la matriz resultado, ya que solo los elementos A(2,1) y B(2,1) son a la vez cero. La tabla de verdad de la operaci on or exclusivo es,

r,j

ua

n. ji m en ez @

La matriz Rcontiene el resultado de realizar la operaci on and elemento a elemento entre las matrices A y B; solo aquellas posiciones que contienen a la vez un uno en ambas matrices, obtienen un uno como resulta en la matriz R. La operaci on or, responde a la siguiente tabla de verdad,

.u cm .es

2.3. OPERACIONES ARITMETICAS, RELACIONALES Y LOGICAS r = 0 0 0 1 1 1 0 0 1

63

se puede comprobar que solo son uno los elementos de r para los cuales los correspondientes elementos de A y B no son uno o cero a la vez. El operador negaci on act ua sobre un solo operando, neg andolo es decir, tranformando sus elementos con valor uno en ceros y sus elementos con valor cero en unos. >> A A = 1 0 1 >> r=~A r = 0 1 0 1 0 0 0 0 1 0 1 1 1 1 0

1 >> b=0 b =

Bo

rr

>> r=a&&b r = 0 y para la operaci on or, >> r=a&&b

ad o

r,j

>> a=1 a =

ua

Para entradas escalares se denen dos operadores l ogicos, que se corresponden con los operadores and y or de la l ogica de Bool. Por tanto siguen las tablas de verdad de dichas funciones que acabamos de ver. Su sint axis es la misma que la de los operadores l ogicos elemento a elemento, simplemente se escribe dos veces el s mbolo del operador para indicar que se trata de una operaci on entre escalares. Asi, por ejemplo para la operaci on and,

n. ji m en ez @

.u cm .es

64 r = 0 >> r=a||b r = 1

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Los operadores l ogicos elemento a elemento tambi en funcionan correctamente cuando act uan sobre escalares, pero son, en general menos ecientes que operadores espec cos que acabamos de ver. Por u ltimo, indicar que los operadores l ogicos pueden combinarse entre s con operadores relacioneles y con operadores aritm eticos. El orden de precencia es el siguiente: 1. Par entesis () 2. Operadores aritm eticos en su orden de precendecia

3. Operadores realicionales, todos tienen el mismo orden de precedencia por lo que se eval uan de izquierda a derecha 4. and elemento a elemento 5. or elemento a elemento 6. and escalares 7. or escalares

rr

>> B=[2 0 1; 3 2 -1; -2 0 2] B =

Bo

2 3 -2

>> r=A>1&B>A r = 0 1 0 0 0 0

ad o

3 2 1

0 1 3

0 2 0

r,j

>> A=[3 0 0; 2 1 0; 1 3 0] A = 0 0 0

1 -1 2

ua

Matlaba aconseja el uso de par entesis cuando se encadenan varias operaciones l ogicas para asegurar su uso correcto y facilitar la lectura de las sentencias. Por ejemplo,

n. ji m en ez @

.u cm .es

2.4. SCRIPTS Y FUNCIONES 0 0 0

65

>> r=(A>1)&(B>A) r =

Ambas sentencias realizan la misma operaci on, Comprueban qu e elementos de A son mayores que 1 y a la vez cumplen ser menores que el correspondiente elemento de B. Sin embargo, los par entesis de la segunda sentencia facilitan entender el orden en que se realizan las operaciones.

Bo

rr

>>edit

Matlab abrir a el editor de textos y crear a un documento nuevo sin nombre (untitled. Si a nadimos a continuaci on del comando edit el nombre de un chero, >>edit ejemplo1.m

Buscar a un chero con dicho nombre en los directorios de Matlab y en el directorio de trabajo. Si lo encuentra, abrir a el archivo encontrado. Si no lo encuentra, crear a uno nuevo con dicho nombre. La gura 2.5 muestra el editor de textos de Matlab, con el contenido del chero ejemplo1.m. En dicha imagen es posible observar las barras de men u y de herramientas de las que dispone el editor de texto, para facilitar el trabajo de programaci on. Estas, entre otras facilidades resaltar texto

ad o

Podemos emplear un editor de textos cualquiera, que genere texto en ASCII, como por ejemplo el block de notas, para escribir nuestros programas. Sin embargo, si trabajamos en el entorno de Matlab, lo ideal es emplear su propio editor de textos. Hay varias formas de abrir el editor de textos de Matlab; pulsando el icono de nuevo documento o bien desplegando el men u File y seleccionando nuevo script, la posici on de ambos se indica en la gura 2.4 La otra opci on es emplear el comando edit. Este comando puede emplearse de dos maneras. Si se escribe en la ventana de comandos,

r,j

ua

2.4.1.

El editor de textos de Matlab.

n. ji m en ez @

Hasta ahora, hemos manejado siempre Matlab desde la l nea de comandos. Es decir, hemos introducido las instrucciones en Matlab en la ventana de comandos. Este modo de emplear Matlab es poco eciente, ya que exige volver a introducir todos los comandos de nuevo cada vez que queremos repetir un c alculo Matlab puede emplear cheros de texto en los que introducimos un conjunto de comandos, guardarlos, y volver a emplearlos siempre que queramos. Esta es la forma habitual de trabajar no solo de Matlab, sino de otros muchos entornos de programaci on. Un chero que contiene c odigo de Matlab recibe el nombre gen erico de programa. Un programa de Matlab no es m as que un chero de texto que contiene l neas formadas por comando v alidos de Matlab. Lo habitual es que cada l nea contenga un comando. El chero se guarda con un nombre y la extension .m. Por ejemplo: miprograma.m. El nombre del chero, puede contener n umeros y letras, pero el primer car acter debe ser siempre una letra. Los programas en Matlab pueden tomar dos formas b asicas, scripts y funciones.

2.4.

Scripts y Funciones

.u cm .es

0 1 0

0 0 0

0 0 0

66

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Figura 2.4: posici on del men u File y del icono de nuevo documento en el IDE de Matlab de palabras clave, cotar n umero de l neas, sangrar estructuras de programaci on, etc. hacen que resulta especialmente atractivo emplear el editor de textos de Matlab en lugar de emplear otro editor de textos gen erico.

% Este programa toma dos matrices llamadas A y B del espacio de trabajo de Matlab, % calcula su suma y la guarda en una variable llamada suma, calcula el producto y % lo guarda en una variable llamada producto y, por ultima genera un mensaje en la % ventana de comandos para indicar que ha terminado de ejecutarse. suma=A+B producto=A*B disp(ejecuci on terminada) Si escribimos el texto anterior en un archivo y lo guardamos con el nombre ejemplo1.m, podemos ejecutar sun contenido en Matlab sin mas que escribir en la linea de comandos: >> ejemplo1

Bo

rr

ad o

Un script en Matlab es un simple chero de texto que contiene un conjunto de sentencias de Matlab v alidas. La manera de ejecutarlo, consiste en escribir el nombre del chero en la l nea de comandos de Matlab. Matlab va leyendo el contenido del chero l nea a linea, y va ejecutando los comandos que contiene cada l nea exactamente igual que si se hubieran escrito directamente en la l nea de comandos de Matlab. Veamos un ejemplo sencillo, que corresponde con el c odigo contenido en la gura 2.5:

r,j

ua

2.4.2.

Scripts

n. ji m en ez @

.u cm .es

2.4. SCRIPTS Y FUNCIONES

67

Figura 2.5: Vista del editor de textos de Matlab mostrando el contenido del chero prueba1.m

Las cuatro primeras l neas de c odigo que empiezan con el s mbolo % no se ejecutan. Cuando Matlab encuentra una l nea que empieza con dicho s mbolo interpreta que se trata de un comentario escrito por el programador, para explicar qu e hace el programa o aclarar alg un aspecto de su funcionamiento. Cuando el editor de Matlab detecta el s mbolo % en una l nea de c odigo, resalta en color verde todo el texto de la l nea a partir de dicho s mbolo. De este modo, es inmediato ver que se trata de un comnetario y que Matlab no tratar a de ejecutarlo. Un aspecto importante de la programaci on en Matlab, y en cualquier otro lenguaje de programaci on, lo constituye el comentario del c odigo de programa; facilita su uso por otros usuarios y permite al programador recordar qu e fue lo que hizo cuando lo program o. La experiencia demuestra que, en poco tiempo, los programas no comentados se vuelven incompresibles incluso para qui en, los escribi o. La quinta l nea del programa busca en el workspace las variables A y B. Si las variables no existen, es decir, si no has sido creadas previamente, el programa da un error, exactamente igual que si hubi eramos escrito directamente en la ventana de comandos de Matlab la sentencia suma=A+B sin haber denido antes A y B. Si las variables existen calcula la suma y guarda el resultado en el workspace en la variable suma. La siguiente l nea de c odigo realiza el c alculo del producto de las dos variables y guarda el resultado en la variable producto. La u ltima linea del programa mostrar a en la ventana de comandos la frase,

Bo

rr

ejecuci on terminada

ad o

r,j

ua

n. ji m en ez @

.u cm .es

68

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

2.4.3.

Funciones

function raices

Un detalle importante en Matlab es que el chero de texto que contiene la funci on debe llamarse igual que esta, para que Matlab pueda identicar la funci on correctamente. Es decir, en el caso del ejemplo anterior, el chero que contenga la funci on debe llamarse raices.m. A parte del nombre de la funci on la cabecera puede incluir tambi en nombres de las variables de entrada. Estos se escriben a continuaci on del nombre de la funci on, separadas por comas y encerradas entre par entesis, function raices(a,b,c)

function [x1,x2]=raices(a,b,c) En este caso, las variables de salida ser an x1 y x2. A continuaci on, vamos a completar el ejemplo para el que hemos construido la cabecera en los p arrafos anteriores. Se trata de una funci on que obtiene las ra ces de una ecuaci on de segundo grado, ax2 + bx + c = 0 conocidos sus coecientes a, b, c,

Bo

function [x1,x2]=raices(a,b,c) %Esta funci on calcula las raices de una ecuaci on de segundo grado ax^2+b^x+c=0 %las variables de entrada son los coeficientes a, b, c de la ecuaci on. las variables de salida x1 , x %calculo de la primera raiz x1=(-b+(b^2-4*a*c)^(1/2))/(2*a)

rr

ad o

En este ejemplo a, b y c son variables de entrada de la funci on raices. La raz on por la que hay que incluir estas variables de entrada es, que ha diferencia de los scripts las funciones no pueden acceder directamente a los valores de las variables contenidos en el workspace de Matlab. Cuando se ejecuta una funci on es preciso dar valores a las variables que necesite utilizar, y que no se denan expresamente en el c odigo de la funci on. Aclararemos esto m as tarde con un ejemplo. Por u ltimo la cabecera de una funci on puede incluir tambi en una o varias variables de salida. Estas se escriben delante del nombre de la funci on separadas por comas y encerradas entre corchetes. Entre la(s) variable(s) de salida y el nombre de la func on se incluye el s mbolo de asignaci on =, para indicar que los resultados obtenidos por la funci on se han asignado (guardado en) a dichas variables.

r,j

ua

n. ji m en ez @

Las funciones juegan un papel fundamental en cualquier lenguaje de programaci on. En el caso de Matlab, se escriben como cheros de texto, de modo an alogo a los scripts. lo que determina que Matlab los interprete como funciones es su primera l nea de c odigo. Nos referiremos a esta primera l nea con el nombre de cabecera de la funci on. La cabecera de una funci on debe empezar siempre por la palabra clave function. Debe contener adem as, como m nimo, el nombre de la funci on. Por ejemplo,

.u cm .es

Para ello emplea la funci on de Matlab disp que escribe en la ventana de comandos cadenas de caracteres. Un aspecto muy importante de los scripts es que hacen uso del workspace de Matlab tanto para buscar las variables que emplean como para guardar las variables resultantes de sus c alculo. Su ejecuci on es id entica a la que se realizar a si copi aramos linea a linea en la ventana de comandos y las fu eramos ejecutando una detr as de otra.

2.4. SCRIPTS Y FUNCIONES %calculo de la segunda raiz x2=(-b-(b^2-4*a*c)^(1/2))/(2*a)

69

Deberemos guardar estas l neas de c odigo en un archivo con el nombre raices.m. Podemos ahora emplear la funci on (raices) para calcular las ra ces de una ecuaci on de segundo grado. Supongamos que queremos obtener las ra ces de la ecuaci on, x2 + x 6 si escribimos en la l nea de comandos, >>[raiz1, raiz2]=raices(1,1,-6) Matlab mostrar a en la pantalla, x1 = 2 x2 = -3

raiz1 = 2

raiz2 = -3

Analicemos con un poco de detalle lo que hemos hecho. Al escribir: [raiz1,raiz2]=raices(1,1,-6, hemos llamado a la funci on raices, indicando que las variables de entrada deben tomar los valores a=1,b=1, c=-6, es decir, los valores de los coecientes de la ecuaci on de segundo grado cuya soluci on queremos obtener. Adem as hemos pedido a Matlab que guarde los resultados en el workspace en las variable raiz1 y raiz2. Cuando, tras llamar a la funci on, pulsamos el retorno de carro, Matlab empieza a ejecutar el c odigo de la misma. Lo primero que hace es crear las variables a, b y c y asignarle los valores 1,1 y -6. Matlab crea estas variables pero no las guarda en el workspace sino en un espacio de memoria al que solo tiene acceso la funci on raices, desde la que se han creado. Esto constituye una caracter stica muy importante de las funciones en Matlab. Cada vez que se llama a una funci on, se crea un espacio de memoria en la que se guardan las variable denidas en la funci on y a la que solo esta tiene acceso. Adem as, una funci on no puede acceder ni modicar directamente ninguna variable que est e en el workspace. Una vez que la funci on ha asignado valores a las variable de entrada, comienza a realizar los c alculos pedidos, en primer lugar calcula la ra z correspondiente al discriminante positivo,

Bo

rr

ad o

r,j

ua

n. ji m en ez @
+ b2 4ac (2.2)

y crea la variable x1 para guardar el resultado. La variable x1 solo existe en la memoria de la funci on raices y por tanto no existe ni es accesible desde el workspace. Como no hemos terminado

.u cm .es
(2.1)

70

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

>> who Your variables are: raiz1 raiz2

observaremos que all est an las variable raiz1 y raiz2, que contienen las ra ces de la ecuaci on de segundo grado que quer amos resolver. En el ejemplo anterior hemos asignado directamente valores a las variables de entrada de la funci on raices. En Matlab, una funci on puede tambi en asignar valores a sus variable de entrada copi andolos de los de otras variables existentes en el workspace, supongamos que creamos en el workspace de Matlab, tres variables con los valores de los coecientes de la ecuaci on de segundo grado del ejemplo anterior, >>coef1=1, coef2=1 coef3=-6

>> [raiz1, raiz2]= raices(coef1,coe2,coef3) Matlab, copiar a ahora los valores contenidos en coef1, coef2 y coef3 en las variables de entrada de la funci on a, b, c. Ni que decir tiene, que el resultado nal de la ejecuci on ser a el mismo. Ambito de una variable La importancia de el concepto de funci on est a precisamente en el tratamiento que hace de las variables. Para entenderlo mejor, introduciremos el concepto de ambito de una variable. Como hemos visto, la forma usual de crear una variable en Matlab es mediante el s mbolo de asignaci on. Cuando asignamos un valor o el resultado de una operaci on a una variable en la ventana de comandos de Matlab, >> a=18 a = 18

Bo

rr

ad o

r,j

ua

Podr amos entonces llamar a nuestra funci on ra ces, sustituyendo los valores de la variables de entrada por los nombres de estas variables,

n. ji m en ez @

.u cm .es

la l nea de programa en la que se calcula x1 con un punto y coma, Matlab muestra en la ventana de comandos el resultado del c alculo realizado. La ra z correspondiente al discriminante negativo se calcula de modo an alogo. Una vez terminada la ejecuci on de la l neas del programa, Matlab vuelve a examinar la cabecera del programa y observa que debe dar como resultado, los valores contenidos en las variables x1 y x2. Para ello, crea la variable raiz1 en el workspace y copia en ella el contenido de la variable x1. An alogamente crea la variable raiz2 y copia en ella el contenido de la variable x2. Con esto ha terminado la ejecuci on del programa. Matlab destruye las variables x1 y x2 que solo han existido durante la ejecuci on del programa, y nos muestra de nuevo el prompt en la ventana de comandos para indicarnos que esta listo para ejecutar nuevas ordenes. Si analizamos el contenido del workspace, empleando el comando who de Matlab,

2.4. SCRIPTS Y FUNCIONES

71

Matlab reserva un espacio de memoria del computador para guardar la variable con el valor asignado. Esta variable forma parte del workspace de Matlab, que constituye su ambito propio. La variable creada es solo visible para aquellos comandos y sentencias que, 1. Se ejecutan desde la ventana de comandos de Matlab.

Crea a y b

r,j

ua

n. ji m en ez @
Ventana de comandos de Matlab >>a=2 >>b=3 >>y=ejem(a) y= 12 >> llamada a la funci on ejem() Copiar a en ent Copiar sal en y

Cuando ejecutamos una funci on desde la ventana de comandos de Matlab, la funci on crea su propio espacio de memoria. Por as decir, es como un workspace particular de la funci on. Cualquier variable que cree la funci on se guardar a en el espacio de memoria de la funci on, que constituir a su ambito propio. La variable creada dentro de la funci on solo es visible para aquellos comandos y sentencias que se ejecutan dentro de la funci on. Una vez que termina la ejecuci on de una funci on, el espacio de memoria que se cre o al ejecutarse se destruye y con el cualquier variable que el programa haya creado durante su ejecuci on. La u nica manera de pasar informaci on contenida en una variable del workspace de Matlab a una funci on es copi andola a una variable de entrada de la funci on. La u nica manera de pasar informaci on contenida en una variable del espacio de memoria de una funci on, al workspace de Matlab, es copi andola a trav es de una variable de salida de la funci on.

devoluci on control ventana de comandos

ad o

workspace de Matlab a=3 b=2 ... tras ejecutar ejem y=12 function sal=ejem(ent) b=4; Crea b sal=b*ent; y sal

Bo

rr

Figura 2.6: Ejemplo de uso de memoria y ambito de variables durante la ejecuci on de una funci on La gura 2.6 muestra esquem aticamente como se gestionan las variables en Matlab. En el

.u cm .es
Espacio de memoria de la funcion ejem.m ent=3 b=4 sal=12 ... tras ejecutar ejem se destruyen todas las variables

2. Se ejecutan desde un script.

72

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

cuadro superior se muestra la ejecuci on de varias sentencias en la ventana de trabajo de Matlab. Las dos primeras crean directamente dos variables a y b que se almacenan en el workspace de Matlab, representado por el cuadro azul de la derecha. A continuaci on se llama a la funci on ejem (cuadro rojo central), asign andole como variable de entrada la variable a y como variable de salida y. La ventana de comandos cede el control a la funci on que empieza a ejecutarse: 1. La funci on crea su propio espacio de memoria (cuadro rojo de la izquierda)

2. Copia el valor contenido en la variable a en la variable ent. Esta variable se almacena en el espacio de memoria de la funci on. 3. Crea la variable b asign andole el valor 4 y la guarda en el espacio de memoria de la funci on.

5. La funci on a llegado al nal de su c odigo. vuelve a leer la cabecera y crea la variable y en el workspace de Matlab, copiando el contenido de la variable sal. 6. termina la ejecuci on destruyendo el espacio de memoria de la funci on y devolviendo el control a la ventana de comandos. Llamar a una funci on desde otra funci on. En Matlab, como en cualquier lenguaje de alto nivel, es posible llamar una funci on desde dentro de otra. Incluso es posible que una funci on se llame a si misma, aunque este caso lo veremos m as adelante cuando hablemos del control de ujo. Veamos un ejemplo sencillo de llamada de una funci on desde otra, function salida=ejemplo2(entrada) %esta funcion toma el valor de entrada lo eleva al cuadrado y pasa el %resultado aun segunda funci on que calcula la raiz cuadrada... %entrada y salida deber an ser iguales al final

%%%%llamada a la segunda funci on%%%% salida=raiz(x);

Bo

function out=raiz(in) out=in^(1/2); Debe guardarse en uno de los tres lugares siguientes:

rr

La funci on ejemplo2 llama a una segunda funci on raiz cuyo c odigo,

1. En el mismo chero, ejemplo2.m en que se encuentra escrito el c odigo de la funci on ejemplo2, justo debajo de dicha funci on. 2. En un chero propio, raiz.m guardado en el directorio en que Matlab est a trabajando.

ad o

x=entrada^2;

r,j

ua

n. ji m en ez @

4. Crea la variable sal asign andole el producto de b=4 por ent=3. Almacena la variable sal en el espacio de memoria de la funci on.

A partir de este momento y hasta el nal de la ejecuci on de la funci on hay dos variables con el mismo nombre: b=2 en el workspace de Matlab; b=4 en el espacio de memoria de la funci on. Las dos variables coexisten pero no se pueden confundir porque pertenecen a ambitos distintos.

.u cm .es

2.4. SCRIPTS Y FUNCIONES

73

3. En un chero propio, raiz.m guardado en cualquier directorio de los incluidos en el path de Matlab. Adem as al ejecutar la funci on ejemplo2, se buscar a el c odigo de la funci on ra z, precisamente en el orden que acabamos de indicar. Si a nadimos directemente el c odigo de la funci on raiz al chero ejemplo2.m, el c odigo quedar a, function salida=ejemplo2(entrada) %esta funcion toma el valor de entrada lo eleva al cuadrado y pasa el %resultado aun segunda funci on que calcula la raiz cuadrada... %entrada y salida deber an ser iguales al final x=entrada^2; %%%%llamada a la segunda funci on%%%% salida=raiz(x); %%%%%%codigo de la segunda funcion%%%%% function out=raiz(in) disp(version incluida en el archivo ejemplo2.m) out=in^(1/2);

La ventaja de escribir el c odigo de la segunda funci on en el mismo chero de la primera es que el acceso es m as r apido. Sin embargo, solo la funci on ejemplo2 podr a llamarla. Es decir la funci on raiz no puede emplearse desde la ventana de comandos de Matlab ni desde ninguna otra funci on. En general, si escribimos en un archivo .m de Matlab varias funciones, function a=uno(b) %aqui viene el codigo de la funcion uno ...

Bo

rr

Todas las funciones incluidas en el chero pueden llamarse entre unas a otras, pero solo la primera de ellas puede ser ejecutada desde la ventana de comandos de Matlab. Adem as el nombre del chero debe coincidir con el nombre de la primera funci on contenida en el. En el ejemplo que acabamos de esbozar, el chero deber a llamarse uno.m. Evidentemente si cada funci on est a guardada en un chero .m distinto, todas las funciones pueden en principio ser ejecutadas desde otra funci on o desde la ventana de comandos de Matlab. Cada vez que se ejecuta una funci on, esta crea su propio espacio de memoria. Las variables incluidas en la cabecera de la funci on como variables de entrada y salida se copian, tal y como hemos visto para el caso de una funci on simple, entre el espacio de memoria propio de la funci on y el espacio de memoria de la funci on que la ha llamado.

ad o

function e=tres(f) %aqui viene el codigo de la funcion dos ... . . .

r,j

ua

function c=dos(d) %aqui viene el codigo de la funcion dos ...

n. ji m en ez @

.u cm .es

74

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

2.4.4.

Funciones incluidas en Matlab.

2.4.5.

Bo

Siempre que escribimos un programa, tanto si se trata de un script como si es una funci on. Es preciso comprobar su funcionamiento y, en muchos casos corregir los errores cometido. El proceso de correcci on de c odigo desde su versi on original hasta la versi on denitiva se conoce con el nombre de depuraci on de c odigo. Podemos distinguir dos tipos fundamentales de errores:

4 En muchos casos las funciones incluidas en Matlab no est an escritas en cheros de texto accesibles para el usuario. Por razones de eciencia, se trata de versiones de las funciones escritas por lo general en lenguaje C y compiladas.

rr

1. Errores de sintaxis. Normalmente son errores de escritura hemos escrito mal el nombre de una funci on o un comando o bien no hemos escrito correctamente el c odigo siguiendo las reglas del lenguaje. Matlab advierte directamente de estos errores, cuando se trata de ejecutar el

ad o

Matlab incluye decenas de funciones. Estas funciones, est an escritas con la misma losof a que acabamos de describir aqu , es decir, admiten una o varias variables de entrada y devuelven sus resultados en una o varias funciones de salida. En algunos casos, se trata de cheros de texto guardados con la extensi on .m iguales a los que nosotros podemos crear 4 . La manera de emplearlas desde la ventana de comandos de Matlab es id entica a la descrita para las funciones creadas por el usuario. En la tabla 2.5, se incluyen algunos ejemplos de las funciones matem aticas m as corrientes. Son solo una peque na muestra de las funciones disponibles. Para obtener una visi on m as completa de las funciones disponibles se aconseja emplear la ayuda de Matlab.

Depuraci on.

r,j

ua

n. ji m en ez @

Tabla 2.5: Algunas funciones matem aticas en Matlab de uso frecuente tipo nombre variables funci on matem atica Trigonom etrica cos y=cos(x) coseno de un angulo en radianes Trigonom etrica sin y=sin(x) seno de un angulo en radianes Trigonom etricas tan y=tan(x) tangente de un angulo en radianes Trigonom etricas csc y=csc(x) cosecante de un angulo en radianes Trigonom etricas sec y=sec(x) secante de un angulo en radianes Trigonom etricas cot y=cot(x) cotangente de un angulo en radianes Trigonom etricas ... y=a...(x) inversa de una funci on trigonom etrica en radianes asin y=asin(x) ejemplo, arcoseno en radianes Exponencial exp y=exp(x) ex Exponencial log y=log(x) logaritmo natural Exponencial log10 log10(x) logaritmo en base 10 Exponecial sqrt y=sqrt(x) (x) Redondeo ceil y=ceil(x) redondeo hacia + Redondeo oor y=oor(x) redondeo hacia Redondeo round y=round(x) redondeo al entero m as pr oximo Redondeo x y=x(x) redondeo hacia 0 Redondeo rem r=rem(x,y) resto de la divisi on entera de y entre x M odulos norm y=norm(x) m odulo de un vector x M odulos abs y=abs(x) valor absoluto de x,(m odulo de x si x es complejo) M odulos sign y=sign(x) funci on signo; 1 si x positivo, -1 si x negativo, 0 si x=0

.u cm .es

2.4. SCRIPTS Y FUNCIONES

75

c odigo, escribiendo en la ventana de comandos un mensaje de error. Como ejemplo veamos los errores del siguiente script, %script con errores, y=[1 2 3; 4 5 6; 2 3] %a esta matriz le falta un elemento en la ultima fila x=[1 2 3; 4 5 6] z=y*x %las matrices no pueden multiplicarse entre si por que no coinciden %numero de columnas de la primera con numero de filas de la segunda

Si observamos el editor de textos, 2.7 puede observarse algunas de los caracteres del texto subrayados en rojo. Esto puede indicar la existencia de errores en esa l nea de c odigo, como en el caso del caracter que se ha rodeado en la gura de un c rculo rojo.

Figura 2.7: Vista de el editor de texto de Matlab. Circulo rojo error en el c odigo. Circulos azules advertencias de posible mejoras

rr

ad o

Si ejecutamos el script, que hemos guardado con el nombre de errores.m,

>> errores Warning: File: errores.m Line: 2 Column: 4 The expression on this line will generate an error when executed. CAT arguments dimensions are not consistent. Error using errores (line 2) Error using vertcat CAT arguments dimensions are not consistent. Matlab ha detectado el error en la construcci on de la matriz y, nos indica el tipo de error cometido y la l nea y columna de c odigo donde se ha producido.

r,j

ua

n. ji m en ez @

En otros casos, circulos azules de la gura se trata de advertencias, el programa funciona pero puede hacerlo de forma m as eciente; en el caso de la gura simplemente nos sugiere que a nadamos un punto y coma al nal de las sentencias, para que Matlab no escriba el resultado de cada c alculo en la ventana de comandos. No se trata por tanto de errores sino de advertir al programador que con puntos y comas su programa se ejecutar a m as r apido.

Bo

.u cm .es

The error will be: Erro

76

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION Si corregimos el c odigo, a nadiendo a la matriz y el elemento que le falta, %script con errores, y=[1 2 3; 4 5 6; 2 3 8] %a esta matriz le falta un elemento en la ultima fila

y volvemos a ejecutar el script. >> errores y = 1 4 2 2 5 3 3 6 8

x = 1 4 2 5 3 6

Error using * Inner matrix dimensions must agree.

Matlab nos detecta el siguiente error cometido as como la l nea en la que se comete. Si intercambiamos las posiciones entre las variables x y y en el producto, suponiendo que esta es la causa del error cometido, y=[1 2 3; 4 5 6; 2 3 8] x=[1 2 3; 4 5 6] z=x*y

Bo

rr

El c odigo se ejecuta con normalidad, >> errores y = 1 4 2 2 5 3 3 6 8

ad o

r,j

ua

Error in errores (line 5) z=y*x %las matrices no pueden multiplicarse entre si por que no coinciden

n. ji m en ez @

.u cm .es

x=[1 2 3; 4 5 6] z=y*x %las matrices no pueden multiplicarse entre si por que no coinciden %numero de columnas de la primera con numero de filas de la segunda

2.4. SCRIPTS Y FUNCIONES

77

x = 1 4 2 5 3 6

z = 15 36 21 51 39 90

El siguiente c odigo del script trect.m muestra un error de este tipo, %este script toma los valores de los catetos de un tri angulo rectangulo del %workspace de Matlab (variables a y b). calcula su hipotenusa, y a partir %de estos datos, el seno el coseno y la tangente del angulo formado por la %hipotenusa y el cateto mayor que ser a siempre a %calculo hipotenusa, h=sqrt(a^2+b^2) %calculo del seno s=a/h

Bo

rr

ad o

%calculo del coseno a=b/h %error estamos sobreescriesdo el valor del coseno en la variable que %guardaba e valor del cateto %calculo de la tangente t=b/a

El programa funciona perfectamente, por ejemplo si hacemos a=4 y b=3,

>> trect h = 5

r,j

ua

n. ji m en ez @

2. Errores de codicaci on. Este segundo tipo de errores son mucho m as dif ciles detectar. El c odigo se ejecuta sin problemas, pero los resultados no son los esperados. Ante esta situaci on, no queda m as remedio que ir revisando el c odigo, paso a paso para detectar donde est a el error.

.u cm .es

78 s = 0.8000

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

0.6000

t = 5

Como hemos sobre escrito en a el valor del coseno, cuando tratamos de utilizar dicha variable, como si fuera el cateto mayor, para obtener la tangente el resultado que obtenemos es err oneo.

Bo

rr

ad o

r,j

Si una vez se nalado el breakpoint, ejecutamos el script,

ua

n. ji m en ez @
Figura 2.8: Breakpoint activo

El editor de texto de Matlab nos permite ejecutar un programa paso a paso, ver los valores que van tomando las variable en Matlab, etc, mediante el depurador que lleva incorporado. Para ello, se denen el editor de Matlab breakpoints,esto es l neas en las cuales Matlab detendr a la ejecuci on de un programa, entrar a en modo de depuraci on y esperar a instrucciones del usuario. La gura 2.8 muestra el c odigo del ejemplo que acabamos de ver, en el que se ha denido un breakpoint, pinchando con el rat on sobre el gui on que precede a la l nea del programa en la que se desea parar la ejecuci on. Matlab indica que el breakpoint est a activo, cambiando el gui on por un c rculo rojo.

.u cm .es

a =

2.4. SCRIPTS Y FUNCIONES >> trect h = 3.1477 12 s=a/h K>>

79

Matlab nos indica que ha detenido la ejecuci on del programa en la linea marcada por el breakpoint (l nea 12 en el ejemplo). adem as vuelve a mostrar el prompt en la ventana de comandos, pero esta vez precedido por la letra k, para indicarnos que ha entrado en modo de depuraci on.

Bo

rr

ad o

Figura 2.9: Parada de programa en breakpoint y herramientas de depuraci on Si pulsamos el bot on de paso adelanteMatlab ejecutar a la linea de programa se nala da con la echa verde y se parar a en la l nea siguiente. En cada paso, podemos ver el valor que toman las varibles, pidiendo su valor directamente en la ventana de comandos, K>> a

r,j

ua

n. ji m en ez @

A partir de aqu Matlab pone a nuestra disposici on las herramientas de depuraci on, la gura 2.9 muestra la l nea en que se ha parado la ejecuci on del programa, se nalada con una echa verde, y algunas de estas herraminentas. B asicamente nos da la posibilidad de ejecutar el c odigo paso a paso, de entrar e ir paso a paso en las funciones que llama nuestro programa, o de de continuar la ejecuci on hasta que el nal del programa o hasta el siguiente brakpoint activo. Para dominar los detalles del depurador se aconseja leer la ayuda de Matlab.

.u cm .es

80 a = 0.9531

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

2.5.1.

Flujo condicional.

Bo

if - elseif - else - end. El mecanismo que necesitamos nos lo suministra la estructura if de Matlab. Veamos en primer lugar el c odigo del ejemplo del que venimos hablando, function espar(x) %Este programa recibe un numero entero como variable de entrada. y muestra %por pantalla un mensaje indicando si el numero recibido es par o impar. %Calculamos el resto de la division por dos

rr

Empezaremos con un ejemplo sencillo de c omo y para qu e condicionar el ujo de un programa. Supongamos que queremos construir un programa que reciba como variable de entrada un n umero cualquiera y nos muestra un mnesaje por pantalla si el n umero es par. Para ello, podr amos hacer uso de la funci on rem (ver tabla 2.5). Si el resto de la divisi on entre dos del n umero suministrado a la funci on es cero, se trata de un n umero par, si no es un n umero impar. Podr amos hacer uso de operadores relacionales, en particular de == para comprobar si el resto de la divisi on entre dos es cero. Por u ltimo necesitar amos alg un mecanismos que permitiera al programa escribir un mensaje solo cuando el n umero introducido sea par.

ad o

r,j

ua

En la secci on anterior, se introdujo el modo de escribir programas en Matlab mediante el uso de scripts y funciones. En todos los casos vistos, la ejecuci on del programa empezaba por la primera l nea del programa, y continua, por orden, l nea tras l nea hasta alcanzar el nal del programa. Se trata de programas en los que el ujo es lineal, porque los resultados de cada l nea de programa se van obteniendo regularmente uno detr as de otro. Hay ocasiones en las que, por diferentes razones que expondremos a continuaci on, puede interesarnos alterar el orden en que se ejecutan las sentencias de un programa, bien repitiendo una parte de los c alculos un determinado n umero de veces o bien ejecutando unas partes de c odigo u otras en funci on de que se satisfagan unas determinadas condiciones. El control del orden en que se ejecutan las sentencias de un programa es lo que se conoce con el nombre de control de ujo. Veremos dos tipos principales de control de ujo: El ujo condicional y los bucles.

n. ji m en ez @

2.5.

Control de Flujo

3. Advertencias. Por u ltimo se nalar la existencia de los warnings no se trata propiamente de errores, sino de simples advertencias de que algo puede mejorar de forma m as eciente, o puede no dar el resultado que esper abamos. En general, cuando se recibe un warning al ejecutar un programa, o cuando el editor de Matlab subraya en rojo alg un car acter en el editor de textos, corregir el programa para que desaparezcan, aunque propiamente no se trate de errores.

.u cm .es

o bien se nalando (sin pulsar botones) con el rat on en el editor de texto la variable de la que se trate. En nuestro ejemplo del tri angulo rect angulo es muy sencillo avanzar paso en el programa con el depurador, y caer en la cuenta que, cuando se va a calcular la tangente, la variable a ya no contiene el valor del cateto.

2.5. CONTROL DE FLUJO resto=rem(x,2); %Empleamos una estructura if - else -end para decidir que mensaje mostrar if resto==0 %si el resto es cero el n umero es par disp(el n umero es par) end

81

function espar(x) %Este programa recibe un numero entero como variable de entrada. y muestra %por pantalla un mensaje indicando si el numero recibido es par o impar. %Calculamos el resto de la division por dos resto=rem(x,2); %Empleamos una estructura if - else -end para decidir que mensaje mostrar if resto==0 %si el resto es disp(el n umero else %si el resto no disp(el n umero end

ad o

rr

Bo

La palabra clave else marca ahora la disyuntiva, si el numero es par, el programa ejecuta las l neas de c odigo entre el if y el else, si el numero no es par ejecutar a las l neas entre el else y el end. La estructura if admite todav a ampliar el n umero de posibilidades de elecci on mediante la palabra clave elseif. Al igual que con if, elseif va seguido de una expresi on l ogica que establece una condici on, si se cumple se ejecutar a el c odigo de las lineas siguientes, si no se cumple, el programa saltar a a siguiente l nea que contenga una palabra clave: otro elseif, un else o

r,j

ua

cero el n umero es par es par) es cero el n umero es impar es impar)

n. ji m en ez @

El programa toma un n umero como variable de entrada y calcula el resto de su divisi on entre dos. A continuaci on entra en una parte de c odigo especial, que se inicia con la palabra clave if y termina con la palabra clave end. La palabra clave if va siempre seguida de una expresi on que da un resultado l ogico: verdadero (1) o falso (0). Esta expresi on puede ser cualquier combinaci on v alida de expresiones relacionales o l ogicas. Esta expresi on l ogica, que sigue al if constituye una condici on. El programa seguir a ejecutando las siguientes l neas solo si la condici on se cumple si no se las saltar a hasta llegar a la expresi on end. En nuestro ejemplo, se emplea una expresi on relacional sencilla resto==0. Si se cumple, el programa ejecutar a la siguiente l nea de programa, escribiendo en la ventana de comandos la frase .el n umero es parsi no se cumple el programa se salta, llega hasta le end, y no escribe nada por pantalla. Acabamos de ver la estructura condicional if m as sencilla posible. Podr amos complicarla un poco pidiendo que tambi en nos saque un mensaje por pantalla cuando el n umero sea impar. Esto supone incluir en nuestro programa una disyuntiva; si es par el programa debe hacer una cosa y si no, debe hacer otra. Para incluir este tipo de disyuntivas en una estructura if, se emplea la palabra clave else. Veamos nuestro ejemplo modicado,

.u cm .es

82

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

directamente el end que marca el nal de la parte de c odigo condicional. Para ver c omo funciona, vamos a modicar nuestro ejemplo anterior, para que, si el n umero introducido no es divisible por dos, compruebe si es divisible por tres, function divis(x) %Este programa recibe un numero entero como variable de entrada. y muestra %por pantalla un mensaje indicando si el numero recibido es par. Si no es %par, comprueba si es divisible por 3 y si lo es muestra un mensaje por %pantalla indicandolo. Si no es par ni divisible por tres muestra un %mensaje diciendo que no es par ni disible por tres.

%Empleamos una estructura if-elseif-else-end para decidir que mensaje mostrar if rem(x,2)==0 %si el resto es cero el n umero es par disp(el n umero es par) elseif rem(x,3)==0 %El n umero es divisible por tres disp(el n umero es divisible por 3) else %el numero no es par ni divisible por tres disp(el n umero no es par ni divisible por 3) end

Estructuras if anidadas. En el ejemplo anterior, hemos visto c omo si el n umero introducido en la funci on era par y adem as divisible por tres, el programa nunca nos informar a de esta segunda propiedad, debido al car acter excluyente de la estructura if. Una manera de resolver este problema, es mediante el uso de estructuras if anidadas. La idea es muy sencilla, se construye una estructura if para comprobar una determinada condici on, si esta se cumple, dentro de su c odigo se construye otra estructura if para comprobar una segunda condici on, y as sucesivamente, todas las veces que sea necesario. Si modicamos nuestro ejemplo anterior, incluyendo un if anidado, function divis23(x)

Bo

rr

Si llamamos ahora a la funci on dando como valor de entrada un n umero par, Ejecutar a el c odigo situado debajo del if y antes del elseif y se saltar a todo lo dem as hasta llegar al end. Si el n umero introducido no es par, pero es divisible por tres, se saltar a el c odigo situado por debajo del if, ejecutar a el c odigo contenido debajo del elseif hasta el else y saltar a el resto del c odigo hasta llegar al end. Por u ltimo si el n umero no es par, no divisible por tres, solo ejecutar a el c odigo situado por debajo del else. Un aspecto que debemos resaltar, es que el programa ejecutar a el c odigo correspondiente a la primera condici on que se cumpla, y se saltar a el resto hasta llegar al end. As por ejemplo, si en nuestro ejemplo introducimos el numero 6, el programa nos mostrar a el mensaje .el numero es par, puesto que esta es la primera condici on que se cumple, pero nunca nos mostrar a el mensaje .el numero es divisible por 3. Porque una vez comprobada y cumplida la primera condici on (ser par) el programa salta directamente al end nal de la estructura, sin comprobar nada m as. La gura 2.10 muestra el esquema completo de una estructura if. Los t erminos entre par entesis pueden estar o no presentes en una implementaci on concreta.

ad o

r,j

ua

n. ji m en ez @

.u cm .es

2.5. CONTROL DE FLUJO Estructura if-elseif-else-end if condici on ... c odigo ... (elseif condici on) ... c odigo ... (elseif condici on) ... c odigo ... . (puede haber tantos bloques elseif como se necesiten) . (else) ... c odigo ... end

83

Figura 2.10: Esquema general de la estructura de ujo condicional if los t erminos escritos entre par entesis son opcionales.

%Este programa recibe un numero entero como variable de entrada. y muestra %por pantalla un mensaje indicando si el numero recibido es par. %si el numero es par y divisible entre tres, %si es divisible entre tres %Si no es par ni divisible por tres

if rem(x,2)==0 %si el resto es cero el n umero es par %comprobamos con un if anidado si adem as es divisible entre tres if rem(x,3)==0 disp(el n umero es par y divisible entre tres) else disp(el n umero es par) end elseif rem(x,3)==0 %El n umero es divisble entre tres disp(el n umero es divisible entre 3) else %el numero no es par ni divisible entre tres disp(el n umero no es par ni divisible entre tres) end

Bo

rr

ad o

r,j

%Empleamos una estructura if - else -end %y un if anidado para decidir que mensaje mostrar

ua

n. ji m en ez @

.u cm .es

84

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Switch-case-otherwise. Se trata de otra estructura que permite tambi en ejecutar una parte u otra de c odigo de acuerdo con unas codiciones preestablecida. Estas condiciones se presentan en forma de casos, el programa comprueba al llegar a la estructura switch de qu e caso se trata y ejecuta el c odigo correspondiente. La gura 2.11 muestra la forma general que toma una estructura switch. Estructura switch-case-otherwise switch variable case expresi on ... c odigo case expresi on ... c odigo . Puede haber tantos bloques case como se necesiten . otherwise ... c odigo end

Figura 2.11: Esquema general de la estructura switch-case-otherwise La estructura switch, compara el valor contenido en la variable de entrada a la estructura con las expresiones contenidas en los casos, ejecutando el primer caso para el que coincidan. Si no encuentra ninguno, ejecuta entonces el c odigo contenido debajo de la sentencia otherwise. Veamos un ejemplo muy sencillo, function signo(x) %este programa emplea una estructura switch para informarnos del signo de %un n umero. %NOTA EL PROGRAMA NO COMPRUEBA QUE LA VARIABLE DE ENTRADA X SEA UN NUMERO, %SI ES UN VECTOR O UNA MATRIZEL RESULTADO NO TIENE SENTIDO s=sign(x); %obtnemos el signo del n umero mediante la funci on sign %construimos la estructura switch, switch s case 1 disp(el n umero es positivo) case -1 disp(el n umero es negativo) otherwise disp(el n umero es cero) end

Bo

La funci on del ejemplo emplea a su vez la funci on de Matlab sign para obtener el signo (1, 1, 0) del n umero introducido. Guarda el resultado de esta operaci on en la variable s, que

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

2.5. CONTROL DE FLUJO

85

ser a precisamente la variable de entrada a la estructura switch. Los casos se limitan a chequear los posibles valores de la variable y enviar a la ventana de comandos el mensaje correspondiente.

2.5.2.

Bucles

Bucles for. Un bucle for repite las sentencias contenidas en el bucle un determinado n umero de veces, es decir realiza un n umero jo de iteraciones. La estructura general de un bucle for se muestra en la gura, 2.12 Estructura de un bucle for

Figura 2.12: Esquema general de la estructura de un bucle for los t erminos escritos entre par entesis son opcionales. El bucle empieza con la palabra clave for, seguida de una variable a la que hemos dado el nombre gen erico de ndice. Esta variable ir a tomando sucesivamente los valores de los elementos contenidos en el [vector de valores]. El c odigo contenido en el bucle, desde la l nea siguiente al for hasta el end se ejecutar a tantas veces como valores tenga el vector de valores. Antes de hablar de las sentencias break y continue, veamos alguno ejemplos. function y=demofor(x) %este programa emplea un bucle for sencillo para ir mostrando uno a uno %los elementos del vector de entrada x por pantalla. adem as los suma y %guarda el resultado total en el vector y, y=0; %iniciamos la suma a cero

Bo

rr

for i=x disp(i) y=y+i; end Si ejecutamos el programa, usando como entrada el vector d=[1 9 4 18], >> d=[1 9 4 18] d =

ad o

r,j

ua

n. ji m en ez @

for indice=[vector de valores] ... c odigo (condici on: Break) ... (condicici on: Continue) ... c odigo end

.u cm .es

En ocasiones, es preciso repetir una operaci on un n umero determinado de veces o hasta que se cumple una cierta condici on. Los lenguajes de alta nivel poseen estructuras espec cas, para repetir la ejecuci on de un trozo de programa las veces que sea necesario. Cada repetici on recibe el nombre de iteraci on. Estas estructuras reciben el nombre gen erico de bucles. Vamos a ver dos tipos los bucles for y los bucles while.

86

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

18

>> suma=demofor(d) 1 9 4 18

suma = 32

Una vez que el programa llega al bucle for, iguala la variable i al primer valor contenido en el vector de entrada, lo muestra por pantalla y a nade su valor a la variable de salida. cuando llega al end del bucle for comprueba que todav a quedan valores del vector de entrada por recorrer, as que vuelve al principio del for, igual la variable i al segundo valor del vector de entrada, suma dicho valor a la variable de salida, llega al end y as sucesivamente hasta que haya recorrido todos los valores del vector de entrada. El uso m as habitual de los bucles, es para recorrer elementos de un vector o de una matriz. por esta raz on, lo m as frecuente es que no se de expl citamente el vector cuyos elementos debe recorrer el ndice del for, sino que se construya empleado el operador :, for indice=principio:incremento:final

Veamos un ejemplo sencillo para obtener el vector suma de dos vectores, function s=sumafor(x,y) %este programa emplea un bucle for sencillo para sumar dos vectores %primero comprueba si son del mismo tama~ no. Si no lo son da un mensaje de %aviso l1=length(x); l2=length(y); if l1==l2 %construimos un vector de ceros del mismo tama~ no que x e y paraa %guardar el resultado de la suma, s=zeros(size(x)); %si son iguales los suma elemento a elemento usando un bucle for for i=1:l1 s(i)=x(i)+y(i); end else disp(los vectores son de distinto tama~ no) end

Bo

rr

En la gura 2.12, aparecen dos sentencias opcionales, break y continue.

ad o

r,j

ua

n. ji m en ez @

.u cm .es

2.5. CONTROL DE FLUJO

87

La sentencia break, permite terminar el bucle for haya terminado de realizar todas las ejecuciones previstas. La sentencia break va siempre incluida dentro de una condici on que, si se cumple interrumpe la ejecuci on del bucle. Por ejemplo podemos emplear un bucle fory una sentencia break, para buscar la primera vez que un determinado n umero aparece en un vector,

function pares=buscapar(x) %este programa emplea un bucle for y un continue para construir un vector %de salida con los numeros pares contenidos en el vector de entrada.

Bo

rr

%obtenemos la longitud del vector l1=length(x); %iniciamos el vector de salida a un vector vac o, pares=[]; for i=1:l1 if rem(x(i),2)~=0 continue end pares=[pares x(i)]; end

ad o

r,j

El programa tomo coma variables de entrada un vector y el n umero que de debe buscar dentro del vector. Construye un bucle for, con el mismo numero de iteraciones que el tama no del vector. el bucle va comparando los elementos del vector con el n umero pedido. Cuando encuentra un elemento igual, se ejecuta el c odigo de la estructura if contenida en el bucle; la variable posici on toma el valor del ndice i del bucle y la sentencia break interrumpe la ejecuci on del bucle, saltando al nal del mismo. Por u ltimo, se ha a nadido una condici on al terminar el bucle, para el caso de que se hayan recorrido todos los elementos del vector sin encontrar el n umero pedido. La sentencia continue, se emplea para hacer que una determinada iteraci on interrumpa su ejecuci on y salte directamente al comienzo de la siguiente iteraci on. Debe ir, como en el caso de la sentencia break, incluida en una estructura condicional. Veamos un ejemplo para entender como funciona. Se trata de un programa que admite como entrada un vector de cualquier longitud y devuelve como salida otra vector que contiene solo los n umeros pares contenidos en le vector de entrada,

ua

n. ji m en ez @

%obtenemos la longitud del vector l1=length(x); %iniciamos la variable posicion a un valor absurdo posicion=-1; for i=1:l1 if x(i)==n posicion=i: break end end if posicion==-1 disp(el numero pedido no se encuentra en el vector x) end

.u cm .es

function posicion=buscanum(x,n) %este programa emplea un bucle for y un break para buscar en el vector x, %la primera ves que aparece el n umero n

88

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

El funcionamiento es muy sencillo, en cada iteraci on la sentencia if comprueba si el n umero es par. Si no lo es, entra en el c odigo de la estructura if, ejecuta la sentencia continue, y se salta el resto del c odigo del bucle, volviendo directamente a empezar la siguiente iteraci on. bucles for anidados. Los bucles for pueden anidarse unos dentro de otros de modo an alogo a como se hace con las estructuras if. Veamos un ejemplo de uso, muy com un; calcular la suma de dos matrices, function s=suma_mat(x,y) %este programa emplea dos bucles for anidados para obtener la suma de dos %matrices. %obtenemos el tama~ no de las matrices, t1=size(x); t2=size(y); if t1(1)==t2(1)&& t1(2)==t2(2) %si las matrices tienen el mismo tama~ no pueden sumarse... %construimos una matriz de dicho tama~ np para guardar el resultado de %la suma s=zeros(size(x)); %construimos un bucle que recorre las filas de ambas matrices for i=1:t1(1) %y dentro, anidamos un bucle que reorre las columnas for j=1:t1(2) %Empleando ambos ndices para ir sumando los elementos de las %dos matrices, s(i,j)=x(i,j)+y(i,j); end end else %si no tienen el mismo tama~ no no se pueden sumar... disp(las matrices no son del mismo tama~ no) end

Bo

bucle while. Este bucle tiene la misma nalidad que u bucle for, repetir un trozo de c odigo un determinado n umero de veces. Lo que cambia, es el mecanismo que determina cuantas iteraciones realizar a el bucle. En el caso de un bucle while las iteraciones se repiten un n umero indenido de veces mientras se cumpla una determinada condici on impuesta al principio del bucle. La gura ?? muestra la estructura general de un bucle while. Veamos un ejemplo sencillo. function n=potencia(x,max) %este programa emplea un bucle while para calcular la potencia a la que hay %que elevar un n umero x para que el resultado sea mayor que otro %determinado n umero max %un n umero.

rr

ad o

Es interesante observar en este ejemplo el funcionamiento de los dos bucles anidados. Cada interaci on del bucle exterior, avanza una la, en el recorrido de las matrices, cada iteraci on del bucle interior recorre todos los elementos de la la indicada por el bucle exterior.

r,j

ua

n. ji m en ez @

.u cm .es

2.5. CONTROL DE FLUJO Estructura de un bucle while while condici on ... c odigo (condici on: Break) ... (condicici on: Continue) ... c odigo end

89

Figura 2.13: Esquema general de la estructura de un bucle while los t erminos escritos entre par entesis son opcionales.

%NOTA EL PROGRAMA NO COMPRUEBA QUE LA VARIABLE DE ENTRADA X SEA UN NUMERO, %Si ES UN VECTOR O UNA MATRIZ EL RESULTADO NO TIENE SENTIDO pot=1; n=0; while pot<max %mientras la potencia calculada sea menor que max n=n+1; pot=x^n; end El programa empela un bucle while para calcular el exponente m nimo hay que elevar un n umero para que rebase una determinada cantidad. El bucle while se ejecuta mientras la potencia calculada, sea menor que la variable max, una vez que la potencia rebasa dicho valor el bucle deja de ejecutarse. Un aspecto muy importante del bucle while es que al programarlo hay que asegurarse de que dentro del bucle existe la posibilidad de cambiar la condici on de entrada. Si no, el programa no podr a terminar nunca el bucle5 . Las sentencias break y continue son id enticas a las descritas en el caso de los bucles for, por lo que no insistiremos m as sobre el asunto. Bucles while anidados. Del mismo modo que se anidan los bucles for, es posible anidar bucles while. Como un ejemplo, vamos a reproducir el programa desarrollado antes para sumar dos matrices, empleando ahora bucles while. function s=suma_while(x,y) %este programa emplea dos bucles while anidados para obtener la suma de dos %matrices. %obtenemos el tama~ no de las matrices, t1=size(x); t2=size(y); if t1(1)==t2(1)&& t1(2)==t2(2) %si las matrices tienen el mismo tama~ no pueden sumarse... %construimos una matriz de dicho tama~ np para guardar el resultado de %la suma
5 Cuando se produce esta situaci on por un error en el dise no del programa, el bucle se puede parar pulsando a la vez las teclas ctrl+c

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

90

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

El ejemplo, es m as complicado de programar y menos eciente que si us aramos bucles for. La raz on de incluirlo es puramente ilustrativa. En general, un bucle while debe utilizarse solo cuando el n umero de iteraciones que se precisa realizar no es jo, sino que depende de alguna condici on propia de los resultado que se van obteniendo a medida que se van realizando iteraciones.

2.5.3.

Funciones recursivas.

f0 = 0, f1 = 1, f2 = 1, f3 = 2, f4 = 3, f5 = 5, F6 = 8, fi = fi1 + fi2

Bo

function s=fibonacci(n) %obtiene el t ermino enesimo de la sucesi on de fibonacci empleando una %funci on recursiva. que funcione no quiere decir que sea eficiente... %n n umero del t ermino que se desea obtener if n<2 %el valor del t ermino de fibonacci es el mismo s=n; else %si n o es la suma de los dos anteriores... s=fibonacci(n-1)+fibonacci(n-2); end

rr

ad o

La sucesi on empieza con los t erminos 0 y 1 y a partir de ah cada t ermino es la suma de los dos anteriores. Podemos convertir directamente esta denici on en c odigo,

r,j

ua

Una funci on recursiva es una funci on que se llama a s misma. Hemos esperado hasta aqu para hablar de ellas porque, de alguna manera se comportan como un bucle, y necesitan una condici on de salida para dejar de llamarse a s mismas y terminar s ejecuci on. En general, son delicadas de manejar y tienden a consumir mucha memoria ya que cada vez que la funci on se llama a s misma necesita crear un nuevo espacio de memoria independiente. Veamos un ejemplo de funci on recurrente que permite obtener el t ermino en esimo de la sucesi on de Fibonacci

n. ji m en ez @

s=zeros(size(x)); %construimos un bucle que recorre las filas de ambas matrices i=1; %inicimos un contador para las filas while i<=t1(1) %y dentro, anidamos un bucle que reorre las columnas j=1; %iniciamos un contador para las columnas while j<=t1(2) %Empleando ambos ndices para ir sumando los elementos de las %dos matrices, s(i,j)=x(i,j)+y(i,j); j=j+1; %vamos incrementando el indice de columnas end i=i+1; %vamos incrementando el indice de filas end else %si no tienen el mismo tama~ no no se pueden sumar... disp(las matrices no son del mismo tama~ no) end

.u cm .es

2.5. CONTROL DE FLUJO

91

Si n es menor que dos, la funci on da como valor el t ermino correspondiente (1 o 0). Si n es mayor que dos, vuelve a llamarse a si misma con entrada n-1 y n-2, para calcular el valor en esimo de la sucesi on a partir de la suma de los dos anteriores, la funci on se ir a llamando a s misma hasta llegar a n < 2. A partir de ah ira devolviendo los valores obtenidos en cada llamada hasta obtener el en esimo t ermino.

2.5.4.

Algoritmos y diagramas de ujo.

Un algoritmo es, en la denici on de la Real academia:

Un conjunto ordenado y nito de operaciones que permite hallar la soluci on de un problema.

Considerar 2 como el primer n umeros primo. (un n umero primo es aquel que solo es divisible por si mismo o por uno.) Recorrer todos los n umeros impares desde 3 hasta que se complete el n umero n de n umeros primos solicitados. Para cada n umero, probar a dividirlo por todos los primos obtenidos hasta ese momento. Si no es divisible por ninguno, el n umero es primo y se guarda, si es divisible por alguno de ellos, se interrumpe el proceso y se prueba con el siguiente. En ocasiones, facilita la comprensi on de un algoritmo representarlo gr acamente mediante un diagrama de ujo. Los diagramas de ujo emplean s mbolos bien denidos para representar los distintos paso de un algoritmo y echas para indicar la relaci on entre ellos; la relaci on en la que informaci on uye de un paso del algoritmo a otro. No hay una norma r gida para realizar un diagrama de ujo, el grado de detalle con que se describe el algoritmo va en funci on de las necesidades del programador, o de los destinatarios a quien va dirigido el diagrama. La idea fundamental es que facilite la comprensi on del algoritmo. Se utilizan diversos s mbolos para indicar, procedimientos, condiciones, almacenamiento de resultados, etc. La gura 2.14 muestra los tres s mbolos m as empleados. Para indicar el inicio y el n de un algoritmo se emplea como s mbolo una elipse. Para indicar un procedimiento concreto, como por ejemplo realizar un c alculo, asignar un valor a una variable, etc, se emplea como s mbolo un rect angulo. Por u ltimo se emplea un rombo como s mbolo, para representar una condici on. Los s mbolos s relacionan mediante echas que indican el sentido en que se ejecuta el algoritmo. los rombos suelen tener dos echas de salida marcadas con las palabras si no, para indicar por donde sigue el ujo de informaci on dependiendo de si la condici on representada se cumple o no. Por u ltimo un bucle se representa habitualmente mediante una echa que devuelve el ujo a un s mbolo ya recorrido anteriormente.

Bo

rr

ad o

r,j

ua

n. ji m en ez @

La palabra algoritmo ha llegado hasta nosotros transcrita del nombre del matem atico arabe Al-Juarismi (circa 780-850 dc). En programaci on los algoritmos son importantes, porque suponen un paso previo a la creaci on de un programa. Habitualmente, partimos de un problema para el que tenemos un enunciado concreto. Por ejemplo: obtener los n primeros n umeros primos. El siguiente paso, ser a pensar y denir un algoritmo que permita resolver nuestro problema, es importante caer en la cuenta de que un mismo problema puede resolverse, en muchos casos, por distintos caminos. Por tanto es posible dise nar distintos algoritmos para resolver un mismo problema. Un posible algoritmo para el problema de los n umeros primos ser a el siguiente,

s
2

.u cm .es

92

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION Inicio y n del algoritmo

ujo condicional

Figura 2.14: S mbolos empleados en diagramas de ujo

Bo

function p=primos(n) %generador de n umeros primos. Genera un vector con los primeros n n umeros %primos. (si n es muy grande tardar a mucho en acabar. %creamos un vector de salida en el que incluimos el 2 como primer n umero %primo... p=zeros(1,n); p(1)=2; %iniciamos un contador a 1, puesto que ya tenemos el primer n umero primo

rr

ad o

La gura 2.15 muestra un posible diagrama de ujo para el problema de los n umeros primos. Como puede observarse, contiene m as informaci on que la versi on que hemos dado del algoritmo descrito con palabras. Las l neas que marcan los ujos de informaci on nos indican que ser a necesario implementar un bucle exterior hasta que se complete el n umero n de primos solicitados y un bucle interior que deber a comprobar si cada nuevo numero impar que probamos, es divisible por los n umeros primos encontrados hasta ese momento. Hay una tercera condici on que debe interrumpir la comprobaci on para el primer numero impar que resulte ser divisor del numero que se est a comprobando. Es f acil extraer del diagrama de ujo las estructuras de programaci on que necesitaremos para elaborar un c odigo que nos permita resolver el problema planteado. Por ejemplo, parece l ogico implementar el bucle exterior empleando un bucle while, implementar el bucle interior con un for, que de tantas iteraciones como primos se han encontrado hasta ese momento, Emplear un break para interumpir la comprobaci on, etc. Por supuesto es posible realizar un diagrama de ujo m as detallado, en el que incluso se incluyan expl citamente parte del c odigo que se va a utilizar. Por ejemplo se podr a indicar que se emplear a la funci on rem para comprobar si un n umero es divisble entre otro. Sin embargo, hay que tener cuidado para evitar que un exceso de detalle diculte entender la l ogica del algoritmo contenida en el diagrama. Por u ltimo el algoritmo se codica dando lugar a un programa de ordenador que permite resolver el problema. Para ello, hay que identicar las instrucciones del algoritmo con estructuras de programaci on validas: bucles, condicionales, etc. Veamos un posible c odigo para generar n umeros primos, siguiendo el algoritmo descrito.

r,j

ua

n. ji m en ez @

.u cm .es

procedimentos

2.5. CONTROL DE FLUJO

93

inicio

Introducir cuantos n umeros primos se desea obtener (n) guardar el n umero 2 como primer n umero primo

r,j

ua

rr

ad o

a nadir el n umero impar a la lista de primos encontrados s

Bo

Figura 2.15: Diagrama de ujo para el problema de los n umeros primos

n. ji m en ez @
s no Se han acabado los n umeros primos ya encontrados? no

Se ha alcanzado la cifra pedida de primos?

No tomar el siguiente n umero impar tomar el primer numero primo de los ya encotrados

Es divisible el impar entre el primo?

Tomar el siguinte n umero primo de la lista de los ya encontrados

.u cm .es
Si n

94

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

j=1; %creamos un segundo contador que recorra los n umeros impares, a a partir %del 3 s=3; %creamos un bucle while, que realiza las iteraciones necesarias hasta tener %los n n umeros primos deseados. while j<n %creamos un bucle for que recorra todos los primos encontrados hasta la %fecha pr=1; %Activamos aviso de numero primo for i=2:j %calculamos el resto de la divisi on entera con cada primo de p if rem(s,p(i))==0 %si el numero es divisible por algun primo anterior pr=0; %Desactivamos el aviso: el n umero no el primo... break %... y cortamos la b usqueda end end if pr==1 %si el n umero es primo p(j+1)=s; %lo guardamos... %...e incrementamos el contador de n umeros primos encontrados j=j+1; end %por ultimo, generamos un nuevo candidato para ver si es primo... s=s+2; end

2.6.

Representaci on Gr aca

2.6.1.

plot. El comando de dibujo m as sencillo de Matlab es el comando plot. La losof a de dibujo es muy sencilla se pasan como variables de entrada do vectores, el primero de ellos con las coordenadas x y el segundo con las correspondientes coordenadas y de los puntos que se desea dibujar. Si no se indica nada, Matlab unir a los puntos mediante l neas rectas. Supongamos que deseamos representar gr acamente los puntos (x.y ) de la siguiente tabla de datos, Para ello, lo primero que hacemos es construir dos vectores; uno con las coordenadas x de los puntos, >> x=[0 2 -1 -2] x = 0 2 -1 -2

Bo

rr

ad o

La posibilidades gr acas constituyen, junto a la facilidad para manejar matrices, uno de los aspectos m as atractivos de Matlab como herramienta de c alculo cient co. Matlab permite realizar gr acos en dos y tres dimensiones de muy diversos tipos.

El comando plot y las guras en Matlab.

r,j

ua

n. ji m en ez @

.u cm .es

GRAFICA 2.6. REPRESENTACION

95

y el otro con las coordenadas y de los puntos, >> y=[0 3 2 -4] y = 0 3 2 -4

>> plot(x,y)

El tipo de l nea que se emplear a en el gr aco. por ejemplo plot(x,y,-.) une los puntos mediante una l nea de puntos y guiones.

Bo

rr

Si no se dene este tercer par ametro, plot dibujar a los gr acos, por defecto, en color azul, uniendo los puntos con l neas continuas y no usar a ning un s mbolo para dibujar los puntos individuales. La tabla 2.7 muestra los s mbolos disponibles para dibujar con el comando plot. Se puede combinar un s mbolo de cada tipo en un mismo plot. As por ejemplo si queremos representar los datos de la tabla 7.2.1 unidos mediante una linea de puntos, plot(x,y,:) Si queremos que pinte solo los puntos sin unirlos con l neas y en color rojo,

ad o

El s mbolo que se emplear a para representar los puntos. Por ejemplo, plot(x,y,o) dibuja un c rculo en la posici on de dada punto y no los unes entre s mediante l neas rectas. El color que se emplear a para dibujar. Por ejemplo, plot(x,y,r). Dibuja la gr aca en color rojo.

r,j

ua

Matlab responde al comando abriendo una ventana gr aca, como la que muestra la gura 2.16, con la gura correspondiente a los puntos de la tabla, unidos mediante l neas rectas. La ventana gr aca de Matlab, tiene en su parte superior una barra de herramientas y un men u desplegable con funciones espec cas para la manipulaci on de los gr acos. Se aconseja leer la ayuda de Matlab sobre el uso de dichas herramientas. Una de las opciones del men u desplegable, permite guardar la gura generada como un archivo gr aco. Si salvamos el gr aco de la gura 2.16 y lo importamos directamente en el texto obtendr amos un gr aco como el de la gura, 2.17. A partir de ahora importaremos de esta manera todas las guras que costruyamos con Matlab. El comando plot admite un tercer par ametro de entrada. Se trata de s mbolos, escritos entre comillas simples, que permiten denir:

n. ji m en ez @

Por u ltimo empleamos el comando plot, dando como variables de entrada los dos vectores construidos,

.u cm .es

Tabla 2.6: Datos de prueba x y 0 0 2 3 -1 2 -2 -4

96

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Figura 2.16: Ventana gr aca de Matlab. representaci on de los punto de la tabla 7.2.1 plot(x,y,.r)

Si queremos que pinte los puntos representados por tri angulos con el v ertice hacia arriba, unidos mediante una l nea continua y en color negro, plot(x,y,-^k)

Bo

rr

Figuras. Cada vez que escribimos en la ventana de comandos de Matlab, un comando gr aco como por ejemplo plot Matlab comprueba si existe alguna gura (ventana de gr acos) abierta. Pueden darse entonces tres situaciones distintas. 1. No hay ninguna gura abierta. Matlab crea entonces una gura nueva y representa en en ella el gr aco pedido. 2. Hay una gura abierta. Matlab emplear a dicha gura para representa el gr aco pedido. Por defecto, Matlab borrar a cualquier gr aco anterior que contuviese la gura. 3. existe m as de una gura abierta. Matlab emplear a para dibujar la llamada gura activa, que corresponde con la gura que se haya utilizado o que se haya seleccionado por u ltima vez con el rat on.

ad o

La gura 2.18 muestra los resultados de las combinaciones de s mbolos que acabamos de describir.

r,j

ua

n. ji m en ez @

.u cm .es

GRAFICA 2.6. REPRESENTACION

97

4 2

1.5

n. ji m en ez @
1 0.5 0 0.5 1

s
1.5 2

Figura 2.17: gr aco de los puntos de la tabla 7.2.1 obtenida con el comando plot Es posible crear varias guras distintas empleando directamente el comando figure. Cada vez que lo introduzcamos en la ventana de comandos, Matlab crear a una gura nueva asign andole un n umero (gura 1, 2 ,3 etc.). Si empleamos el comando figure, seguido de un n umero entre par entesis, figure(25), Matlab crear a una nueva gura asign andole dicho n umero y si ya existe la gura la convertir a en la gura activa. El siguente script muestra un ejemplo del uso de figure y plot combinados.

%vamos a pintar un trozo de la funci on e^x, en concreto para el intervalo %x=[0,1]

Bo

rr

%Construimos un vector de 100 puntos equiespaciados en el intervalo [0,1] x=linspace(0,1,100); %calculamos el valor de la funcion e^x para los puntos cosntruidos, y1=exp(x); %pintamos los puntos y frente a x, plot(x,y1) %plot ha construido una figura en Matlab, la figura 1.

ad o

r,j

%este script (figuras.m)muestra el uso de los comandos figure y plot para pintar %varias funciones se aconseja copiarlo y probarlo en Matlab para entender %mejor c omo funciona.

ua

.u cm .es

98

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

%Construimos una segunda figura en Matlab figure %se ha construido la figura 2 %construimos una tercera figura figure %se ha construido la figura 3

%calculamos los valores que tomar a la funci on sin(2*pi*x) para los puntos %x del intervalo [0,1] que ya tenemos y2=sin(2*pi*x); %hacemos activa la figura 2 figure(2) %pintamos en esta figura los puntos de la funci on sin...

Bo

%volvemos a hacer activa la figura 1 figure(1) %pintamos ahora los puntos de la de la funci on y=e^x, pero invertidos x %frente a y, La grafica anterior se borra y es sustituida por la nueva, plot(y1,x) %creamos una nueva figura asign andole un numero al crearla, figure(13) %volvemos activar la figura 3 figure(3) %volvemos a pintar, ahora en la figura 3, la funci on y=e^x,

rr

ad o

plot(x,y2)

r,j

ua

n. ji m en ez @

.u cm .es

Tipo de l nea continua puntos puntos y guiones guiones

Tabla 2.7: tipos de l nea y color del comando plot S mbolo Tipo de punto S mbolo Color punto . azul : c rculo o verde equis x rojo -. m as + cyan asterisco * amarillo diamante d negro triangulo v ertice abajo v blanco triangulo v ertice arriba triangulo v ertice izquierda < triangulo v ertice derecha > triangulo v ertice arriba cuadrado s pent agono p hex agono h

S mbolo b g r c y k w

GRAFICA 2.6. REPRESENTACION

99

plot(x,y) 4 2 0 2 4 2 4 2 0 2 4 2

plot(x,y,:)

0 plot(x,y,or)

plot(x,y, ^ k) 4 2 0

4 2 0 2 4 2

n. ji m en ez @
2 0 1 2 4 2 1

s
0 1 2

Figura 2.18: Datos de la tabla 7.2.1 representados mediante distintos tipos de lineas y colores plot(x,y1)

Bo

rr

Como se ha se nalado antes, cualquier comando gr aco que se ejecute borra por defecto el contenido anterior de la gura activa. Es posible cambiar este comportamiento, empleando para ello el comando hold. Si en la ventana de comandos escribimos hold on, a partir de ese momento la ventana activa mantendr a cualquier gr aco que contenga y a nadir a a este los nuevos gr acos que se creen. Este comportamiento se mantiene hasta que vuelva a escribirse en la ventana de comandos la sentencia hold off. El siguiente script muestra un ejemplo del uso de este comando y La gura 2.19 el gr aco resultante. %ejemplo de uso de hold on para representar dos funciones en el mismo %gr afico %vamos a representar las funciones seno y coseno en el intervalo [-pi, pi] %creamos un vector de 100 puntos en el intervalo, x=[-pi:2*pi/99:pi];

ad o

r,j

figure(13) plot(x,y2)

ua

%volvemos a activar la figura 13 y pintamos en ella de nuevo la funcion %sin..

.u cm .es
1 2

100

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

%calculamos el valor de la funci on seno sobre los puntos x seno=sin(x); %calculamos el valor de la funci on coseno sobre los puntos x coseno=cos(x); %pintamos la funcion seno, con linea continua azul plot(x,seno) %le pedimos que mantenga el gr afico creado hold on %pintamos encima la funci on coseno en linea continua roja plot(x,coseno,r)

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8

ad o

1 4

r,j

ua

n. ji m en ez @
2 1 0 1 2 3 4

Bo

Figura 2.19: gr acas de las funciones seno y coseno en el intervalo (, ). Representadas en la misma gura, usando el comando hold on. Es posible tambi en incluir varios gr aco separados en la misma gura. Para ello se emplea el comando subplot(i,j,k). Este comando divide la gura en un total de i j gr aco y activa el situado en la posici on k , las posiciones se cuentan la a la de arriba a abajo. El siguiente script muestra el uso del comando suplot La gura 2.20 muestra el resultado obtenido. %Este script muestra el uso del comando subplot

rr

.u cm .es

GRAFICA 2.6. REPRESENTACION %vamos a crear una figura con 2X3=6 gr aficas, se disponen en la figura como %si fueran los elementos de una matriz... %usamos el comando subplot de modo que cree el primer eje de los 6 subplot(2,3,1)

101

%calculamos los valores de polinomio 3x^2+2^x-1 y=3*x.^2+2*x-1; %dibujamos la funci on en los ejes plot(x,y) %A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y) %A~ nadimos un titulo al grafico title(gr afico 1)

%Generamos los siguientes ejes (a la derecha del anterior) subplot(2,3,2) %dubujamos la misma funci on pero ahora en linea discontinua roja plot(x,y,:r) %A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y) %A~ nadimos un titulo al grafico title(gr afico 2)

Bo

rr

%A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y) %A~ nadimos un titulo al grafico title(gr afico 3) %Generamos los siguientes ejes (debajo de los primeros) subplot(2,3,4) %dubujamos la misma funci on pero ahora solo con circulos azules plot(x,y,o) %A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y)

ad o

r,j

%Generamos los siguientes ejes (a la derecha del anterior) subplot(2,3,3) %dubujamos la misma funci on pero ahora en linea de punto y raya negra plot(x,y,-.k)

ua

n. ji m en ez @

.u cm .es

%definimos un vector x de puntos equiexpacios en el intervalo (-1,1) x=linspace(-1,1,20);

102

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

%A~ nadimos un titulo al grafico title(gr afico 4) %Generamos los siguientes ejes (a la derecha del anterior) subplot(2,3,5) %dubujamos la misma funci on pero ahora solo con cruce rojas plot(x,y,+r) %A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y) %A~ nadimos un titulo al grafico title(gr afico 5)

%A~ nadimos r otulos a los ejes xlabel(eje x) ylabel(eje y) %A~ nadimos un titulo al grafico title(gr afico 6)

En el ejemplo, se ha hecho usos de algunos comandos para gr acos que permiten introducir t tulos. Estos son: title, introduce un titulo a un gr aco, por ejemplo,

xlabel, a nade un r otulo al eje x, por ejemplo, xlabel(tiempo en segundos)

ylabel(distancia en metros)

2.6.2.

Bo

Hasta ahora, hemos visto tan solo el comando plot, que nos ha servido para introducir las capacidades gr acas en Matlab. Como hemos visto, plot permite representar gr acamente colecciones de datos en dos dimensiones. Hay otros muchos comandos que permiten obtener representaciones especializadas de datos en dos dimensiones. A continuaci on veremos algunos de los m as destacables. fplot. Permite dibujar directamente una funci on en un intervalo de valores. El nombre de la funci on hay que introducirlo entre comillas simples y el intervalo como un vector de dos componentes. Por ejemplo, >> fplot(exp(-x.^2).*cos(6*pi*x),[-3 3])

rr

ad o

ylabel a nade un r otulo al eje y , por ejemplo,

Gr acos en 2D

r,j

ua

title(gr afico de temperaturas)

n. ji m en ez @

%Generamos los ultimos ejes (a la derecha del anterior) subplot(2,3,6) %dubujamos la misma funci on pero ahora en linea continua y asteriscos %negros plot(x,y,-*k)

.u cm .es

GRAFICA 2.6. REPRESENTACION


grfico 1 4 4 grfico 2 4 grfico 3

103

2 eje y eje y

2 eje y

2 1

0 eje x grfico 4

2 1

0 eje x grfico 5

2 1

0 eje x grfico 6

2 1

0 eje x

n. ji m en ez @
1 2 1 0 eje x 1 2 1

s
0 0 eje x 1

2 eje y eje y

2 eje y

Figura 2.20: Ejemplo de empleo del comando subplot dibuja la funci on,

f (x) = ex cos(6x)

en el intervalo [3, 3] (gura 2.21.

Un par de observaciones sobre este ejemplo: En primer lugar las divisiones del eje x aparecen marcadas como potencias de 10. Como estamos representando empleando el logaritmo decimal de la variable x, las divisiones se corresponden con el exponente de la potencia de 10 de cada divisi on, log10 (10n ) = n. En segundo lugar hemos empleado un nuevo comando gr aco; se trata del comando grid. Este comando a nade una ret cula al gr aco de modo que sea m as f acil ver los valores que toman las variables en cada punto de la gr aca. grid on,a nade la ret cula y grid off la retira. semilogy. An aloga al anterior, simplemente que ahora es el eje y el que se representa en escala logar tmica. En este caso ser a si representamos la funci on y = 10x cuando obtengamos una linea recta,

Bo

rr

ad o

>> >> >> >>

x=linspace(0,1,100); y=log10(x); semilogx(x,y) grid on

r,j

semilogx. El comando semilog representa el eje de las x en escala logar tmica, Es decir, en lugar de representar frente a la variable x, se representa frente a log10 (x). Si dibujamos empleando este tipo de gr aco la funci on y = log10 (x) deber amos obtener una linear recta de pendiente unidad. La gura 2.22 muestra el resultado, empleando para las equis el intervalo (0, 1).

ua

.u cm .es
1

104

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 3 2

n. ji m en ez @
1 0 1 2

Figura 2.21: Ejemplo de empleo del comando fplot >> >> >> >> x=linspace(0,1,100); y=10.^x; semilogy(x,y) grid on

>> >> >> >> >>

Bo

stem, bar, stairs. En los tres casos, se obtienen representaciones discretas de un conjunto de datos. stem representa los datos mediante lineas verticales que parten del eje x y llegan hasta el

rr

Para el intervalo angular [0, 8 ]. theta=linspace(0,8*pi,100); r=2*theta; polar(theta,r) r=sqrt(theta); polar(theta,r)

ad o

polar. Representa funciones en coordenadas polares polar(theta,r. La primera variable es un angulo en radianes y la segunda el correspondiente r adio. La gura 2.24 muestra la espiral, r =2

r,j

loglog. An aloga a las anteriores, loglog(x,y) representa y frente a x empleando en ambos ejes una escala logar tmica.

ua

s
3

.u cm .es

GRAFICA 2.6. REPRESENTACION

105

0 0.2 0.4

0.8 1 1.2 1.4 1.6 1.8 2 2 10


1

10

Figura 2.22: Representaci on de la funci on y = log10 (x) empleando el comando semilogx valor correspondiente de y. Las l neas van rematadas por un c rculo. bar Emplea barras solidas verticales y stairs realiza una representaci on en escalera. La gura 2.25 muestra el resultado de dibujar, empleando estos tres tipos de gr acos, los datos correspondientes al n umero de coches por cada 1000 habitantes en 2007 para cincuenta pa ses distintos (los datos se guardaban en una matriz llamada auto 50 2007), >> >> >> >> >> >> subplot(1,3,1) stem(auto_50_2007) subplot(1,3,2) bar(auto_50_2007) subplot(1,3,3) stairs(auto_50_2007)

Bo

hist. Este comando permite dibujar el histograma de una colecci on de datos. El histograma es una forma de representar cuantas veces se repite un datos, o m as exactamente cuantos datos de la colecci on caen dentro de un intervalo dado. La funci on hist(x,n) admite dos par ametros de entrada, un vector de datos x y un valor entero n que representa el n umero de intervalos en que se dividir a el rango de valores de x, para obtener el histograma. Si no se introduce esta segunda variable, Matlab por defecto divide el rango de los datos en 10 intervalos. Veamos un ejemplo de uso de hist, empleando los datos del ejemplo anterior relativos a n umero de coches por cada mil habitantes. Representaremos el histograma para un total de 213 pa ses. Para tener una idea, del rango de los dato, calculamos el valor m nimo y m aximo de los datos disponibles, >> minimo=min(auto2007) minimo = 0

rr

ad o

r,j

ua

n. ji m en ez @

s
10
0

.u cm .es

0.6

106

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

10

10

0.2

0.4

0.6

0.8

Figura 2.23: Representaci on de la funci on y = 10x empleando el comando semilogy >> maximo=max(auto2007) maximo = 874

Bo

>> >> >> >> >> >> >> >> >> >> >> >>

subplot(1,3,1) hist(auto2007) subplot(1,3,2) hist(auto2007,5) subplot(1,3,3) hist(auto2007,20) subplot(1,3,1) title(10 intervalos) subplot(1,3,2) title(5 intervalos) subplot(1,3,3) title(20 intervalos)

La interpretaci on del los histogramas depende l ogicamente del n umero de intervalos. En el caso de 10 intervalos, estos dividen los datos en grupos de aproximadamente 100 coches. Si observamos el histograma resultante, podemos concluir que hay unos 120 pa ses en los que hay entre 0 y 100 autom oviles por cada 1000 habitante, unos 30 pa ses en los que hay entre 100 y 200 autom oviles por cada 1000 habitante, etc. Si miramos el siguiente histograma, en el que se han empleado tan solo 5 intervalos, los grupos son ahora de aproximadamente 200 coches. La primera barra de este

rr

ad o

r,j

ua

El rango va de 0 a 879 autom oviles por cada mil habitantes. La gura 2.26 muestra los histogramas obtenidos sin indicar el n umero de intervalos, por lo que se tomar an 10, tomando 5 intervalos y tomando 20.

n. ji m en ez @

s
1

.u cm .es

GRAFICA 2.6. REPRESENTACION

107

90 120

6 60 4

150 2

30

180

Figura 2.24: Representaci on de la funci on r =

segundo histograma establece que hay unos 150 pa ses en los que hay entre 0 y 200 coches por cada 1000 habitantes. Resultado que corresponde a la suma de los de dos primeros intervalos del histograma anterior. Para el tercer histograma los intervalos son ahora de 50 autom oviles, lo que permite observar m as en detalle que en los histogramas anteriores la distribuci on de veh culos: 110 pa ses tienen menos de 50 autom oviles por cada 1000 habitantes. plotyy. Este comando permite representar dos gr acas en la misma gura de modo que comparten el mismo eje x y cada una tiene su propio eje y. La gura 2.28 muestra el resultado del siguiente ejemplo, >> >> >> >> >> >> x1=linspace(0,10,100); x2=linspace(0,12,50); y1=x1.^2; y2=x2.^(2/3); plotyy(x1,y1,x2,y2) grid on

Bo

rr

quiver. Esta funci on de Matlab permite dibujar vectores en el plano. En realidad est a pensada para dibujar campos vectoriales, con lo que hay que manejarla con cierto cuidado. En primera aproximaci on diremos que quiver necesita 5 variables de entrada: la coordenada x del origen del vector, la coordenada y del origen del vector, la componente x del vector y la componente y del vector, pro u ltimo, un factor de escala al que daremos el valor 0 para que dibuje los vectores a su tama no real, sin modicar su escala. Por ejemplo si queremos dibujar el vector v = (1, 2) situado en el origen de coordenadas,

ad o

r,j

ua

n. ji m en ez @
240 300 270

empleando el comando polar

210

330

.u cm .es
0

108
2500 2000 1500 1000 500 0

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION


2500 2000 1500 1000 500 0 2500 2000 1500 1000 500 0

10

20

30

40

50

20

40

60

10

20

Figura 2.25: Comparci on entre los comandos stem, bar y stairs representando la misma colecci on de datos.
10 intervalos 140 120 100 80 100 60 40 20 0 0 200 400 600 800 40 20 50 60 150 80 200 5 intervalos 120 100 20 intervalos

1000

n. ji m en ez @
0 0 200 400 600 800 1000 0 0 200

s
400 600 800 1000

Figura 2.26: histogramas del n umero de autom oviles por cada 1000 habitantes para 213 pa ses quiver(0,0,1,2,0)

Si queremos representar el mismo vector pero situado en el punto (3, 1), >>quiver(3,-1,1,2,0)

>>quiver([0 3],[0 -1],[1 1],[2 2],0) La gura ?? muestra los resultados del ejemplo que acabamos de ver, errorbar. Permite a nadir barras de error a un gr aco de puntos experimentales. Supongamos que tenemos la siguiente tabla (??) de resultados de la medida de la velocidad de un m ovil frente al tiempo, La primera columna representa el instante de tiempo en que se tom o la medida, la segunda columna representa el valor medido de la velocidad y la tercera columna la incertidumbre de cada medida de velocidad. podemos emplear el comando (errorbar) para representar la velocidad frente al tiempo, a nadiendo una barra de error en cada medida que represente la incertidumbre, >> vel=[0 2.8 4.0 4.3 4.2 4.8 6.3 7.9 8.9 9.0 8.7] vel =

Bo

rr

ad o

r,j

Podemos dibujar un conjunto de vectores con quiver, para ello empleamos como variables de entradas vectores, en lugar de escalares; un vector que contenga las posiciones x del los or genes, un segundo vector que contenga la posiciones y de los or genes, un tercer vector que contenga las componentes x de los vectores y un cuarto que contenga las componentes y, por u ltimo a nadir amos el par ametro de escala 0, que sigue siendo un escalar. Por tanto, si queremos dibujar a la vez los dos vectores de los ejemplos anteriores,

ua

.u cm .es
30 40 50

GRAFICA 2.6. REPRESENTACION

109

100

10

50

Figura 2.27: Ejemplo de uso de la funci on plotyy

Columns 1 through 7 0 2.8000

n. ji m en ez @
4.0000 4.3000 4.2000 9.0000 8.7000 0.8000 0.9000 0.9000 1.1000 1.1000 3 4 5 6 7 8

Columns 8 through 11 7.9000 8.9000

Columns 1 through 7

ad o

r,j

>> inc=[0 0.8 0.8 0.9 0.9 1.0 1.0 1.0 1.1 1.1 1.1] inc =

0.8000

ua

Columns 8 through 11 1.0000 1.1000

Bo

rr

>> t=0:10 t = 0 1 2 9 10

>> errorbar(t,vel,inc) >> xlabel(tiempo s) >> ylabel(velocidad m/s)

s
10 0 12

4.8000

1.0000

.u cm .es
5

6.3000

1.0000

110

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1.5

0.5

0.5

0.5

1.5

2.5

3.5

Figura 2.28: Ejemplo de uso de la funci on quiver

EL resultado se muestra en la gura 2.29. Es interesante hacer notar que la longitud total de cada barra de error es el doble del valor de la incertidumbre correspondiente al punto. Por ejemplo para t = 1s, v + v = 2,8 0,8m/s la longitud de la barra de error es 2 v = 1,6m/s). El comando errobar, puede tambi en emplearse para representar incertidumbre asim etricos. Para ello e es preciso suministrar dos vectores uno U para dibujar la parte superior de la barra de error y otro L para dibujar la parte inferior; errorbar(x,y,L,U).

En tres dimensiones es posible representar dos tipos de gr acos: puntos y curvas, an alogos a los representados en dos dimensiones y adem as supercies en el espacio. plot3. Para dibujar l neas y puntos Matlab emplea los mismos comandos a los que hemos descrito para dos dimensiones, a nadiendo al nombre de comando la terminaci on 3 para indicar que se trata de un gr aco en tres dimensiones. As por ejemplo el comando plot3 nos permite dibujar puntos y curvas en el espacio. El manejo es id entico al de plot, simplemente que ahora es preciso a nadir un vector que contenga los datos de la tercera coordenada z. Por ejemplo, podemos representar la curva,

rr

ad o

r,j

ua

2.6.3.

Gr acos en 3D.

Bo

Para ello, seleccionamos un intervalo de valores para x (0, 2), y calculamos los correspondientes valores de y y z ,

>> x=linspace(0,2,100); >> y=sin(2*pi*x); >> z=cos(2*pi*x);

n. ji m en ez @
y = sin(2x) z = cos(2x)

s
4

.u cm .es

GRAFICA 2.6. REPRESENTACION

111

Podemos ahora representar la gr aca de nuestra funci on empleando el comando plot3, >> >> >> >> >> plot3(x,y,z) grid on xlabel(x) ylabel(y) zlabel(z)

>> view(90,0) >> view(0,90) >> view(0,0)

Bo

rr

bar3, stem3, hist3, quiver3. Existen versiones 3D de los comandos bar, stem, hist y quiver. Su funcionamiento es similar aunque no siempre igual al de la versi on 2D que vimos en la secci on anterior. En algunos casos necesitan tres variables de entrada, correspondientes a las componentes (x,y,z) de los datos que se quiere representar, y en otros necesitan que los datos de entrada se le suministren en forma de matriz. Para conocer en detalle su funcinamiento, lo ideal es acudir a la ayuda de Matlab.

Supercies. Para trazar supercies en el espacio, Matlab necesita en primer lugar que se dena una ret cula en el plano (x, y ) que sirve de base sobre la que calcular los puntos z sobre los que se alzar a la supercie.

ad o

r,j

Hemos a nadido los comandos grid on para obtener una trama en 3D que permita ver mejor el resultado. La gura 2.30(a) muestra la gura de Matlab obtenida, donde se ha se nalado adem as un bot on que permite rotar la gura, cambiando la vista. Para ellos, una vez pulsado el bot on, basta con arrastrar el rat on sobre la gura manteniedo pulsado el boton izquierdo. La gura 2.30(b), muestra la misma gr aca en 3D, pero ahora vista de frente (como si nos situ aramos en el eje x). La gura 2.30(c), nos muestra la graca vista desde arriba (desde el eje z), por u ltimo, la gura 2.30(d) muestra una vista lateral de la gr aca (tomada desde el eje y). Es posible rotar la gura par a obtener una vista concreta mediante el comando view(Az, E)l. Este comando admite dos par ametros; Az, representa el azimuth o angulo de rotaci on horizontal, El representa el angulo de elevaci on. Ambos angulos se introducen en grados. As , por ejemplo las vistas representadas en las guras anteriores, se pueden obtener como,

ua

n. ji m en ez @

Tabla 2.8: Resultados experimentales de la medida de la velocidad de un m ovil tiempo velocida incertidumbre t (s) v (m/s) v (m/s) 0 0 0 1 2.8 0.8 2 4.0 0.8 3 4.3 0.9 4 4.2 0.9 5 4.8 1.0 6 6.3 1.0 7 7.9 1.0 8 8.9 1.1 9 9.0 1.1 10 8.7 1.1

.u cm .es

112

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

12

10

8 velocidad m/s

0 2

n. ji m en ez @
2 4 6 8 10 tiempo s

Figura 2.29: Datos de la tabla ?? representados empleando el comando errorbar

r,j

ua

Para denir dicha ret cula Matlab emplea dos matrices. una de ellas Xm contiene las coordenadas x de los nodos de la ret cula y la otra Ym las coordenadas y . Los elementos que ocupan la misma posici on en ambas matrices, representas, juntos, un punto en el plano. Matlab emplea dichas matrices como matrices de adyacencia. Cada nodo, (xm (i, j ), ym (i, j ), aparecer a en la gr aca conectado por una arista a cada uno de sus cuatros puntos vecinos, (xm (i 1, j ), ym (i 1, j ), (xm (i, j 1), ym (i, j 1), (xm (i + 1, j ), ym (i + 1, j ), (xm (i, j + 1), ym (i, j + 1). Supongamos que empleamos las siguientes matrices, Xm y Ym para denir una ret cula sobre la que dibujar una supercie,

ad o

Xm

0 0 = 0 0

1 1 1 1

2 2 2 2

0 3 1 3 ,Y 3 m 2 3 3

0 1 2 3

0 1 2 3

rr

(0, 0) | 0 (0 , 1) posiciones 1 | 2 nodos (0, 2) 3 | (0, 3)

(1, 0) | (1, 1) | (1, 2) | (1, 3)

s
12

(2, 0) | (2, 1) | (2, 2) | (2, 3)

Bo

La ret cula denida por Matlab, a partir de dichas matrices tendr a el aspecto que se muestra en la gura 2.31. Si nos jamos en los ejes de la gura es f acil obtener las coordenadas de los nodos y comprobar como, est an unidos entre s por aristas los que ocupan posiciones adyacentes en las matrices Xm e Ym . Para construir una supercie sobre la ret cula, lo u nico que hace falta es denir una altura (z), para cada punto de la ret cula. Para ello, Matlab emplea una matriz, del mismo tama no que Xm y xm . As por ejemplo, si denimos,

.u cm .es
(3, 0) | (3, 1) | (3, 2) | (3, 3)

GRAFICA 2.6. REPRESENTACION

113

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 1 0.5 z

(a) ventana gr aca

(b) vista frontal (eje x)

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 y

1 0.8 0.6 0.4 0.2 0

0.5

n. ji m en ez @
z 0.2 0.4 0.6 0.8 1

1 x

1.5

0.5

s
1 x 1.5 2

(c) vista desde arriba (eje z)

(d) vista lateral (eje y)l

r,j

ua

Figura 2.30: Gr aco en 3D y rotaciones.

Cada elemento de la matriz Zm representa la altura del nodo correspondiente a las posiciones marcadas por las matrices Xm e Ym , tal y como se muestra en la gure 2.32. La estructura de las matrices Xm e Ym de los ejemplo anteriores, es la t pica de las matrices de adyacencia de una ret cula cuadrada; la matriz Xm tiene la las repetidas y la matriz Ym tiene repetidas la columnas. En el ejemplo las matrices son cuadradas y denen una ret cula de 4 4 nodos. En general, podemos denir una ret cula rectangular de m n nodos. En este caso las matrices empleadas para denir la ret cula tendr an dimensi on m n. Para dibujar en Matlab supercies podemos en primer lugar emplear def nir la ret cula a partir de dos vectores de coordenadas empleando el comando meshgrid. En el ejemplo que acabamos de ver, hemos empleado una ret cula que cubre el intervalo, x [0, 3] e y [0, 3]. para denirlo creamos los vectores, >> x=0:3

Bo

rr

ad o

Zm

0 0 = 0 0

0 1 3 0

0 2 4 0

0 0 0

.u cm .es
0 y 0.5 1 x

114

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

0.5

0.5

1 3 2 1

Figura 2.31: Ret cula para representar supercies. Los puntos negros son los nodos denidos por las matrices Xm e Ym . x = 0 >> y=0:3 y = 0 1 2 1 2 3

A continuaci on empleamos el comando mesgrid para construir las dos matrices de adyacencia. Matlab se encargar a de repetir las las y columnas necesarias, >> [Xm,Ym]=meshgrid(x,y) Xm =

rr

0 0 0 0

ad o

1 1 1 1

Bo

Ym = 0 0 0 0

r,j

2 2 2 2

ua

3 3 3 3

n. ji m en ez @
1.5 1 0.5 y 0 0 x

s
2.5 2

.u cm .es
3

GRAFICA 2.6. REPRESENTACION

115

4 3.5 3 2.5 2 1.5 1 0.5 0 3 z

s n. ji m en ez @
2 1 1 0 0 y x 2

Figura 2.32: Supercie elemental obtenida elevando los cuatros puntos centrales de la gura 2.31. 1 2 3 1 2 3 1 2 3 1 2 3

Una vez construidas las matrices de adyacencia, solo necesitamos una matriz de valores para zm si demos por ejemplo, >> Zm=zeros(size(Xm))

ad o

Zm =

Bo

rr

0 0 0 0

r,j

0 0 0 0

Podr amos representar la ret cula plana de la gura 2.31, empleando por ejemplo el comando mesh(Xm, Ym, Zm).

mesh y surf. Una vez que hemos visto como construir una ret cula rectangular sobre la que construir una supercie, veamos como dibujarla con un ejemplo. Supongamos que queremos dibujar la supercie, z = x3 + y 2 En la regi on del plano, x [1,5, 1,5], y [2, 2].

ua

0 0 0 0

0 0 0 0

.u cm .es
3

116

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

Igual que en el ejemplo inicial, lo primero que debemos hacer es construirnos una matrices de adyacencia que denan una ret cula en la regi on de inter es, >> x=linspace(-1.5,1.5,25); >> y=linspace(-2,2,50); >> [Xm,Ym]=meshgrid(x,y);

Es interesante notar que la regi on de inter es no es cuadrada y que las matrices de adyacencia tampoco los son (50 25). Adem as los puntos no est an espaciados igual en los dos ejes. A continuaci on obtenemos la matriz de coordenadas z, aplicando la funci on a los puntos de la ret cula, >> Zm=Xm.^3+Ym.^2; Para representar la supercie podemos emplear el comando mesh. >> mesh(Xm,Ym,Zm)

Este comando admite como variables de entrada las dos matrices de adyacencia empleadas para denir la ret cula y la matriz Zm que contiene los valores calculados para la variable z, en todos los puntos de la ret cula. mesh traza la supercie en forma reticular, es decir, nos dibuja una malla en el espacio. El color de la malla depende del valor que toma la coordenada z. Podemos tambi en representar la supercie haciendo uso del comando surf, empleando las mismas variables de entrada que en el caso de mesh. >> surf(Xm,Ym,Zm)

Hemos cosntruido una ret cula en las variables r y , si ahora denimos las matrices de adyacencia como las proyecciones sobre los ejes x e y , >> xm=rm.*cos(them); >> ym=rm.*sin(them);

Bo

Obtenemos una ret cula con simetr a radial, centrada en el origen de coordenadas. Como la que se muestra en la gura, 2.34. La ret cula resulta muy adecuada para dibujar por ejemplo un cono (gura refg:cono), >> zm=2-sqrt(xm.^2+ym.^2); >> mesh(xm,ym,zm) A continuaci on, se incluye el c odigo de un script con varios ejemplos m as de dise no de ret culas circulares y gr acos de supercies en 3D. Los resultados se muestran en la gura 2.38

rr

ad o

r,j

>> r=0:2/20:2; >> theta=0:2*pi/36:2*pi; >> [rm,them]=meshgrid(r,theta);

ua

La diferencia est a en que ahora la supercie muestra las caras denidas por la malla de colores, seg un el valor que toma la variable z . la gura 2.33(a) muestra el resultado de nuestro ejemplo empleando mesh y la gura 2.33(b) muestra el resultado empleando surf. Para gurar que presentan simetr a radial, puede ser m as conveniente, denir las ret cula en coordenadas polares. as por ejemplo,

n. ji m en ez @

.u cm .es

GRAFICA 2.6. REPRESENTACION %este script (varios_g3d.m) incluye el dise~ no de varias ret culas %circulares para trazar gr aficos de superficies en el espacio. %ret cula circular para un cono r=0:2/20:2; theta=0:2*pi/36:2*pi; [rm,them]=meshgrid(r,theta); %calculamos las compontes en x e y partir de rm y thm, xm=rm.*cos(them); ym=rm.*sin(them);

117

%Definimos la componente z, a partir de la ecuaci on de un cono, zm=2-sqrt(xm.^2+ym.^2); %lo dibujamos empleando el comando mesh mesh(xm,ym,zm)

%Para dibujar una esfera, podr amos emplear la misma ret cula, pero sale %m as proporcionada, si de emplear intevalos de r equispaciodos, los hacemos %proporcionales al agulo de elevacion (0,pi/2). Asique recalculamos r. r=2*cos(0:pi/2/18:pi/2); %tomamos 16 intervalos entre r= y r=2 %para theta usamos el mismo de antes, no hace falta volver a calcularlo. %calculamos los puntos de la ret cula en polares, [rm,them]=meshgrid(r,theta);

Bo

rr

ad o

%definimos la componente z, como es la ecuaci on de una esfera, debemos %calcularla en dos partes, zm_mas=sqrt(4-(xm.^2+ym.^2)); zm_menos=-sqrt(4-(xm.^2+ym.^2)); %vamos a emplear la misma ventana gr afica en la que hemos dibujado el %cono, asi que pedimos a Matlab que retenga lo ya dibujado, hold on %para que no salga un dibujo encima del otro, dibujamos la esfera %desplazando su origen al punto (3,3,0) %emplearemos ahora el comando surf para representarla %primero representamos la mitad superior

r,j

ua

%calculamos las componentes x e y a partir de rm y thm xm=rm.*cos(them); ym=rm.*sin(them);

n. ji m en ez @

.u cm .es

118

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

surf(xm+3,ym+3,zm_mas) %y despues la parte inferior surf(xm+3,ym+3,zm_menos)

%volvemos a crear la reticula [rm,them]=meshgrid(r,theta); %calculamos las componentes x e y a partir de rm y thm xm=rm.*cos(them); ym=rm.*sin(them);

% Para calcular los valores de z, debemos dividir la altura total que % queremos dar al cilindro entre el n umero de divisiones en r que tiene la % ret cula original por ejemplo si la altura fuera 2 z=2/(length(r)-1)*(0:length(r)-1); % Tenemos una columna de la matriz z, pero necesitamos repetirlas para % cada valor de them, zm=ones(size(xm))*diag(z); %podemos ahora dibujar en cilindro. Como hemos hecho con la esfera, lo %vamos a desplazar a una posici on en la que no se sobreponga a otra %figura, por ejemplo al punto (+3 -3 -1). %lo vamos a representar usando de nuevo en comando mesh

Bo

contour, contour3, meshc y surfc. Este comandos permiten obtener y dibujar las curvas del nivel de una supercie. Su uso es id entico al de los comandos anteriores. Es decir, tambien necesitan que se dena una ret cula en el plano (x, y ), y se calculen los valores que tomar a la variable z sobre los puntos de la ret cula. Veamos su funcionamiento con un u ltimo ejemplo. Obtenemos una ret cula cuadrada, calculamos sobre ella los puntos de la supercie,

rr

ad o

r,j

mesh(xm+3,ym-3,zm-1)

>> >> >> >> >>

x=[-1:0.05:1]; y=x; [xm,ym]=meshgrid(x,y); zm=sin(2*pi*xm)+cos(2*pi*ym); contour(xm,ym,zm)

ua

n. ji m en ez @
z = sin(2x) + cos(2y )

.u cm .es

%por ultimo vamos a obtener la gr afica de un cilidro vertical, Para ello, %volvemos a alterar los valore de r. Costruimos un vector que repita %siempre los mismos valores y le damos tanto elementos como divisiones %verticales queramos que tenga el cilindro, por ejemplo 20 r=2*ones(1,20);

GRAFICA 2.6. REPRESENTACION >> contour3(xm,ym,zm) >> meshc(xm,ym,zm) >> surfc(xm,ym,zm)

119

z= Sobre la que trazamos la curva,

sin (x)2 + (y 2 ) sin ((x)2 + (y 2 ))

>> >> >> >> >> >> >> >>

x=[-1:0.05:1]; y=x; [xm,ym]=meshgrid(x,y); zm=sin((pi*xm).^2+(pi*ym).^2)./((pi*xm).^2+(pi*ym).^2); mesh(xm,ym,zm) y=sin(pi*x); zm=sin((pi*xm).^2+(pi*ym).^2)./((pi*xm).^2+(pi*ym).^2); z=sin((pi*x).^2+(pi*y).^2)./((pi*x).^2+(pi*y).^2);

Bo

rr

ad o

r,j

ua

Es importante insistir en que a lo largo de esta secci on nos hemos limitado a introducir algunas de las posibilidades gr acas de Matlab. Para obtener una visi on completa de las mismas es imprescindible leer con detenimiento la ayuda de Matlab.

n. ji m en ez @

y = sin(pix),

.u cm .es

La gura 2.37(a) muestra los resultados de aplicar el comando contour la gr aca representa las curvas de nivel de la supercie dibujadas sobre el plano (x, y ). El comando contour3 ( gura 2.37(b)) representa de nuevo las curvas de nivel, pero sit ua cada una a su correspoondiente altura z . Por u ltimo meshc y surfc representan la supercie y a naden en el plano (x, y ) la representaci on de las curvas de nivel correspondiente a la supercie. Para terminar la secci on dedicada a los gr acos, vamos a combinar el comando mesh con el comando plot3 para dibujar una curva sobre una supercie. Tomaremos como ejemplo la supercie,

120

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

8 6 4 z 2 0 2 4 2 1

(a) Funci on z = x3 + y 2 representada con mesh

8 6 4 2 0

ad o

r,j

ua

2 4 2

1 0 1 y 2 2 1 x 1 0

rr

(b) Funci on z = x3 + y 2 representada con surf

Bo

Figura 2.33: Comparaci on entre mesh y surf

n. ji m en ez @
2 0 1 1 0 1 y 2 2 x 2

.u cm .es

GRAFICA 2.6. REPRESENTACION

121

2 1.5 1 0.5 0 0.5 1 1.5 2 y

r,j

ua

2.5 2.5

n. ji m en ez @
2 1.5 1 0.5 0 x 0.5 1 1.5 2 2.5

ad o

Figura 2.34: ret cula con simetr a circular

Bo

rr

2.5

.u cm .es

122

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1.5

0.5

1 0

n. ji m en ez @
1 0 1 2 2 x 0 2 y 0 5 2 x

0 2

Figura 2.35: Cono representado sobre una ret cula circular

2 1 0

Bo

rr

ad o

1 2 5

r,j

ua

Figura 2.36: ret cula con simetr a circular

s
2 1 4

.u cm .es

GRAFICA 2.6. REPRESENTACION

123

1
1.5

0.8
1

0.6
0.5

0.4

0.2

0.5

0.2

0.4

n. ji m en ez @
0.5 0 0.5

1.5 1

s
1 0.5 0 0.5 1 1 x y

0.6

0.8

1 1

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

(a) contour

(b) contour3

2 1.5 1 0.5 z 0 0.5 1 1.5 2 1

ua

r,j

2 1 0.8 0.8 0.6 0.4 0.4 0.2 0 0 0.2 0.4 0.6 0.8 1 1 x 0.8 0.2 0.4 0.6 0.2 0.6

1 0.5 0

ad o

0.5

0.5 1 1

0.5 x
y

rr

(c) meshc

(d) surfc

Bo

Figura 2.37: Comparaci on entre los resultados de contour, contour3, meshc y surfc, para la obtenci on de las curvas de nivel de una supercie.

.u cm .es
1

124

A LA PROGRAMACION EN MATLAB CAP ITULO 2. INTRODUCCION

1 0.8 0.6 0.4 z 0.2 0 0.2 0.4 1 0.8 0.6

ua

0.4

r,j

Bo

rr

ad o

Figura 2.38: Curva trazada sobre una supercie

n. ji m en ez @
0.5 0.2 0 0 0.2 0.4 0.6 0.8 1 y 1 x 0.5

s
1

.u cm .es

Cap tulo 3

Aritm etica del Computador y Fuentes de error

En el cap tulo 1, introdujimos la representaci on binaria de n umeros as como la conversi on de binario a decimal y decimal a binario. A lo largo de este cap tulo vamos a profundizar m as en el modo en que el ordenador representa y opera con los n umeros as como una de sus consecuencias inmediatas: la imprecisi on de los resultados.

3.1.

Representaci on binaria y decimal

rr

Los n umeros reales pueden representarse empleando para ello una recta que se extiende entre y +. La mayor a de ellos no admiten una representaci on num erica exacta, puesto que poseen innitos decimales. Los n umeros enteros, 1, 1, 2, 2, 3, 3, admiten una representaci on num erica exacta. En cualquier caso, rara vez manejamos n umeros enteros con una cantidad grande de d gitos, habitualmente, los aproximamos, expres andolos en notaci on cient ca, multiplic andolos por una potencia de 10. Tomemos un ejemplo de la qu mica: la cantidad de atomos o mol eculas que constituyen un mol de una sustancia se expresa por el n umero de Avogadro, NA = 6,02214179 1023 , dicho numero, que deber a ser un entero se expresa empleando tan solo 9 de sus 23 cifras signicativas (a veces tan solo se dan las tres primeras). Cuando truncamos un n umero, es decir, despreciamos todos sus d gitos hacia la derecha a partir de uno dado, estamos aproximando dicho n umero por un n umero racional, es decir, por un n umero que puede expresarse como el cociente entre dos n umeros enteros. 1/2, 3/4, Algunos n umeros racionales se reducen a su vez a n umeros enteros, 6/3, otros dan lugar a n umeros cuya representaci on exige un n umero nito de d gitos:

ad o

r,j

Bo

Si representamos el mismo n umero en base 2 obtenemos, 11/2 = (101,1)2 = 1 22 + 0 21 + 1 20 + 1 21

Sin embargo, el que un n umero racional admita una representaci on nita, depende de la base en que se representa. Por ejemplo: 1/10 = (0,1)10 no admite representaci on nita en base 2. 1/10 = (0,0001100110011 )2 = 1 24 + 1 25 + 0 26 + 0 27 + 1 28 + 125

ua

n. ji m en ez @
11/2 = (5,5)10 = 5 100 + 5 101

.u cm .es

126

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

3.2.

Representaci on de n umeros en el ordenador

Enteros positivos La forma mas f acil de representar n umeros ser a empleando directamente los registros de memoria para guardar n umeros en binario. Si suponemos un ordenador que tenga registros de 16 bits. Podr amos guardar en ellos n umeros comprendidos entre el 0 y el 216 1 = 65536 . Este u ltimo se representar a con un 1 en cada una de las posiciones del registro, en total 16 unos. Se trata del entero m as grande que podr amos representar con un registro de 16 bits: posici on valor 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1

Hasta ahora, nuestro sistema de representaci on solo admite n umeros enteros. El menor n umero que podemos representar es el cero, y el mayor, depender a del tama no n de los registros del ordenador 2n . Es evidente que este sistema de representaci on resulta insuciente. Enteros positivos y negativos Un primera mejora consistir a en ampliar el sistema de representaci on para que admita tambi en n umeros negativos. Una posibilidad ser a reservar uno de los bits del array para representar el signo , y usar los restantes para representar el n umero. En nuestro ejemplo de un registro de 16 bits, el n umero m as grande ser a ahora 215 1 y el m as peque no ser a 215 + 1. el cero tendr a una doble representaci on, una de ellas con signo m as y la otra con signo menos. Una representaci on alternativa, cuyo uso est a muy extendido en las m aquinas es la representaci on conocida con el nombre de Complemento a 2. Supongamos un registro de n bits: Un entero x no negativo se almacena empleando directamente su representaci on binaria. el intervalo de enteros no negativos representables es: 0 x 2(n1) 1. Un entero negativo x, donde 1 x 2(n1) , se almacena como la representaci on binaria del entero positivo: 2n x El n umero as construido, recibe el nombre de complemento a 2 de x.

Bo

En general, dado un n umero entero N < 2n su complemento a dos en una representaci on binaria de n d gitos se dene como: N C2 = 2n N Veamos un ejemplo de esta representaci on, para el caso de un registro de 4 bits: La representaci on en complemento a 2 tiene las siguientes caracter sticas:

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

En este u ltimo caso, se trata de una representaci on que, aunque no termina, es repetitiva o peri odica; tras el primer cero decimal se repite indenidamente la secuencia: 0011. Los n umeros racionales admiten siempre una representaci on nita o innita peri odica. El n umero racional 1/3 = (0,333 )10 = 0,010101 )2 solo admite representaci on innita peri odica tanto en base 10 como en base 2. Sin embargo, admite representaci on nita si lo representamos en base 3: 1/3 = (0,1)3 = 0 30 + 1 31 . Habitualmente, en la vida normal, representamos los n umeros en base 10, sin embargo, como hemos visto en el cap tulo 1 el ordenador emplea una representaci on binaria. Como acabamos de ver, una primera consecuencia de esta diferencia, es que al pasar n umeros de una representaci on a otra estemos alterando la precisi on con la que manejamos dichos n umeros. Esta diferencia de representaci on supone ya una primera fuente de errores, que es preciso tener en cuenta cuando lo que se pretende es hacer c alculo cient co con un ordenador. Como iremos viendo a lo largo de este cap tulo, no ser a la u nica.

DE NUMEROS 3.2. REPRESENTACION EN EL ORDENADOR Decimal 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (4 bits) 1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 C2 = 2n x (16 1) = 15 (16 2) = 14 (16 3) = 13 (16 4) = 12 (16 5) = 11 (16 6) = 10 (16 7) = 9 (16 8) = 8 n. representado -1 -2 -3 -4 -5 -6 -7 -8 7 6 5 4 3 2 1 0

127

La representaci on de los n umeros positivos coincide con su valor binario La representaci on del n umero 0 es u nica.

El rango de valores representables en una representaci on de N bits es 2N 1 x 2N 1 1. Los n umeros negativos se obtienen como el complemento a dos, , cambiado de signo, del valor binario que los representa. Una forma pr actica de obtener el complemento a dos de un n umero binario es copiar el n umero original de de derecha a izquierda hasta que aparezca el primer 1. Luego de copiar el primer 1, se complementan el resto de los bits del n umero (si es 0 se pone un 1 y si es 1 se pone un 0). Por ejemplo el complemento a dos del n umero 2, (0010 en una representaci on de 4 bits) ser a 1110,

ua

r,j

ad o

Una propiedad importante de la representaci on de complemento a dos, es que la diferencia de dos n umeros puede realizarse directamente sumando al primero el complemento a dos del segundo. Para verlo podemos usar los dos n umeros del ejemplo anterior: 0010 es la representaci on binaria del n umero 2, si empleamos un registro de cuatro bits. Su complemento a dos, 1110 representa al n umero 2. Si los sumamos 1 : El resultado de la suma nos da un n umero cuyos primeros cuatro bits son 0. El bit distinto de cero, no puede ser almacenado en un registro de cuatro bits, se dice que el resultado de la operaci on desborda el tama no del registro. Ese bit que no puede almacenarse se descarta al realizar
1 Sumar en binario es como sumar en decimal. Se procede de bit a bit, de derecha a izquierda y cuando se suman 1 y 1, el resultado es 10 (base 2), de modo que el bit resultante se coloca en 0 y se lleva el 1 hacia el siguiente bit de la izquierda.

Bo

rr

n. ji m en ez @
0010 0010 0010 0010
complemento bit 0 complemento bit 0 copia primer bit=1 copia bit derecha

0 10 110 1110

.u cm .es

128

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0

la operaci on de suma, con lo que el resultado ser a cero, como corresponde a la suma de 2 + (2). Esta es la motivaci on fundamental para emplear una representaci on en complemente a dos: No hace falta emplear circuitos especiales para calcular la diferencia entre dos n umeros, ya que esta se representa como la suma del minuendo con el complemento a dos del sustraendo.

3.2.1.

N umeros no enteros: Representaci on en punto jo y en punto otante

Representaci on en punto jo. En la representaci on en punto jo, el registro empleado para almacenar un n umero se divide en tres partes: 1 bit para almacenar el signo del n umero.

Un campo de bits de tama no jo para representar la parte entera del n umero. Un campo para almacenar la parte decimal del n umero

s 1

ad o

p. entera 1 0 1

r,j

Por ejemplo, si tenemos un registro de 16 bits podemos reservar 1 bit para el signo, 7 para la parte entera y 8 para la parte decimal. La representaci on en punto jo del n umero binario 10111.0011101101 ser a: p. decimal 1 1 0

ua

Bo

Es interesante notar c omo para representar la parten entera, nos sobran dos bits en el registro, ya que la parte entera solo tiene cinco cifras y tenemos 7 bits para representarla. Sin embargo, la parte decimal tiene 10 cifras; como solo tenemos 8 bits para representar la parte decimal, la representaci on trunca el n umero eliminando los dos u ltimos decimales. Si asociamos cada bit con una potencia de dos, en orden creciente de derecha a izquierda, podemos convertir directamente el n umero representado de binario a decimal,

rr

s 1 -

0 26

0 25

p. entera 1 0 1 24 23 22

n. ji m en ez @
0 0 1 1 1 1 21 1 20 0 21 0 22 1 23 p. decimal 1 1 24 25

La representaci on de n umeros no enteros se emplea para representar de modo aproximado n umeros reales. Como hemos dicho antes, los n umeros racionales peri odicos y los n umeros irracionales no pueden representarse de forma exacta mediante un n umero nito de decimales. Por esta raz on, su representaci on es siempre aproximada. Para los n umeros racionales no peri odicos, la representaci on ser a exacta o aproximada dependiendo del n umero que se trate, el tama no de los registros del ordenador y el sistema empleado para la representaci on. Los do sistemas de representaci on m as conocidos son la representaci on en punto jo y, de especial inter es para el c alculo cient co, la representaci on en punto otante.

s
0 26

Por tanto el n umero representado ser a,

.u cm .es
1 27 1 28

DE NUMEROS 3.2. REPRESENTACION EN EL ORDENADOR

129

(0 26 + 0 25 + 1 24 + 0 23 + 1 22 + 1 21 + 1 20 + 0 21 + 0 22 + 1 23 + 1 24 + 1 25 + + 0 26 + 1 27 + 1 8) = 23,23046875

s 0

1 26

1 25

p. entera 1 1 1 24 23 22

1 21

1 20

1 21

1 22

1 23

p. decimal 1 1 24 25

1 26 + 1 25 + 1 24 + 1 23 + 1 22 + 1 21 + 1 20 + 1 21 + 1 22 + 1 23 + 1 24 + 1 25 + + 1 26 + 1 27 + 1 28 = 127,99609375 El n umero menor representable, s 1 p. entera 1 1 1 24 23 22

1 26

1 25

n. ji m en ez @
1 21 1 20 1 1 1 21 22 23 1 21 1 20 0 21 0 22 0 23 0 21 0 20 1 2
1

p. decimal 1 1 24 25

s
1 26 1 27 1 28 0 26 0 27 0 28 1 2
6

(1 26 + 1 25 + 1 24 + 1 23 + 1 22 + 1 21 + 1 20 + 1 21 + 1 22 + 1 23 + 1 24 + 1 25 + + 1 26 + 1 27 + 1 28 ) = 127,99609375 El n umero entero m as grande, s 0 p. entera 1 1 1 24 23 22

1 26

1 25

p. decimal 0 0 24 25

1 26 + 1 25 + 1 24 + 1 23 + 1 22 + 1 21 + 1 20 + 0 21 + 0 22 + 0 23 + 0 24 + 0 25 + + 0 26 + 0 27 + 0 28 = 127

ad o

El n umero decimal positivo m as pr oximo a 1, s 0 p. entera 0 0 0 4 3 2 2 22 p. decimal 1 1 4 5 2 2

0 26

r,j

0 25

ua

1 2
2

1 2
3

Bo

rr

0 26 + 0 25 + 0 24 + 0 23 + 0 22 + 0 21 + 0 20 + 1 21 + 1 22 + 1 23 + 1 24 + 1 25 + + 1 26 + 1 27 + 1 28 = 0,99609375 O el n umero decimal positivo m as pr oximo a 0, s 0 p. entera 0 0 0 24 23 22 p. decimal 0 0 24 25

0 26

0 25

0 21

0 20

0 21

0 22

0 23

.u cm .es
1 26 1 27 1 28 1 2
7

De modo an alogo podemos calcular cual ser a el n umero m as grande representable,

1 2
8

0 26

0 27

1 28

130

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

0 26 + 0 25 + 0 24 + 0 23 + 0 22 + 0 21 + 0 20 + 0 21 + 0 22 + 0 23 + 0 24 + 0 25 + + 0 26 + 0 27 + 1 28 = 0,00390625

5,3572 103 5,3572e 03

Es decir, en primer lugar se representa el signo del n umero si es negativo. (si es positivo lo habitual es omitirlo). A continuaci on la parte signicativa, 5,3572, que recibe el nombre de mantisa . Y por u ltimo se representa el valor del exponente de la potencia de 10, 3, precedido por la letra e, e de exponente. En notaci on cient ca se asume que el exponente corresponde siempre a una potencia de diez. Es evidente que tenemos el n umero perfectamente descrito sin m as que indicar los valores de su signo, mantisa y exponente, numero 327,43 r. cient ca 3,2743 102 r. calculadora 3,2743e10 signo mantisa 3,2743 exponente 2

La representaci on binaria en punto otante sigue exactamente la misma representaci on que acabamos de describir para la notaci on cient ca. La u nica diferencia es que en lugar de trabajar con potencias de diez, se trabaja con potencias de dos, que son la que corresponden a la representaci on de n umeros en binario. As por ejemplo, el n umero binario 1101,00101 se representar a como 1,10100101 23 , y el n umero 0,001011101 se representar a como 1,011101 23 . El t ermino punto otante viene del hecho de que el punto decimal de la mantisa, no separa la parte entera del n umero de su parte decimal. Para poder separar la parte entera de la parte decimal del n umero es preciso emplear el valor del exponente. As , para exponente 0, el punto decimal de la mantisa estar a en el sitio que corresponde al n umero representado, para exponente 1 habr a que desplazarlo una posici on a la izquierda, para exponente 1 habr a que desplazarlo una posici on a la derecha, para exponente 2, dos posiciones a la izquierda, para exponente -2, dos posiciones a las derecha, etc. Como representar n umeros binarios en punto decimal empleando los registros de un computador? Una soluci on inmediata es dividir el registro en tres partes. Una para el signo, otra para la mantisa y otra para le exponente. Supongamos, como en el caso de la representaci on en punto jo, que contamos con registros de 16 bits. Podemos dividir el registro en tres zonas, la primera, de un solo bit la empleamos para guardar el signo. La segunda de, por ejemplo 11 bits, la empleamos para guardar la mantisa del n umero y por u ltimo los ocho bits restantes los empleamos para guardar el exponente en binario. Podr amos entonces representar el n umero 1,10100101 23 como,

Bo

rr

ad o

r,j

ua

n. ji m en ez @
calculadora

Representaci on en punto otante La representaci on de n umeros en el ordenador en formato de punto otante, es similar a la forma de representar los n umeros en la llamada notaci on cient ca. En notaci on cient ca los n umeros se representan como el producto de una cantidad por una potencia de diez: 234,25 2,345 102 , 0,000234 2,34 105 , 56,238 5,6238 101 . La idea es desplazar el punto decimal hasta que solo quede una cifra signicativa en la parte entera del n umero y multiplicar el resultado por 10 elevado a la potencia adecuada para recuperar el n umero original. Muchas calculadoras y programas de c alculo cient co presentan los resultados por pantalla en formato cient co. Habitualmente lo hacen con la siguiente notaci on,

.u cm .es

La representaci on en punto jo fue la m as usada en los primeros computadores. Sin embargo, es posible con el mismo tama no de registro representar un espectro mucho m as amplio de n umeros empleando la representaci on en punto otante.

DE NUMEROS 3.2. REPRESENTACION EN EL ORDENADOR sig. 1 mantisa 0 1 25 26

131 exponente 0 1 1 22 21 20

1 20

1 21

0 22

1 23

0 24

0 27

1 28

0 29

0 210

0 23

El est andar IEEE 754 En primer lugar, el est andar se estableci o pensando en dos tama nos de registro el primero de ellos emplea 32 bits para guardar los n umeros en punto otante y recibe el nombre de est andar de precisi on simple. El segundo emplea 64 bits y se conoce como est andar de precisi on doble. Simple precisi on. Empecemos por describir el est andar de precisi on simple. En primer lugar, se reserva un bit para contener el signo. Si el bit vale 1, se trata de un n umero negativo, y si vale 0 de un n umero positivo. De los restantes 31 bits, 23 se emplean para representar la mantisa y 8 para representar el exponente. Si analizamos como es la mantisa de un n umero binario en representaci on de punto otante, nos damos cuenta de que la parte entera siempre deber a valer 1. Por tanto, podemos guardar en la mantisa solo la parte del n umero que est a a la izquierda del punto decimal, y considerar que el 1 correspondiente a la parte entera est a impl cito. Por ejemplo, si tenemos el n umero binario 1,010111 23 solo guardar amos la cifra 010111. El 1 de la parte entera sabemos que est a ah pero no lo representamos. A este tipo de mantisa la llamaremos normalizada, m as adelante veremos por qu e. En cuanto a exponente, es preciso buscar una forma de representar exponentes positivos y negativos. El est andar establece para ello lo que se llama la representaci on en exceso. Con ocho bits podemos representar hasta 28 = 256 n umeros distintos. Estos ir an desde el [00000000] = 0 hasta el [11111111] = 255. Si partimos nuestra colecci on de n umeros en dos, podr amos emplear la primera mitad para representar n umeros negativos, reservando el mayor de ellos para representar el cero, y la segunda para representar n umeros positivos. Para obtener el valor de un n umero basta restar al contenido del exponente el n umero reservado para representar el cero. Se dice entonces que la representaci on se realiza en exceso a dicho n umero. En el caso del est andar de simple precisi on la primera mitad de los n umeros disponibles ir a

Bo

rr

ad o

r,j

ua

n. ji m en ez @

Si bien la representaci on que acabamos de ver sirve para el n umero representado, es evidente que no podemos representar as un n umero con exponente negativo como por ejemplo 1,011101 23 . Adem as la divisi on que hemos hecho del registro de 16 bits es arbitraria; podr amos haber elegido un reparto distinto de bits entre mantisa y exponente. De hecho hasta la d ecada de los noventa del siglo XX, cada ordenador adoptaba su propia representaci on de n umeros en punto otante. La consecuencia era que los mismos programas, ejecutados en m aquinas distintas daban diferentes soluciones. Ya en 1976 John Palmer, de la compa n a INTEL, promueve la creaci on de un est andar, es decir, de una representaci on en punto otante que fuera adoptada por todos los fabricantes de computadoras. El primer borrador del est andar fue elaborado por William Kahan (Intel), Jerome Coonen (Berkeley) y Harold Stone (Berkeley): documento K-C-S. Inspirado en el trabajo de Kahan en el IBM 7094 (1968). El proceso de estandarizaci on fue bastante lento. La primera versi on no fue operativa hasta 1985. El resultado de estos trabajos fue el est andar actual. Conocido como IEEE 754. IEEE son la siglas de Institute of Electrical and Electronics Engineers. Se trata de una asociaci on que naci o en Estados Unidos en el siglo XIX y que goza actualmente de car acter internacional. El IEEE se ocupa, entre otras cosas, de establecer est andares industriales en los campos de la electricidad, la electr onica y la computaci on. Veamos en detalle el est andar IEEE 754.

.u cm .es

132

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR Exceso a 127 Exponente representado 0 127 = 127 1 127 = 126 2 127 = 125 . . . 126 127 = 1 127 127 = 0 128 127 = 1 . . . 254 127 = 127 255 127 = 128

Tabla 3.1: Representaci on en exceso a 127, para un exponente de 8 bits. del 0 al 127 y la segunda mitad del 128 al 255. La representaci on se realiza entonces en exceso a 127. La tabla 3.1 muestra unos cuanto ejemplos de c alculo de la representaci on en exceso. Tenemos por tanto que el exponente de 8 bits del est andar de precisi on simple permite representar todos los exponentes enteros desde el -127 al 128. Ya tenemos casi completa la descripci on del estandar. Solo faltan unos detalles aunque muy importantes relativos a la representaci on de n umeros muy grandes y muy peque nos. Empecemos con los n umeros muy grandes. C ual es el n umero m as grande que podr amos representar en est andar de simple precisi on? En principio cabr a suponer que el correspondiente a escribir un 1 en todos los bits correspondientes a la mantisa (la mayor mantisa posible) y escribir tambi en un 1 en todos los bis correspondientes al exponente (el mayor exponente posible). Sin embargo, el est andar est a pensado para proteger las operaciones del computador de los errores de desbordamiento. Para ello reserva el valor m as alto del exponente. As cuando el exponente contenido en un registro es 128, dicho valor no se considera propiamente un n umero, de hecho es preciso mirar el contenido de la mantisa para saber qu e es lo que representa el registro: Si los bits de la mantisa son todos cero, el registro contiene la representaci on del innito . El est andar espec ca el resultado de algunas operaciones en el innito: 1/ = 0, arctan() = /2. Si por el contrario, el contenido de la mantisa es distinto de cero, se considera el contenido del registro como no num erico (NaN, abreviatura en ingles de Not a Number ). Este tipo de resultados, considerados no num ericos, surgen en algunas operaciones que carecen de sentido mat em atico: 0/0, 0, .

Bo

Todo esto hace que el exponente mayor que realmente representa un n umero sea el 127. Como ejemplo podemos construir el n umero m as grande que podemos representar distinto de innito. Se trata del n umero con la mantisa m as grande posible, una mantisa formada exclusivamente por unos, seguida por el exponente m as grande posible. El exponente mas grande en exceso es 127, que corresponde a un exponente en binario 127 + 127 = 254 [11111110]. Por tanto el n umero se representar a como, sig. mantisa, 23 bits exponente, 8 bits 0 11111111111111111111111 11111110

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Bits de exponente 00000000 00000001 00000000 . . . 01111110 01111111 10000000 . . . 11111110 11111111

equivalente decimal 0 1 10 . . . 0 0 10 . . . 254 255

DE NUMEROS 3.2. REPRESENTACION EN EL ORDENADOR

133

sig. 0

mantisa, 23 bits 10100000000000000000000

El exponente del n umero representado en la tabla anterior es 0. Por tanto, en exceso a 127 el exponente ser a 0 127 = 127. Este exponente corresponde a un n umero desnormalizado por tanto el n umero en expresado base 10 ser a, (1 21 + 0 22 + 1 23 + 0 ) 2126

N otese como el exponente ha sido reducido en una unidad (126) a la hora de calcular la representaci on decimal del n umero. El n umero m as pr oximo a cero que podemos representar mediante n umeros desnormalizados, ser a aquel que tenga la menor mantisa posible distinta de cero,

ad o

que representado en base 10 ser a el n umero: (0 21 + 0 + 1 223 ) 2126 = 2149 45 1,401298464324817 10 . Podemos calcular para comparar cual ser a el n umero normalizado m as pr oximo a cero, se trata del n umero que tiene una mantisa formada solo por ceros, multiplicada por el exponente m as peque no distinto de cero (un exponente igual a cero, implica autom aticamente un n umero desnormalizado), sig. 0 mantisa, 23 bits 0000000000000000000000

r,j

ua

sig. 0

mantisa, 23 bits 0000000000000000000001

Bo

rr

Si lo representamos en formato decimal obtenemos: (1 20 + 0 21 + 0 + 0 223 ) 2126 = 2 1,175494350822288 1038 Como un u ltimo ejemplo, podemos calcular cual es el n umero desnormalizado m as grande. Deber a tener la mantisa m as grande posible (todo unos) con un exponente formado exclusivamente por ceros, sig. mantisa, 23 bits exponente, 8 bits 0 11111111111111111111111 00000000
126

En formato decimal, el n umero ser a: (121 +122 +1 +1223 )2126 1,175494210692441 10 . Los dos u ltimos n umeros representados, son muy pr oximos entre s . De hecho, hemos cal38

n. ji m en ez @
exponente, 8 bits 00000000 exponente, 8 bits 00000000 exponente, 8 bits 00000001

En base 10 el n umero representado ser a, (1 20 + 1 21 + 1 22 + 1 + 1 223 ) 2127 38 3,402823466385289 10 . Donde hemos representado en negrita el 1 impl cito, no presente en la mantisa. Veamos ahora los n umeros mas peque nos, de acuerdo con los dicho, el n umero m as pr oximo a cero que podr amos construir ser a aquel que tuviera la mantisa m as peque na y el exponente m as peque no, es decir una mantisa formada solo por ceros y un exponente formado solo por ceros. Ese n umero ser a (1 20 ) 2127 (se debe recordar que la mantisa en la representaci on del est andar esta normalizada; lleva un 1 entero impl cito). Es evidente que si no fuera por el 1 impl cito de la mantisa ser a posible representar n umeros a un m as peque nos. Por otro lado, si consideramos siempre la mantisa como normalizada, es imposible representar el n umero 0. Para permitir la representaci on de n umeros m as peque nos, incluido el cero, los desarrolladores del est andar decidieron a nadir la siguiente regla: Si los bits del exponente de un n umero son todos ceros, es decir, si el exponente representado es -127, se considera que la mantisa de ese n umero no lleva un 1 entero impl cito. Adem as el exponente del n umero se toma como -126. Los n umeros as representados reciben el nombre de n umeros desnormalizados. Veamos algunos ejemplos.

.u cm .es

134

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

culado ya su diferencia, al obtener el n umero desnomarlizado m as pr oximo a cero representable, (1 20 + 0 21 + 0 + 0 223 ) 2126 (1 21 + 1 22 + 1 + 1 223 ) 2126 = (0 21 + 0 + 1 223 ) 2126 = 2149 1,401298464324817 1045 . Doble precisi on La diferencia entre los est andares de simple y doble precisi on est a en el tama no de los registros empleados para representar los n umeros. En doble precisi on se emplea un registro de 64 bits. Es decir, el tama no de los registros es el doble que el empleado en simple precisi on. El resto del est andar se adapta al tama no de la representaci on; se emplea 1 bit para el signo del n umero, 52 bits para la mantisa y 11 bits para el exponente. En este caso el exponente puede almacenar 211 = 2048 n umeros (desde el 0 al 2047) como en el caso de est andar de simple precisi on se dividen los n umeros por la mitad, con lo que los exponentes se representan ahora en exceso a 1023. por tanto el exponente 0 representa el valor 0 1023 = 1023 y el exponente 2047 representa el valor 2047 1023 = 1024. De nuevo, el valor mayor del exponente, 1024 se emplea para representar el innito , si va acompa nado de una mantisa formada exclusivamente por ceros. En caso de que acompa ne a una mantisa no nula, el contenido del registro se considera que no representa un n umero NaN (error de desbordamiento). . Podemos, como ejemplo, obtener para el est andar de doble precisi on el n umero m as grande representable, sig. 0 mantisa, 52 bits 111111111111111111111111111111111111111111111111111

El n umero representado toma en base 10 el valor: (1 20 +1 21 +1 22 +1 +1252 )21023 1,797693134862316 10308 Por u ltimo, para exponente -1023 es decir, un exponente formado exclusivamente por ceros, el n umero representado se considera desnormalizado; se elimina el 1 entero impl cito de la representaci on de la mantisa y se aumenta en una unidad el exponente, que pasa as a valer -1022. Como ejemplo, podemos calcular el n umero m as pr oximo a cero representable en doble precisi on, sig. 0 mantisa, 52 bits 000000000000000000000000000000000000000000000000001 exponente, 11 bits 00000000000

1. C ual es el valor decimal del siguiente n umero expresado en el est andar del IEEE 754 de simple precisi on precisi on?

ad o

Bo

rr

sig. 1

mantisa, 23 bits 11000000000000000000000

r,j

El n umero representado toma el base 10 el valor: (0 21 + 0 22 + 0 + 1 252 ) 21022 4,940656458412465 10324 La tabla 3.2 resume y compara las caracter sticas de los dos est andares vistos, Para terminar veamos algunos ejemplos de representaci on de n umeros en el est andar IEEE 754:

ua

El bit de signo es 1, por lo tanto el n umero es negativo. El exponente ser a, 027 +126 +125 +124 +123 +122 +021 +020 127 = 124127 = 3 A la vista del exponente, la mantisa est a normalizada, 1 + 1 21 + 1 22 = 1,75 Por tanto el n umero en representaci on decimal es: (1)1 (1,75) 23 = 0,21875

2. C ual es el valor decimal del siguiente n umero expresado en el est andar del IEEE 754 de simple precisi on?

n. ji m en ez @
exponente, 8 bits 01111100

exponente, 11 bits 11111111110

.u cm .es

DE NUMEROS 3.2. REPRESENTACION EN EL ORDENADOR Precisi on simple. Registro de 32 bits. Exponente exceso a 127 exponente (8 bits) n umero representado 0 127 = 127 0 127 126 1 127 = 126 hasta 254 127 = 127 255 127 = 128 255 127 = 128 (1)bs (0 21 + + 0 223 ) 20127 = 0 (1)bs (m1 21 + + m23 223 ) 20127126 (1)bs (1 + m1 21 + + m23 223 ) 2(e8 2

135

Mantisa (23 bits) 0 =0 0 =0

(1)bs (0 21 + + 0 223 ) 2255127 (1)bs (m1 21 + + m23 223 ) 2255127 NaN

n. ji m en ez @
exponente, 8 bits 10000001
binario 8 bits

Mantisa (52 bits) 0 =0 0 =0

Precisi on doble. Registro de 64 bits. Exponente exceso a 1023 exponente (11 bits) n umero representado 0 1023 = 1023 0 1023 1022 1 1023 = 1022 hasta 2046 1023 = 1023 2047 1023 = 1024 2047 1023 = 1024

(1)bs (0 21 + + 0 252 ) 201023 = 0 (1)bs (m1 21 + + m23 252 ) 2010231022 (1)bs (1 + m1 21 + + m52 252 ) 2(e11 2
10

(1)bs (0 21 + + 0 252 ) 220471023 (1)bs (m1 21 + + m52 252 ) 220471023 NaN

Tabla 3.2: Comparaci on entre los est andares del IEEE para la representaci on en punto otante. (bs bit de signo, mi bit de mantisa, ei bit de exponente) sig. 0 mantisa, 23 bits 01000000000000000000000

El exponente ser a, 1 27 +0 26 +0 25 +0 24 +0 23 +0 22 +0 1 +1 20 127 = 129 127 = 2 A la vista del exponente, la mantisa est a normalizada, 1 20 + 1 22 = 0,25 Por tanto el n umero en representaci on decimal es: (1)0 (0,25) 22 = +5,0

rr

ad o

3. C ual es la representaci on en el est andar IEEE 754 de simple precisi on del n umero: 347,625? Convertimos el n umero a binario, 347,625 = 101011011,101 Representamos el n umero en formato de coma otante, 1,01011011101 28 mantisa: 01011011101 (normalizada) exponente: 8 127 + 8 = 135 10000111 signo: 0 (positivo) Con lo cual la representaci on de 347,625 es, sig. 0 mantisa, 23 bits 0101101110100000000000 exponente, 8 bits 10000111
5 3 exceso 127

Bo

4. c ual el la representaci on en el est andar IEEE 754 de simple precisi on del n umero:

r,j

ua

El bit de signo es 0, por lo tanto el n umero es positivo.

.u cm .es
8

++e1 20 )127

++e1 20 )1023

136
5 3

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR = 1,66666

Pasamos la parte entera a binario: 1 = 1 20 Pasamos la parte decimal a binario: 0,666666 2 = 1,333333 0,333333 2 = 0,666666 binario A partir de aqu se repite el periodo 10 indenidamente: 1,666666 0,101010

Mantisa: el n umero en binario quedar a: 1,101010 , con la misma representaci on en punto otante, 1,101010 20 . La mantisa ser a, 10101010101010101010101 Exponente: 0 127 + 0 = 127 01111111 Signo: 0 (positivo) Con lo cual la representaci on de sig. 0
5 3 exceso 127 binario 8 bits

es, exponente, 8 bits 01111111

mantisa, 23 bits 10101010101010101010101

3.3.

Errores en la representaci on num erica.

Si el exponente se sale del rango admitido, se produce un error de desbordamiento. Si se trata de un valor demasiado grande, el error de desbordamiento se produce por exceso (overow ). El ordenador Asignar a al n umero el valor . Si el exponente es demasiado peque no , entonces e desbordamiento se produce por defecto (underow ) y el ordenador asignar a al n umero el valor cero. Si el tama no de la mantisa del n umero excede el de la mantisas representables, la mantisa se trunca al tama no adecuado para que sea representable. Es decir, se sustituye el n umero por un n umero m aquina cercado, este proceso se conoce como redondeo y el error cometido en la representaci on como error de redondeo.

Bo

3.3.1.

rr

Supongamos que tenemos un n umero no m aquina x = (1.a1 a2 a23 a24 ) 2exp .

ad o

2. Una vez representado en formato de punto otante su mantisa contiene m as d gitos de los bits que puede almacenar la mantisas del formato.

Error de redondeo unitario

r,j

1. Una vez representado en formato de punto otante su exponente esta fuera del rango admitido para los exponentes: es demasiado grande o demasiado peque no.

ua

Como se ha indicado anteriormente, cualquier representaci on num erica que empleemos con el ordenador, est a sometida a errores derivados del tama no nito de los registros empleados. Vamos a centrarnos en el estudio de los errores cometidos cuando representamos n umeros empleando el formato de punto otante del est andar del IEEE754. En primer lugar, solo hay una cantidad nita de n umeros que admiten una representaci on exacta, son los que se obtienen directamente de los valores unos y ceros contenidos en un registro al interpretarlos de acuerdo con las especicaciones del est andar. Estos n umeros reciben el nombre de n umeros m aquina. Un n umero real no ser a un n umero m aquina si,

n. ji m en ez @

.u cm .es

NUMERICA. 3.3. ERRORES EN LA REPRESENTACION

137

Aproximaci on por truncamiento. Si queremos representarlo empleando el est andar de simple precisi on, solo podremos representar 23 bits de los que compone su mantisa. Una soluci on es truncar el n umero, eliminando directamente todos los bits de la mantisa m as all a del 23 x xT = (1.a1 a2 a23 ) 2exp . Como hemos eliminado algunos bits, el n umero m aquina xT , por el que hemos aproximado nuestro n umero, es menor que el. Aproximaci on por exceso. Otra opci on ser a aproximarlo empleando el n umero m aquina inmediatamente superior. Esto ser a equivalente a eliminar todos los bits de la mantisa m as all a del 23 y sumar un bit en la posici on 23 de la mantisa x xE = (1.a1 a2 a23 + 223 ) 2exp . En este caso, estamos aproximando por un n umero m aquina mayor que el n umero aproximado.

Donde xr = xT si se redonde o por truncamiento o xr = xE si se redonde o por exceso. El intervalo entre dos n umeros m aquina consecutivos puede obtenerse restando el menor del mayor, xE xT = (1.a1 a2 a23 + 223 ) 2exp (1.a1 a2 a23 ) 2exp = 223 2exp Si aproximamos ahora cualquier n umero real comprendido en el intervalo xT y xE por el m as cercano de estos dos, el error absoluto que cometemos, sera siempre menor o como mucho igual que la mitad del intervalo, 1 1 |xE xT | = 223 2exp 2 2 Examinando con un poco de detalle el resultado anterior, vemos que consta de tres t erminos. El t ermino 1 umero real por su n umero m aquina m as cercano, El ter2 Surge de aproximar un n mino 2exp depende de la tama no del n umero para n umeros grandes este factor ser a grande y para n umeros peque nos ser a un factor peque no. Por u ltimo queda el factor 223 Este factor est a directamente relacionado con la mantisa empleada en la representaci on. Efectivamente, si hubi eramos representado el n umero en el est andar de doble precisi on, es f acil demostrar que el error absoluto cometido habr a quedado acotado como,

rr

1 1 |xE xT | = 252 2exp 2 2 Es decir, el u nico factor que cambia en el error es precisamente el t ermino relacionado con el tama no de la mantisa. Este t ermino recibe el nombre de precision del computador o epsilon del computador (eps). Y vale siempre 2 elevado al n umero de bits de la mantisa. Por tanto, podemos generalizar la expresi on parar la cota del error absoluto como, |x xr | 1 1 |xE xT | = eps 2exp 2 2 El signicado del epsilon del computador queda a un m as claro si denimos el error relativo.. |x xr |

Bo

ad o

r,j

ua

n. ji m en ez @
Error absoluto = |x xr | |x xr |

Redondeo Es evidente que cualquier n umero real que admita una representaci on aproximada en el formato del est andar estar a comprendido entre dos n umeros m aquina: xT x xE . En general, el criterio que se sigue es aproximar cada n umero real, por truncamiento o exceso, empleando en cada caso el n umero m aquina m as cercano. Siempre que redondeamos un n umero cometemos un error, que podemos denir como el valor absoluto de la diferencia entre el valor real del n umero y su aproximaci on. Este error recibe el nombre de error absoluto,

.u cm .es

138

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

Error relativo =

1 |x xr | 1 |xE xT | 1 eps 2exp eps = exp |x| 2 |x| 2 (1.a1 a2 a23 a24 ) 2 2

El n umero representado tiene de exponente 27 127 = 1. Supongamos ahora que quisieramos sumar a este n umero la cantidad 222 su representaci on en el est andar emplear a una mantisa de ceros (recordar el 1 mplicito) y un exponente 22 + 127 = 105. Ser a por tanto, sig. mantisa, 23 bits exponente, 8 bits 0 00000000000000000000000 01001011 Para sumar dos n umeros en notaci on cient ca es imprescindible que los dos est en representados con el mismo exponente, para entonces poder sumar directamente las mantisas. Disminuir el exponente del mayor de ellos hasta que coincida con el del menor no es posible, ya que eso supondr a a nadir d gitos a la parte entera de la mantisa, pero no hay bits disponibles para ello entre los asignados a la mantisa. Por tanto, la soluci on es aumentar el exponente del menor de los n umeros, hasta que alcance el valor del mayor, y disminuir el valor de la mantisa desnormaliz andola, es decir sin considerar el 1 impl cito. Por tanto en nuestro ejemplo, debemos representar 222 empleando 22 un exponente 1, 2 223 21 , sig. mantisa (desnorm.), 23 bits exponente, 8 bits 0 00000000000000000000001 100000000

Bo

Qu e pasa si tratamos de sumar un n umero m as peque no,por ejemplo 223 ?. Al representarlo con exponente 1 para poder sumarlo el n umero tomar a la forma, 223 224 21 . Es f acil ver el problema, con una mantisa de 23 bits nos se puede representar el n umero 224 porque ya no hay hueco para el. La mantisa ser a cero y dado que se trata de una representaci on desnormalizada, el n umero resultante ser a cero. Por tanto, al sumarlo con el n umero inicial nos dar a este mismo n umero.

rr

La suma de ambos n umeros se obtiene sumando directamente las mantisas, sig. mantisa, 23 bits exponente, 8 bits 0 11110000000000000000001 10000000

ad o

r,j

ua

n. ji m en ez @

1 eps 2 Un u ltimo comentario sobre el epsilon del computador, entendido como precisi on. La diferencia entre dos n umeros m aquina consecutivos est a estrechamente relacionada con el epsilon. Si tenemos un n umero m aquina y queremos incrementarlo en la cantidad m as peque na posible, dicha cantidad es precisamente el epsilon, multiplicado por 2 elevado al exponente del n umero. La raz on de que esto sea as est a relacionada con el modo en que se suman dos n umeros en la representaci on en punto otante. Supongamos que tenemos un n umero cualquiera representado en el est andar de precisi on simple, sig. mantisa, 23 bits exponente, 8 bits 0 11110000000000000000000 10000000

xr = x (1 + ); | |

.u cm .es

El error relativo pondera el valor del error cometido con la magnitud del n umero representado. Un ejemplo sencillo ayudar a a entender mejor su signicado. Imaginemos que tuvi eramos un sistema de representaci on que solo nos permitiera representar n umero enteros. Si queremos representar los n umeros 1,5 y 1000000,5 su representaci on ser a 1 y 1000000 en ambos casos hemos cometido un error absoluto de 0.5. Sin embargo si comparamos con los n umeros representados, en el primer caso el error vale la mitad del n umero mientras que en el segundo no llega a una millon esima parte. En el caso de la representaci on que estamos estudiando, el error relativo cometido para cualquier n umero representable es siempre m as peque no que la mitad del epsilon del computador,

NUMERICA. 3.3. ERRORES EN LA REPRESENTACION

139

Esto nos lleva a que la precisi on del computador no es igual para todos los n umeros representable, sino que depende de su magnitud. la precisi on, tomada en funci on de la distancia entre dos n umeros consecutivos, es: precisi on = eps 2exp y su valor se duplica cada vez que aumentamos el exponente en una unidad. La gura 3.1 muestra esquem aticamente este fen omeno.

Figura 3.1: Ilustraci on del cambio de precisi on con la magnitud de los n umeros representados.

3.3.2.

Errores de desbordamiento

Bo

rr

Figura 3.2: N umeros representables y desbordamientos en el est andar IEEE 754 de precisi on simple.

ad o

En el apartado anterior hemos visto una de las limitaciones de la representaci on num erica de los ordenadores; el hecho de usar una mantisa nita hace que solo unos pocos n umeros tengan representaci on exacta, el resto hay que aproximarlos cometiendo errores de redondeo. En este apartado nos centraremos en estudiar las limitaciones debidas al hecho de usar un exponente nito; Solo podemos representar un rango limitado de valores. La gura 3.2 muestra esquem aticamente el rango de n umeros representables. El n umero negativo m as peque no representable, viene denido, por un bit de signo 1, para indicar que se trata de un n umero negativo, la mantisa m as grande y el exponente m as grande que, dentro de las especicaciones del est andar, todav a representan un n umero nito. Cualquier n umero negativo menor que este, produce un error de desbordamiento conocido en la literatura t ecnica con el nombre de overow negativo. El n umero negativo m as pr oximo a cero, que se puede representar ser a aquel que tenga bit de signo 1, la mantisa (desnormalizada) m as peque na posible y el exponente m as peque no posible. Cualquier n umero m as proximo a cero que este, ser a representado por el ordenador como cero. Se ha producido en este caso un error de desbordamiento conocido como underow negativo. De modo an alogo a como hemos denido el n umero m as negativo m as peque no representable, podemos denir el n umero m as grande representable. La u nica diferencia ser a que este caso el bit de signo toma valor cero para indicar que es un n umero positivo. Cualquier n umero mayor que este que queramos representar, provocar a un error de desbordamiento (overow positivo.) Por u ltimo el n umero positivo m as pr oximo a cero representable coincide con el negativo, de nuevo salvo en el bit de signo que ahora debe ser cero. En el caso de tratar de representar un n umero m as peque no el ordenador no lo distinguir a de cero, produci endose un desbordamiento denominado underow positivo.

r,j

ua

n. ji m en ez @

.u cm .es

140

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

3.4.

Errores derivados de las operaciones aritm eticas

3.4.1.

Acumulaci on de errores de redondeo

Supongamos que los representamos ahora en el formato de punto otante descrito m as arriba, 99,99 = 9,999 101 , 0,161 = 1,610 101 . Vamos a descomponer el proceso de sumar estos dos n umeros en cuatro pasos, que reejan, esqu ematicamente, el proceso que seguir a un computador. 1. Alineamiento. Consiste en representar el n umero m as peque no empleando el exponente del mayor. Para ellos se desplazan hacia la derecha los d gitos del n umero m as peque no tantas posiciones como indique la diferencia de los exponentes de los dos n umeros y se cambiar el exponente del n umero mas peque no por el del m as grande. 1,610 101 0,016 101

Bo

Es importante comprobar tras realizar la operaci on si se ha producido desbordamiento de la mantisa en el ejemplo propuesto: 9,999 101 + 0,016 101 10,015 101 No es posible emplear directamente el resultado de la suma de las mantisas de los sumandos como matisa de la suma ya que requerir a emplear un d gito m as. El resultado obtenido desborda el tama no de la mantisa.

rr

3. Normalizaci on. Si se ha producido desbordamiento de la mantisa, es preciso volver a normalizarla, 10,015 101 = 1,0015 102

ad o

2. Operaci on. Una vez que los operandos est an alineados, se puede realizar la operaci on. Si la operaci on es suma y los signos son iguales o si la operaci on es resta y los signos son diferentes, se suman las mantisa. En otro caso se restan.

r,j

Como cab a esperar, el desplazamiento hacia la derecha de la mantisa produce la p erdida de los u ltimos d gitos del n umero. Tenemos aqu un primer error de redondeo en el proceso de alineamiento.

ua

n. ji m en ez @
99,99 + 0,161 = 100,151

Para empezar, se ilustrar a el proceso de la suma de dos n umeros representados en base 10 en formato de punto otante. Supongamos que queremos sumar los n umeros 99,99 y 0,161. Supongamos adem as que seguimos una representaci on en punto otante con las siguientes limitaciones la mantisa es de cuatro d gitos, el exponente es de dos d gitos. Si sumamos los n umeros, tal y como los hemos escrito m as arriba, sin seguir formato de punto otante, el resultado ser a,

.u cm .es

Hasta ahora, nos hemos centrado siempre en el problema de la representaci on num erica del computador. En esta secci on vamos a introducir un nuevo tipo de errores que tienen si cabe todav a m as importancia desde el punto de vista del c alculo cient co. Se trata de los errores derivados de las operaciones aritm eticas. Indirectamente ya se introdujo el problema en la secci on anterior al hablar de la precisi on del computador, y de la necesidad de igualar los exponentes de los sumandos al mayor de ellos antes de poder sumar en formato de punto otante. Veamos en m as detalle algunas consecuencias de la aritm etica en punto otante.

3.4. ERRORES DERIVADOS DE LAS OPERACIONES ARITMETICAS

141

4. Redondeo. El desplazamiento de la mantisa hace que no quepan todo los d gitos, por lo que es necesario redondearla (por truncamiento o por exceso), 1,0015 102 = 1,002 102

Analicemos el error cometido para la suma empleada en los ejemplos anteriores. En aritm etica exacta, el n umero obtenido tras la suma es 100,152. Empleando la representaci on en punto otante, con una mantisa de cuatro d gitos el resultado es 1,002 22 = 100,2. por tanto, el error absoluto cometido es, |100,151 100,2| = 0,049 y el error relativo, 100,151 100,2 0,000489 100,152

En general puede comprobarse que para cualquier operaci on aritm etica b asica multiplicaci on divisi on) y dos n umeros m aquina x, y se cumple,

n. ji m en ez @
y ) = (x (x (y + z ) (1 + 2 )

5. Renormalizaci on Para n umeros en representaci on binaria es preciso a veces volver a normalizar la mantisa despu es del redondeo. Supongamos, como en el ejemplo anterior, una mantisa de cuatro bits, ahora con n umeros representados en binario y que tras realizar una operaci on suma el resultado que se obtiene es 11,111 21 . La mantisa ha desbordado y hay que normalizarla 11,111 21 1,1111 22 . Tenemos que redondear la mantisa y lo normal en este caso dado que el n umero estar a exactamente en la mitad del intervalo entre dos n umeros representables, es hacerlo por exceso: 1,1111 22 10,000 22 . la operaci on de redondeo por exceso ha vuelto a desbordar la mantisa y, por tanto, hay que volver a normalizarla: 10,000 22 1,000 23 .

ua

otante(x

y ) (1 + ) | | eps

rr

Esto enunciado se conoce como el axioma fundamental de la aritm etica en punto otante: El eps del computador es la cota superior del error relativo en cualquier operaci on aritm etica b asica realizada en punto otante ente n umeros m aquina. El axioma fundamental de la aritm etica en punto otante establece una cota superior para el error. En la pr actica, es frecuente que se encadenen un gran n umero de operaciones aritm eticas elementales. Al encadenar operaciones, los errores cometidos en cada una de ellas se acumulan. Supongamos por ejemplo que queremos realizar la operaci on x (y + z ) en aritm etica otante la operaci on podr amos describirla como,

ad o

Bo

r,j

otante (x (y + z )) = (x otante(x + y )) (1 + 1 ) = (x (y + x)) (1 + 2 ) (1 + 1 )

Donde 1 representa el error relativo cometido en el producto y 2 el error relativo cometido en la suma. Ambos errores est an acotados por el eps del ordenador (1 , 2 eps). El valor se puede obtener como, (1 + 1 ) (1 + 2 ) = 1 + 1 2 + 1 + 2 1 + 2, = m ax(1 , 2 )

.u cm .es
(suma, resta,

Por u ltimo, se comprueba si las operaciones realizadas han producido desbordamiento del exponente, en cuyo caso el resultado ser a un n umero no representable: o 0.

142

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

1,5 1038 + 1,0 100 = 1,5 1038 + 1,0 100

En este caso, durante el proceso de alineamiento, es preciso desplazar la mantisa del n umero peque no 38 posiciones decimales para poder sumarlo. Con cualquier mantisa que tenga menos de 38 d gitos el resultado es equivalente a convertir el segundo sumando en cero. Otro ejemplo es la p erdida de la propiedad asociativa,

y = 1,5 1038

1. Alineamiento

2. Operaci on 1,001 102 0,994 102 0,007 102

3. normalizaci on

Y el error relativo,

ad o

Los pasos 4 y 5 no son necesarios en este ejemplo. Si calculamos ahora el error absoluto de redondeo cometido, |0,75 0,7| = 0,05 0,75 0,7 0,0666 0,75

Es decir, se comete un error de un 6, 7 %. El problema en este caso surge porque en el proceso de alineamiento perdemos un d gito signicativo. En un sistema de representaci on en punto otante en que los n umeros se representan en base y el tama no de la mantisa es p, Si las sustracciones se realizan empleando p d gitos, el error de redondeo relativo puede llegar a ser 1. Veamos un ejemplo para n umeros en base 10 ( = 10). Supongamos empleamos una mantisa de cuatro d gitos y que queremos realizar la operaci on 1,000 100 9,999 101 . El resultado exacto ser a, 1 0,9999,0001. Sin embargo, en el proceso de alineamiento, 9,9991 0,999 100

Bo

rr

r,j

ua

n. ji m en ez @
9,935 101 0,994 102 0,007 102 7,000 101

Los resultados pueden estar sometidos a errores muy grandes cuando la operaci on aritm etica es la sustracci on de cantidades muy parecidas. Si, por ejemplo, queremos realizar la operaci on 100,1 99,35 = 0,75 y suponemos que estamos empleando una representaci on en punto otante con una mantisa de cuatro d gitos y los n umeros representados en base 10 (100,1 = 1,001 102 , 1 99,35 = 9,935 10 )

x = 1,5 1038

(x + y ) + 1 = x + (y + 1)

(x + y ) + 1 = 1 (x + (y + 1) = 0

.u cm .es

Podemos concluir que, este caso, el error de redondeo relativo duplica al de una operaci on aritm etica sencilla. En general, el error tender a multiplicarse con el n umero de operaciones aritm eticas encadenadas. Hay situaciones en las cuales los errores de redondeo que se producen durante una operaci on aritm etica son considerables por ejemplo, cuando se suman cantidades grandes con cantidades peque nas,

3.4. ERRORES DERIVADOS DE LAS OPERACIONES ARITMETICAS

143

Si redondeamos el n umero por exceso, el resultado de la sustracci on ser a cero. Si lo redondeamos por defecto, 1,000 100 0,999 100 0,001 100

104 (10 1) 1,000 104 1,000 103 = = 10 1 1 1,000 104 104

Para paliar estos problemas, el est andar IEEE 754 establece que las operaciones arim eticas deben realizarse siempre empleando dos d gitos extra para guardar los resultados intermedios. Estos dos d gitos extra reciben el nombre de d gitos de protecci on o d gitos de guarda (guard digits ). Si repetimos la sustracci on del ejemplo anterior empleando los dos d gitos de guardia, 1. Alineamiento 1,00100 102 0,99350 102 0,00750 102 9,93500 = 101 0,99350 102 2. Operaci on

3. normalizaci on

En este caso, obtenemos el resultado exacto. En general, empleando dos bits de guarda para realizar las sustracciones el error de redondeo es siempre menor que el eps del computador.

3.4.2.

Anulaci on catastr oca

ad o

La anulaci on catastr oca se produce cuando en una operaci on aritm etica, t picamente la sustracci on, los d gitos m as signicativos de los operandos, que no est an afectados por el redondeo, se cancelan entre s . El resultado contendr a fundamentalmente d gitos que s est an afectados por errores de redondeo. Veamos un ejemplo, Supongamos que queremos realizar la operaci on b2 4 a c empleando n umeros en base 10, y una mant sa de 5 d gitos. Supongamos que los n umeros empleados son: b = 3,3357 100 , a = 1,2200 100 , c = 2,2800 100 . El resultado exacto de la operaci on es,

r,j

ua

n. ji m en ez @
0,00750 102 7,500 101 b2 4 a c = 4,449 104 b2 = 1,112689 101 4 a c = 1,112664 101 b2 4 a c = 4,9000 104

s
(3.1)

Bo

rr

Si realizamos las operaciones en la representaci on pedida,

El error relativo cometido es aproximadamente un 10 %. Come se han utilizado dos bits de guarda en las operaciones intermedias, la sustracci on no comente en este caso error alguno. El error se debe a los redondeos de los resultados anteriores. Una vez realizada la sustracci on, el resultado solo contiene los d gitos sometidos a redondeo ya que los anteriores se han anulado en la operaci on.

.u cm .es

y el error relativo cometido ser a,

144

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR

Como regla pr actica se debe evitar al realizar operaciones aritm eticas aquellas situaciones en la que se sustraen cantidades casi iguales. Veamos otro ejemplo, para ilustrar esta idea.Supongamos que queremos realizar la operaci on, y = x2 + 1 1

y=(

x2

+ 1 1)

x2 + 1 + 1 x2 + 1 + 1

x2 x2 + 1 + 1

3.4.3.

Errores de desbordamiento

||v || = ||(v1 , v2 vn || =

Supongamos que creamos el siguiente programa en Matlab para calcular el m odulo de un vector function m=norma(x) %inicializamos a cero la variable que contendr a la norma del vector. m=0; n=length(x) %calculamos la longitud del vector. %creamos un bucle para ir sumando los cuadrados de las componentes for i=1:n m=m+x(i)^2; end

Bo

El programa anterior provocara un error de desbordamiento incluso para n=1, si introducimos un n umero cuyo cuadrado sea mayor que el mayor n umero representable. Por ejemplo si introducimos el n umero, 21024/2 = 1,340780792994260e + 154 en nuestro programa Matlab devolver a como soluci on inf. Es decir, el resultado produce un error de desbordamiento. El problema se produce en el bucle, al calcular el cuadrado del n umero,

rr

ad o

%calculamos la ra z cuadrada del resultado del bucle m=sqrt(m)

r,j

ua

21024/2

Una vez producido el desbordamiento el resto de las operaciones quedan invalidadas. Como en casos anteriores, la soluci on a este tipo de problemas exige modicar la forma en que se realizan los c alculos. Un primer paso ser a igualar el m odulo al valor absoluto del n umero cuando n=1. De este modo, el modulo del n umero propuesto en el ejemplo anterior se podr a calcular correctamente.

n. ji m en ez @
n 2 vi i=1 2

Al,hablar del rango nito de los n umeros representables, se indic o como trata el estandar IEEE 754 los n umeros que desbordan los l mites de representaci on. Al realizar operaciones aritm eticas, es posibles llegar a situaciones en las que el resultado sea un n umero no representable bien por se demasiado grande en magnitud, (Overow positivo o negativo) o por ser demasiado peque no, (underow positivo o negativo.) Un ejemplo que nos permite ilustrar este fen omeno es el del c alculo del m odulo de un vector,

= 21024 > (2 252 ) 21023

.u cm .es

Para valores peque nos de x, esta operaci on implica una anulaci on con p erdida de d gitos signicativos. Una posible soluci on es utilizar una forma alternativa de construir la ecuaci on. Si multiplicamos y dividimos por el conjugado,

3.4. ERRORES DERIVADOS DE LAS OPERACIONES ARITMETICAS

145

Todav a es posible mejorar el programa, y ampliar el rango de vectores para los que es posible calcular el m odulo. Para ello es suciente recurrir a un peque no articio: dividir los elementos del vector por el elemento de mayor tama no en valor absoluto, calcular el m odulo del vector resultante, y multiplicar el resultado de nuevo por el elemento de mayor tama no, vi | m ax vi |

2 = | m ax vi | vi i=1 i=1

El siguiente c odigo permite calcular el m odulo de un vector usando este procedimiento2 , function m=norma(x) n=length(x); %calculamos la longitud del vector. %si n=1 nos limitamos a devolver el valor absoluto del n umero introducido if n==1 x=abs(x); else %inicializamos con el primer elemento la variable que contendr a % al mayor de los elementos del vector mayor=abs(x(1)); %inicialimos a 1 la variable que contendr a la suma de %los cuadrados de los elementos divididos por el valor de ello nscalado=1

Bo

%creamos un bucle para ir sumando los cuadrados de las componentes. %empezamos en el segundo elemento, puesto que el primero ya lo tenemos. for i=2:n %calculamos el valor absoluto del elemento i modxi=abs(x(i)) %comparamos con modxi con el mayor elemento obtenido hasta %aqu if mayor<modxi %si modxi es mayor, ser a el elemento m as grande encontrado %hasta esta iteraci on %cambiamos el valor de la suma mscalado=1+mscalado*(modxi/mayor)^2; % definimos mayor como el nuevo valor encontrado mayor=modxi; else %si es el m as grande, nos limitamos a sumarlo al resto mscalado=mscalado+(modxi/mayor)^2; end %una vez completado el bucle que calcula la suma de cuadrados, %obtenemos la ra z cuadrada, y multiplicamos por el mayor. m=mayor*sqrt(mscalado)
2 El

rr

ad o

programa no funcionar a correctamente para vectores cuyos primeros elementos sean 0, (0, 0, 0

r,j

ua

n. ji m en ez @

.u cm .es

146

CAP ITULO 3. ARITMETICA DEL COMPUTADOR Y FUENTES DE ERROR Si aplicamos este programa a obtener la norma del vector, x = [21024/2 21024/2 ]

obtenemos como resultado, En lugar de un error de desbordamiento (inf ).

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

m = 1,896150381621836 10154

Cap tulo 4

C alculo de ra ces de una funci on


4.1. Ra ces de una funci on

Se entiende por ra ces de una funci on real f (x) : R R. los valores x = r que satisfacen, f (r ) = 0 El c alculo de las ra ces de una funci on, tiene una gran importancia en la ciencia, donde un n umero signicativo de problemas pueden reducirse a obtener la ra z o ra ces de una ecuaci on. La obtenci on de la ra z de una ecuaci on es inmediata en aquellos casos en que se conoce la forma anal tica de funci on inversa, f 1 (f (x) = y f 1 (y ) = x) en este caso, r = f 1 (0). Por ejemplo, f (x) = x2 4

Sin embargo, en muchos casos de inter es las funciones no pueden invertirse. Un ejemplo, extra do de la f sica es la ecuaci on de Kepler para el c alculo de las orbitas planetarias,

ua

Bo

rr

M etodos iterativos Todos los m etodos que se describen en este cap tulo, se basan en procedimientos iterativos. La idea es estimar un valor inicial para la ra z r0 , y a partir de el ir renando paso a paso la soluci on, de modo que el resultado se acerque cada vez m as al valor real de la ra z. Cada nueva aproximaci on a la ra z se obtiene a partir de las aproximaciones anteriores. r0 r1 r2 rk

ad o

Donde a y b son par ametros conocidos y se desea conocer el valor de x. La soluci on de la ecuaci on de Kepler es equivalente a obtener las ra ces de la funci on f (x) = x a sin(x) b. (La gura 4.1 muestra un ejemplo de dicha funci on.) En este caso, no se conoce la funci on inversa, y solo es posible conocer el valor de la ra z, aproximadamente, empleando m etodos num ericos.

EL proceso que lleva de una soluci on aproximada a la siguiente se conoce con el nombre de iteraci on. Lo habitual es que en cada iteraci on se realicen las mismas operaciones matem aticas una y otra vez. El proceso se detiene cuando la soluci on alcanzada se estima lo sucientemente pr oxima a la soluci on real como para darla por buena. Para ello, se suele establecer un valor (tolerancia ) que 147

r,j

|f (r0 )| |f (r1 )| |f (r2 )| |f (rk )

n. ji m en ez @
x a sin(x) = b

f 1 (y ) = y + 4 r = f 1 (0) = 2

.u cm .es

148

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

80

n. ji m en ez @
10 15 20 x 25 30 35

Figura 4.1: Ejemplo de ecuaci on de Kepler para a = 40 y b = 2

ua

act ua como criterio de convergencia. De este modo, las iteraciones se repiten hasta que se llega a un valor rn que cumple,

B usqueda local. Una funci on puede tener cualquier n umero de ra ces, incluso innitas, basta pensar por ejemplo en funciones trigonom etricas como cos(x). Una caracter stica importante de los m etodos descritos en este cap tulo es que solo son capaces de aproximar una ra z. La ra z de la funci on a la que el m etodo converge depende de el valor inicial r0 con el que se comienza la b usqueda iterativa1 . Por ello reciben el nombre de m etodos locales. SI queremos encontrar varias (o todas) las ra ces de una determinada funci on, es preciso emplear el m etodo para cada una de las ra ces por separado, Cambiando cada vez el punto de partida.

Bo

1 En ocasiones, como veremos m as adelante no se suministra al algoritmo un valor inicial, sino un intervalo en el que buscar la ra z

rr

ad o

Se dice entonces que el algoritmo empleado para obtener la ra z ha convergido en n iteraciones. Por otro lado, es importante se nalar que los algoritmos para el c alculo de ra ces de una funci on no siempre convergen. Hay veces en que no es posible aproximarse cada vez m as al valor de la ra z bien por la naturaleza de la funci on o bien por que el algoritmo no es adecuado para obtenerla.

r,j

|f (rn )| (tol)

s
40

.u cm .es

y=x40sin(x)2

4.2. METODOS ITERATIVOS LOCALES

149

4.2.
4.2.1.

Metodos iterativos locales


M etodo de la bisecci on

Teorema de Bolzano.

6 2.5

ua

1.5

n. ji m en ez @
Raz=0.703467422514226 1 0.5 0 x 0.5 1 1.5 2 2.5

El conocido teorema de Bolzano, suministra el m etodo m as sencillo de aproximar la ra z de una funci on: Se parte de un intervalo inicial en el que se cumpla el teorema. Y se va acotando sucesivamente el intervalo que contiene la ra z, redunci endolo a la mitad en cada iteraci on, de forma que en cada nuevo intervalo se cumpla siempre el teorema de Bolzano. En la gura 4.3 se muestra un diagrama de ujo correspondiente al m etodo de la bisecci on. El punto de partida es un intervalo [a, b] En el que se cumple el teorema de Bolzano, y que contiene por tanto al menos una ra z. Es interesante hacer notar que el teorema de Bolzano se cumple siempre que la funci on sea continua en el intervalo [a, b] y existan un n umero impar de ra ces. Por esto es importante realizar cuidadosamente la elecci on del intervalo [a, b], si hay m as de una ra z, el algoritmo puede no converger. Una vez que tiene el intervalo se calcula el punto medio c. A continuaci on se compara el valor que toma la funci on en c, es decir f (c) con la tolerancia. Si el valor es menor que esta, el algoritmo ha encontrado un valor aproximado de la ra z con la tolerancia requerida, con lo que c es la ra z y no hace falta seguir buscando. Si por el contrario, f (c) est a por encima de la tolerancia requerida, comparamos su signo con el que toma la funci on

Bo

rr

ad o

r,j

Figura 4.2: Ilustraci on del teorema de Bolzano

.u cm .es

Si una funcion f (x), continua en el intervalo [a, b], cambia de signo en los extremos del intervalo: f (a) f (b) 0, debe tener una ra z en el intervalo [a, b]. (gura: 4.2)

150

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION Partimos de [a, b] con f (a) f (b) < 0

Calculamos c =

a+b 2 , f (c)

es |f (c)| tol? No es f (a) f (c) < 0?

S convergencia: terminar

No a=c f (a) = f (c)

Figura 4.3: Diagrama de ujo del m etodo de la bisecci on en uno cualquiera de los extremos del intervalo, En el diagrama de ujo se ha elegido el extremo a, pero el algoritmo funcionar a igualmente si eligi eramos b. Si el signo de f (c) coincide con el que toma la funci on en el extremo del intervalo elegido, c sustituye al extremo, (hacemos a = c y f (a) = f (c)) si por el contrario el signo es distinto, hacemos que c sustituya al otro extremo del intervalo. (hacemos b = c y f (b) = f (c)). Este proceso se repetir a hasta que el se cumpla que f (c) tol El proceso se muestra gr acamente en la gura 4.4, para un caso particular. Se trata de obtener la ra z de la funci on mostrada en la gura 4.2, f (x) = ex x2 . esta funci on tiene una u nica ra z: r 0,0735. Para iniciar el algoritmo se ha elegido un intervalo [a = 2, b = 2]. La gura 4.4, muestra tres iteraciones sucesivas,y la soluci on nal, que se obtiene al cabo de ocho iteraciones en este ejemplo, para el que se a empleado una tolerancia tol = 0,01. En la secuencia de gr acas se puede observar tambi en la evoluci on del intervalo de b usqueda, [22] [20] [10] [1 0,5] ; as como el cambio alternativo del l mite derecho o izquierdo, para asegurar que la ra z queda siempre dentro de los sucesivos intervalos de b usqueda obtenidos.

Bo

4.2.2.

Este m etodo supone una mejora del anterior ya que, en general, converge m as r apidamente. La idea es modicar el modo en que calculamos el punto c. En el caso del m etodo de la bisecci on el criterio consist a en ir tomando en cada iteraci on el punto medio del intervalo que contiene la ra z. El m etodo de interpolaci on lineal, elige como punto c el punto de corte con el eje x, de la recta que pasa por los puntos (a, f (a)) y (b, f (b)). Es decir la recta que corta a la funci on f (x) en ambos l mites del intevalo que contiene a la ra z buscada. La recta que pasa por ambos puntos

rr

ad o

M etodo de interpolaci on lineal o (Regula falsi )

r,j

ua

n. ji m en ez @

b=c f (b) = f (c)

.u cm .es

4.2. METODOS ITERATIVOS LOCALES

151

2 a 0 b 2

2 a 0 y

(a) intervalo inicial

2 a 0 y

n. ji m en ez @
6 4 2 a 0 y b 2 4 0.5 1 1.5 2 2.5 6 2.5 2 1.5 6 4 2 a 0 y a2 R c2 2 c3 b1 b c1 4 6 2.5 2 1.5 1 0.5 0 x 0.5 1 1.5 2

b1 c 2
2

s
c c3 b1
2 1

6 2.5

1.5

0.5

0 x

0.5

1.5

2.5

6 2.5

1.5

0.5

(b) iteracion 1

6 2.5

1.5

0.5

0 x

0.5

(c) iteracion 2

ua

(d) iteracion 3

Bo

rr

ad o

r,j

2.5

(e) iteracion 6: ra z alcanzada

Figura 4.4: proceso de obtenci on de la ra z de una funci on por el m etodo de la bisecci on

.u cm .es
c
1

0 x

0.5

1.5

2.5

0 x

0.5

1.5

2.5

152

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

puede construirse a partir de ellos como, y= f (a) f (b) (x b) + f (b) ab

el punto de corte con el eje, que ser a el valor que tomaremos para c, se obtiene cuando y = 0, 0= f (a) f (b) (x b) + f (b) ab

y despejando c en la ecuaci on anterior obtenemos, c=b f (b) (b a) f (b) f (a)

n. ji m en ez @
c

ad o

6 2.5

r,j

ua

1.5

0.5

Bo

Figura 4.5: Obtenci on de la recta que une los extremos de un intervalo [a, b] que contiene una ra z de la funci on Por lo dem as el procedimiento es el mismo que en el caso del m etodo de la bisecci on: Se empieza con un intervalo [a, b] que contenga una ra z, se obtiene el punto c por el procedimiento descrito y se intercambia c con el extremo del intervalo cuya imagen f (a) o f (b) tenga el mismo signo que f (c) el procedimiento se repite iterativamente hasta que f(c) sea menor que el valor de tolerancia preestablecido.

rr

0 x

0.5

s
b 1.5 2

La gura 4.5 muestra gr acamente la posici on del punto c obtenido mediante el m etodo de interpolaci on.

.u cm .es
2.5

4.2. METODOS ITERATIVOS LOCALES Partimos de [a, b] con f (a) f (b) < 0

153

c=b

es |f (c)| tol? No es f (a) f (c) < 0?

S convergencia: terminar

Figura 4.6: Diagrama de ujo del m etodo de interpolaci on lineal

Bo

rr

Es f acil ver sin embargo que los puntos intermedios que obtiene el algoritmo hasta converger a la ra z son distintos. De hecho, el algoritmo emplea ahora tan solo siete iteraciones para obtener la ra z, empleando el mismo valor para la tolerancia, 0.01, que se emple o en el m etodo de la bisecci on. Una observaci on nal, se ha dicho al principio que este m etodo supone una mejora al m etodo anterior de la bisecci on. Esto no siempre es cierto. El m etodo de la bisecci on tiene una tasa de convergencia constante, cada iteraci on divide el espacio de b usqueda por la mitad. Sin embargo la convergencia del m etodo de interpolaci on lineal depende de la funci on f (x) y de la posici on relativa de los puntos iniciales (a, f (a)) y (b, f (b)) con respecto al la ra z. Por esto no es siempre cierto que converja m as r apido que el m etodo de la bisecci on. Por otro lado, el c alculo de los sucesivos valores del punto c, requiere m as operaciones aritm eticas en el m etodo de interpolaci on con lo que cada iteraci on resulta m as lenta que en el caso de la bisecci on.

ad o

La gura 4.7 Muestra gr acamente el proceso iterativo seguido para obtener la ra z de una funci on en un intervalo mediante el m etodo de interpolaci on lineal. Se ha empleado la misma funci on y el mismo intervalo inicial que en el caso de la bisecci on.

r,j

ua

En la gura 4.6 se muestra el diagrama de ujo para el m etodo de interpolaci on lineal. Como puede verse, es id entico al de la bisecci on excepto en el paso en que se obtiene el valor de c, donde se ha sustituido el c alculo del punto medio del intervalo de b usqueda, por el c alculo del punto de corte con el eje de abscisas de la recta que une los extremos del intervalo.

n. ji m en ez @
No a=c f (a) = f (c)

b=c f (b) = f (c)

.u cm .es

Calculamos f (b) f (b)f (a) (b a), f (c)

154

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

2 a b y

2 a

c1

b1

(a) intervalo inicial

(b) iteracion 1

2 c 0 a b2 y
2

n. ji m en ez @
6 4 2 c c b 0 a
3 2

s
c
1

6 2.5

1.5

0.5

0 x

0.5

1.5

2.5

6 2.5

1.5

0.5

0 x

b1

b3

b2

b1

6 2.5

1.5

0.5

0 x

0.5

1.5

2.5

6 2.5

1.5

0.5

0 x

(c) iteracion 2

ua

(d) iteracion 3

ad o

r,j

2 R a 0 b3 b2 2 c3 c2

c1

b1

rr

Bo

6 2.5

1.5

0.5

0.5

1.5

2.5

(e) iteracion 6: ra z alcanzada

Figura 4.7: proceso de obtenci on de la ra z de una funci on por el m etodo de interpolaci on lineal

.u cm .es
b 0.5 1 1.5 2 2.5 b 0.5 1 1.5 2 2.5

4.2. METODOS ITERATIVOS LOCALES

155

4.2.3.

M etodo de Newton-Raphson

El m etodo de Newton se basa en la expansi on de una funci on f (x) en serie de Taylor en el entorno de un punto x0 ,

Pertenece a una familia de m etodos ampliamente empleados en c alculo num erico. La idea en el caso del m etodo de newton es aproximar la funci on para la que se desea obtener la ra z, mediante el primer t ermino de la serie de Taylor. Es decir aproximar localmente f (x), en el entorno de x0 por la recta, f (x0 ) + f (x0 )(x x0 ) Esta recta, es precisamente la recta tangente a la curva f (x) en el punto x0 (gura 4.8)

10

ua

n. ji m en ez @
y=f(x0)+f(x 0)(xx0) x1 x0 2 1 0 x 1 2 3

12

ad o

4 3

r,j

s
[h] Figura 4.8: Recta tangente a la funci on f (x) en el punto x0 0 = f (x0 ) + f (x0 )(x x0 ) x = x0 f ( x0 ) f (x0 )

Bo

rr

El m etodo consiste en obtener el corte de esta recta tangente con el eje de abscisas,

y despejando x,

.u cm .es

1 1 f (x) f (x0 ) + f (x0 )(x x0 ) + f (x0 )(x x0 )2 + + f (n) (x0 )(x x0 )n + 2 n!

156

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

A continuaci on se eval ua la funci on en el punto obtenido x f (x). Como en los m etodos anteriores, se compara el valor de f (x) con una cierta tolerancia preestablecida, si es menor el valor de x se toma como ra z de la funci on si no, se vuelve aplicar el algoritmo, empleando ahora el valor de x que acabamos de obtener como punto de partida, Cada c alculo constituye una nueva iteraci on y los sucesivos valores obtenidos para x, convergen a la ra z, f (x1 ) f (xn1 ) f (x0 ) x2 = x1 xn = f (x0 ) f ( x1 ) f (xn1 ) La gura 4.9 muestra un diagrama de ujo correspondiente al m etodo de Newton. Si se compara con los diagramas de ujo de los algoritmos anteriores, el algoritmo de Newton resulta algo m as simple de implementar. Sin embargo es preciso evaluar en cada iteraci on el valor de la funci on y el de su derivada. El c alculo de la derivada, es el punto d ebil de este algoritmo, ya que para valores x0 pr oximos a un m nimo o m aximo local obtendremos valores de la derivada pr oximos a cero, lo que puede causar un error de desbordamiento al calcular el punto de corte de la recta tangente con el eje de abscisas o hacer que el algoritmo converja a una ra z alejada del punto inicial de b usqueda. x0 x1 = x0 Partimos de un punto inicial x0

Calculamos f (x0 ) x = x0 f (x0 ) , f (x)

La gura 4.10 muestra un ejemplo de obtenci on de la ra z de una funci on mediante el m etodo de Newton. El m etodo es m as r apido que los dos anteriores, es decir, partiendo de una distancia comparable a la ra z, es el que converge en menos iteraciones. En el ejemplo de la gura se ha obtenido la ra z para la misma funci on que el los ejemplos del m etodo de la bisecci on e interpolaci on lineal. Se ha empezado sin embargo en un punto m as alejado de la ra z, para que pueda observarse mejor en la gura la evoluci on del algoritmo. En cada uno de los gr acos que componen la gura pueden observarse los pasos del algoritmo: dado el punto xi , se calcula la recta tangente a la funci on f (x) en el punto y se obtine un nuevo punto xi+1 , como el corte de la recta tangente obtenida con el eje de abscisas. En este ejemplo el algoritmo converge en las cinco iteraciones que se muestran en la gura, para la misma tolerancia empleada en los m etodos anteriores, tol = 0,01. El punto de inicio empleado fue x0 = 2,5, por tanto esta fuera del intervalo [2, 2] y m as alejado de la ra z que en el caso de los m etodos anteriores.

Bo

rr

ad o

Figura 4.9: Diagrama de ujo del m etodo de Newton-Raphson

r,j

ua

n. ji m en ez @
es |f (x)| tol? No x0 = x

S convergencia: terminar

.u cm .es

4.2. METODOS ITERATIVOS LOCALES

157

12

12

10

10

x1

x0

4 3

(a) intervalo inicial

12

10

n. ji m en ez @
12 10 8 6 4 y 2 x3 x1 x0 0 2 1 2 3 4 3 2

s
1 0 x

0 x

4 3

(b) iteracion 1

x2

4 3

0 x

ua

(c) iteracion 2

(d) iteracion 3

12 10 8 6 4 2

10

ad o

r,j

12

rr

x3

x4 x2 x1 x0

0 2 4 3

x3

x4 x2 Raz x1 x0

Bo

4 3

0 x

(e) iteracion 4

(f) iteracion 5: ra z de la funci on

Figura 4.10: proceso de obtenci on de la ra z de una funci on por el m etodo de Newton

.u cm .es
x1 x0 0 x 1 2 3 x2 x1 x0 1 2 3

0 x

158

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

4.2.4.

M etodo de la secante

El m etodo de la secante podr a considerarse una variante del m etodo de newton en el que se sustituye la recta tangente al punto x0 por la recta secante que une dos puntos obtenidos en iteraciones sucesivas. La idea es aproximar la derivada a la funci on f en el punto xn por la pendiente de una recta secante, es decir de una recta que corta a la funci on en dos puntos, f (xn ) f (xn ) f (xn1 ) xn xn1

Las sucesivas aproximaciones a la ra z de la funci on se obtienen de modo similar a las del m etodo de Newton, simplemente sustituyendo la derivada de la funci on por su valor aproximado, xn+1 = xn f ( xn ) (xn xn1 ) f (xn ) xn f (xn ) f (xn ) f (xn1 )

Para iniciar el algoritmo, es preciso emplear en este caso dos puntos iniciales. La gura 4.11 muestra un ejemplo.

x 0

ad o

Bo

rr

10 3

r,j

2.5

ua

n. ji m en ez @
x2 1.5 1 x 0.5 0

Figura 4.11: Recta secante a la funci on f (x) en los puntos x0 y x1

El m etodo podr a en este punto confundirse con el de interpolaci on, sin embargo tiene dos diferencias importantes: En primer lugar, la elecci on de los dos puntos iniciales x0 e x1 , no tienen porqu e formar un intervalo que contenga a la ra z. Es decir, podr an estar ambos situados al mismo lado de la ra z. En segundo lugar, los puntos obtenidos se van sustituyendo por orden, de manera que la nueva recta secante se construye siempre a partir de los dos u ltimos puntos obtenidos, sin

s
x1 0.5 1

.u cm .es

4.2. METODOS ITERATIVOS LOCALES

159

Partimos de dos puntos inicial x0 , x1

Calculamos x1 x0 )f (x1 ) x = x1 (f (x1 )f (x0 ) , f (x)

Figura 4.12: Diagrama de ujo del m etodo de la secante La gura 4.13 muestra un ejemplo de la obtenci on de una ra z por el m etodo de la secante. Se ha empleado de nuevo la misma funci on que en los ejemplos anteriores, tomando como valores iniciales, x0 = 2,5 y x1 = 0,5. La tolerancia se ha jado en tol = 0,01 tambi en como en los anteriores algoritmos descritos. En este caso, el algoritmo encuentra la ra z en cinco iteraciones. Cada uno de los gr acos que compone la gura 4.13, muestra la obtenci on de un nuevo punto a partir de los dos anteriores. En la iteraci on 2, puede observarse como el nuevo punto se obtiene a partir de dos puntos que est a situados a la derecha de la ra z, es decir, no forman un intervalo que contenga a la ra z. El m etodo es, en principio, m as eciente que el de la bisecci on y el de la secante, y menos eciente que el de Newton.

rr

Bo

4.2.5.

Punto jo de una funci on. cumple,

ad o

M etodo de las aproximaciones sucesivas o del punto jo


Se dice que un punto xf es un punto jo de una funci on g (x) si se g (xf ) = xf

Es decir, la imagen del punto jo xf es de nuevo el punto jo. As por ejemplo la funci on, g (x) = ex

r,j

ua

n. ji m en ez @
es |f (x)| tol? No x0 = x1 x1 = x

S convergencia: terminar

.u cm .es

prestar atenci on a que el valor de la ra z est e contenido entre ellos. (No se comparan los signos de la funci on en los puntos para ver cual se sustituye, como en el caso del m etodo de interpolaci on). La gura 4.12 muestra un diagrama de ujo para el m etodo de la secante. El diagrama es b asicamente el mismo que el empleado para el m etodo de Newton. Las dos diferencias fundamentales son, que ahora en lugar de evaluar la funci on y la derivada en cada iteraci on, se calcula el valor del punto de corte de la recta que pasa por los dos u ltimos puntos obtenidos (es decir, empleamos una recta secante, que corta a la curva en dos puntos, en lugar de emplear una recta tangente). Adem as es preciso actualizar, en cada iteraci on, el valor de los dos u ltimos puntos obtenidos : el m as antiguo se desecha, el punto reci en obtenido sustituye al anterior y este al obtenido dos iteraciones antes.

160

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

x0 0 x2 x1 0

x0

10 3

2.5

1.5

(a) intervalo inicial

(b) iteracion 1

x0 0

x3 x2

n. ji m en ez @
2 x0 x3 x1 0 2 4 y 6 8 0.5 1 10 3 2.5 2 1.5

s
x4 x2 x1 1 x 0.5 0 0.5 1

1 x

0.5

0.5

10 3

2.5

1.5

1 x

10 3

2.5

1.5

1 x

0.5

ua

(c) iteraci on 2

(d) iteraci on 3

2 x3

r,j

x0

x5

x4

x2

x1

x0

x3 x4 x2 x1

ad o

4 Raz 6

rr

Bo

10 3

2.5

1.5

1 x

0.5

0.5

10 3

2.5

1.5

1 x

(e) iteraci on 4

(f) iteraci on 5

Figura 4.13: proceso de obtenci on de la ra z de una funci on por el m etodo de la secante

.u cm .es
x2 x1 0.5 0 0.5 1

0.5

0.5

4.2. METODOS ITERATIVOS LOCALES

161

3 y=x 2 y=sqrt(e x) punto fijo

5 3

n. ji m en ez @
1 0 x 1

s
2 3

Figura 4.14: Obtenci on gr aca del punto jo de la funci on, g (x) = ex

Punto jo atractivo. Supongamos ahora que, a partir de la funci on g (x) creamos la siguiente sucesi on, xn+1 = g (xn )

Bo

rr

Es decir, empezamos tomamos un punto inicial x0 y a partir de el vamos obteniendo los siguiente valores de la sucesi on como, x0 x1 = g (x0 ) x2 = g (x1 ) = g (g (x0 )) xn+1 = g (xn ) = g (g ( (g (x0 ))))

Decimos que un punto jo xf de la funci on g (x) es un punto jo atractivo si la sucesi on xn+1 = g (xn ) converge al valor xf , siempre que x0 se tome sucientemente cercano a xf . C omo de cerca tienen que estar x0 y xf para que la serie converja, es una cuesti on delicada. De entrada, es importante descartar que hay funciones que tienen puntos jos no atractivos, por ejemplo, la funci on g (x) = x2 tiene dos puntos jos x = 0 y x = 1. El primero es el l mite de la sucesi on xn+1 = g (xn ) para cualquier valor inicial x0 contenido en el intervalo abierto (1, 1). El punto

ad o

r,j

ua

.u cm .es

Tiene un punto jo en xf = 0,703467, porque g (0,703467) = 0,703467. La existencia de un punto jo puede obtenerse gr acamente, representando en un mismo gr aco la funci on y = g (x) y la recta y = x. Si existe un punto de corte entre ambas gr acas, se trata de un punto jo. La gura 4.14. Muestra gr acamente el punto jo de la funci on g (x) = ex del ejemplo anterior. Una on puede tener uno o m as puntos jos o no tener ninguno. Por ejemplo, la funci on funci un punto jo. y = ex no tiene ning

162

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

x = 1 resulta inalcanzable para cualquier sucesi on excepto que el punto de inicio sea el mismo x0 = xf = 1. Hay algunos casos en los que es posible, para determinadas funciones, saber cuando uno de sus puntos jos es atractivo, Teorema de existencia y unicidad del punto jo. Dada una funci on g (x), continua y diferenciable en un intervalo [a, b], si se cumple que, x [a, b] g (x) [a, b], entonces g (x) tiene un punto jo en el intervalo [a, b]. Si adem as existe una constante positiva k < 1 y se cumple que la derivada |g (x)| k, x (a, b), entonces el punto jo contenido en [a, b] es u nico. Para demostrar la primera parte del teorema, se puede emplear el teorema de Bolzano. Si se cumple que f (a) = a o que f (b) = b, entonces a o b ser an el punto jo. Supongamos que no es as ; entonces tiene que cumplirse que g (a) > a y que g (b) < b. Si construimos una funci on, f (x) = g (x) x esta funci on, que es continua por construcci on, cumple que f (a) = f (a) a > 0 y f (b) < 0. Pero entonces, debe existir un punto, xf [a, b] para el cual f (xf ) = 0. Pero entonces, f (xf ) = g (xf )f = 0 g (xf ) = xf . Es decir, xf es un punto jo de g (x). La segunda parte del teorema puede demostrarse empleando el teorema de valor medio. Si suponemos que existen dos puntos jos distintos xf 1 = xf 2 en el intervalo [a, b], seg un el teorema del valor medio, existe un punto comprendido entre xf 1 y xf 2 para el que se cumple,

Por tanto,

|g (xf 1 ) g (xf 2 )| = |xf 1 xf 2 | |g ( )| |xf 1 xf 2 | k < |xf 1 xf 2 | Pero como se trata de puntos jos |g (xf 1 ) g (xf 2 | = |xf 1 xf 2 |. con lo que llegar amos al resultado contradictorio,

Salvo que, en contra de la hip otesis inicial, se cumpla que xf 1 = xf 2 . En cuyo caso, solo puede existir un u nico punto jo en el intervalo [a, b] bajo las condiciones impuestas por el teorema. Teorema de punto jo (atractivo). 2 Dada una funci on g (x), continua y diferenciable en un intervalo [a, b], que cumple que, x [a, b] g (x) [a, b] y que |g (x)| k, x (a, b), con 0 < k < 1, entonces se cumple que, para cualquier punto inicial x0 , contenido en el intervalo [a, b], la sucesi on xn+1 = g (xn ) converge al u nico punto jo del intervalo [a, b]. La demostraci on puede obtenerse de nuevo a partir del teorema del valor medio. Si lo aplicamos al valor inicial x0 y al punto jo xf , obtenemos,

rr

Bo

Para la siguiente iteraccion tendremos, |g (x1 ) g (xf )| |x1 xf | kleq |x0 xf | k 2

puesto que, x1 = g (x0 ). Por simple inducci on tendremos que para el t ermino en esimo de la sucesi on,
2 Hay varios teoremas de punto jo denidos en distintos contectos matem atico. Aqu se da una versi on reducida a funciones f (x) : R R

ad o

r,j

|g (x0 ) g (xf )| = |x0 xf | |g ( )| |x0 xf | k

ua

|xf 1 xf 2 | = |g (xf 1 ) g (xf 2 )| |xf 1 xf 2 | k < |xf 1 xf 2 |

n. ji m en ez @
g (xf 1 ) g (xf 2 ) = g ( ) xf 1 xf 2

.u cm .es

4.2. METODOS ITERATIVOS LOCALES

163

|g (xn ) g (xf )| |xn1 xf | kleq |xn2 xf | k 2 |x0 xf | k n Pero


n

lim k n = 0 lim |xn xf | lim |x0 xf |k n = 0


n n

Es decir, la sucesi on xn+1 = g (xn ) converge al punto jo xf .

El m etodo del punto jo. Como ya hemos visto, obtener una ra z de una funci on f (x), consiste en resolver la ecuaci on f (x) = 0. Si descomponemos la funci on f (x) como, f (x) = g (x) x

Encontrar una ra z de f (x) resulta entonces equivalente a buscar un punto jo de g (x). f (x) = 0 g (x) x = 0 g (x) = x

Partimos de un punto inicial x0

ua

ad o

r,j

rr

Bo

Figura 4.15: Diagrama de ujo del m etodo del punto jo. La ra z obtenida corresponde a la funci on f (x) = g (x) x Veamos un ejemplo. Supongamos que queremos calcular por el m etodo del punto jo la ra z de la funci on y = ex x2 , que hemos empleado en los ejemplos de los m etodos anteriores. En

n. ji m en ez @
Calculamos x = g (x0 ) es |x x0 | tol? No x0 = x

En general, a partir de una funci on dada f (x), es posible encontrar distintas funciones g (x) que cumplan que f(x)=g(x)-x. Si podemos encontrar una que cumpla las condiciones del teorema de punto jo que acabamos de enunciar, en un entorno de la ra z de f (x), podemos desarrollar un m etodo que obtenga iterativamente los valores de la sucesi on xn+1 = g (xn ), a partir de un valor inicial x0 . El resultado se aproximar a al punto jo de g (x), y por tanto a la ra z de f (x) tanto como queramos. Bastar a por tanto como en los m etodos anteriores denir un valor (tolerancia), por debajo del cual consideramos que el valor obtenido es sucientemente pr oximo a la ra z como para darlo por v alido. La gura 4.15 muestra un diagrama de ujo del m etodo del punto jo.

S convergencia: terminar

.u cm .es

164

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

En el primer caso, obtenemos las dos ramas de la ra z, cuadrada. si las dibujamos junto a la recta y = x (gura 4.18), observamos que solo la rama negativa la corta. Luego ser a esta rama z de la funci on original por el m etodo del g (x) = (ex ), la que utilizaremos para obtener la ra punto jo.

5 4 3 2 1 0 1 2 3 4 5 3 y y=sqrt (e x) y=x y=sqrt(e )


x

r,j

ua

n. ji m en ez @
1 0 x 1 2 3

No es dif cil demostrar, que la funci on g (x) = e2 cumple las condiciones del teorema de punto jo descrito m as arriba para el intervalo (inf ty 0]. Luego el algoritmo del punto jo deber a converger para cualquier punto de inicio x0 contenido en dicho intervalo. De hecho, para esta funci on, el algoritmo converge desde cualquier punto de inicio (Si empezamos en punto positivo, el siguiente punto, x1 ser a negativo, y por tanto estar a dentro del intervalo de convergencia). Esta funci on es un ejemplo de que el teorema suministra una condici on suciente, pero no necesaria para que un punto jo sea atractivo. La gura 4.17 muestra un ejemplo del c alculo de la ra z de la funci on f (x) = ex x2 empleando x la funci on g (x) = (e ), para obtener el punto jo. Se ha tomado como punto de partida x0 = 2,5, un valor fuera del intervalo en el que se cumple el teorema.

Bo

rr

ad o

Figura 4.16: g (x) = ex , Solo la rama negativa tiene un punto jo.

.u cm .es

primer lugar, debemos obtener a partir de ella una nueva funci on que cumpla que f (x) = g (x) x. Podemos hacerlo de varias maneras despejando una x, de la ecuaci on ex x2 = 0 x = ex 2 ex x2 = 0 x = ln(x ) = 2 ln(|x|) 2 x = e x

4.2. METODOS ITERATIVOS LOCALES

165

1 x1

3 x0 4

5 4

1 x

5 4

s
2 1 x x3 x2 2 1 x 0 x3 x4 x2 raz 2 1 x 0

1 x1

x2

ua

n. ji m en ez @
3 2 1 0 x1 1 y 2 3 x0 4 1 2 3 5 4 3 3 2 1 0 x1 1 y 2 3 x0 4 1 2 3 5 4 3

(a) valor inicial

(b) iteracion 1

r,j

5 4

(c) iteraci on 2

(d) iteraci on 3

Bo

rr

ad o

x1 x3 x4

x2

5 4

1 x

(e) iteraci on 4

(f) iteraci on 5

Figura 4.17: proceso de obtenci on de la ra z de la funci on f (x) = ex x2 aplicando el m etodo del x punto jo sobre la funci on g (x) = e .

.u cm .es
x0 0 1 2 3 x0 1 2 3 x0 1 2 3

166

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

Si tratamos de emplear la funci on g (x) = ln(x2 ) para obtener la ra z, observamos que la funci on no cumple el teorema para ning un intervalo que contenga la ra z. La gura ?? muestra la funci on g (x), la recta y = x y la evoluci on del algoritmo tras cuatro evoluciones. Es f acil deducir que el algoritmo saltar a de la rama positiva a la negativa y de esta volver a a saltar de nuevo a la positiva.

2 y

10 4

n. ji m en ez @
1 0 1 2 x

La funci on presenta una as ntota vertical en el 0. Si se empieza desde x0 ==, x0 = 1 0 x0 = 1 el algoritmo no converge, puesto que la funci on diverge hacia . Para el resto de los valores, la funci on oscila entre una rama y otra. Si en alguna de las oscilaciones acierta a pasar sucientemente cerca del punto jo, xn xn tol, el algoritmo habr a aproximado la ra z, aunque propiamente no se puede decir que converja. La gura 4.19 (a), muestra la evoluci on del algoritmo, tomando como punto inicial x0 = 0,2. Tras 211 iteraciones el algoritmo atrapa la ra z. En este caso la tolerancia se j o en tol = 0,01. La gr aca (b) muestra una ampliaci on de (a) en la que pueden observarse en detalles los valores obtenidos para las dos u ltimas iteraciones. Las dos l neas horizontales de puntos marcan los l mites ra z tol. El algoritmo se detiene porque la diferencia entre los valores obtenidos en las dos u ltimas iteraciones caen dentro de la tolerancia. El valor obtenido en la pen ultima iteraci on, que proviene de la rama positiva de la funci on g (x) cae muy cerca de l punto jo. El u ltimo valor obtenido, se aleja de hecho del valor de ra z, respecto al obtenido en la iteraci on anterior, pero no lo suciente como para salirse de los l mites de la banda marcada por la tolerancia. Como resultado, se cumple la condici on de terminaci on y el algoritmo se detiene. Si disminuimos el valor de la tolerancia, no podemos garantizar que el algoritmo converja. De hecho, si trazamos cuales habr an sido los valores

Bo

rr

ad o

r,j

Figura 4.18: primeras iteraciones de la obtenci on de la ra z de la funci on f (x) = ex x2 aplicando 2 el m etodo del punto jo sobre la funci on g (x) = ln(x ).

ua

s
3

.u cm .es

4.2. METODOS ITERATIVOS LOCALES

167

0.62
4

0.64
2

0.66
0

0.68
2 y

Punto fijo 0.7 y 2*tol

0.72
6

0.74
8

10

12 10

5 x

n. ji m en ez @
0.76 0.78
0 5

0.78

0.76

0.74

s
Raz obtenida 0.72 0.7 0.68 x 0.66 0.64 0.62 0.6 0.58

(a) Evoluci on del algoritmo durante 211 iteraciones

(b) Vista detallada de las ultimas iteraciones de (a)

15

10

r,j

ua

error

10 0 20 40 60 80 100 120 n de iteracin 140 160 180 200

ad o

(c) Evoluci on del error

Bo

rr

Figura 4.19: proceso de obtenci on de la ra z de la funci on f (x) = ex x2 aplicando el m etodo del ex etodo oscila sin converger a la soluci on. punto jo sobre la funci on g (x) = x , el m Por u ltimo, si empleamos la funci on g (x) = ex , no se cumple el teorema de punto jo en ning un punto, y el algoritmo diverge siempre. La gura 4.20 muestra la evoluci on del algoritmo del punto jo para esta funci on. Se ha elegido un punto de inicio x0 = 0,745, muy pr oximo al valor de la ra z, para poder observar la divergencia de las soluciones obtenidas con respecto al punto jo. Como puede observarse, el valor de xn cada vez se aleja m as de la ra z. A diferencia de lo que suced a en la elecci on de g (x) = ln(x2 ), en este caso, el algoritmo no oscila entre las dos ramas. Si empezamos el la rama de la derecha, eligiendo un valor positivo para x0 , el algoritmo diverge llevando las soluciones hacia +.
x

.u cm .es

siguientes que habr a tomado la soluci on del algoritmo, caso de no haberse detenido, es f acil ver que se alejan cada vez m as de la ra z. De nuevo habr a que esperar a que cambie de rama y vuelva de nuevo a pasar cerca del punto jo para que haya otra oportunidad de que el algoritmo atrape la soluci on. La gr aca (c) muestra la evoluci on del error en funci on del n umero de iteraci on. Como puede observarse, el error oscila de forma ca otica de una iteraci on a la siguiente.

168

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

1 x0 y

1 x0 x1

0 y

5 3

2.5

1.5

0.5 x

0.5

1.5

5 3

2.5

1.5

0.5 x

(a) valor inicial

(b) iteracion 1

1 x 0 y x2 x1
0

5 3

2.5

1.5

0.5 x

0.5

n. ji m en ez @
4 3 2 1 x 0
0

1.5

5 3

2.5

1.5

s
x2 x1 x3 1 0.5 x 0 0.5 1 1.5 2 x0 x2 x1 x3 x5 1 0.5 x 0 0.5 1 1.5 2

(c) iteraci on 2

ua

(d) iteraci on 3

r,j

ad o

0 y

x0

x4

x1 x3

x2

0 x4 1

rr

Bo

5 3

2.5

1.5

0.5 x

0.5

1.5

5 3

2.5

1.5

(e) iteraci on 4

(f) iteraci on 5

Figura 4.20: proceso de obtenci on de la ra z de la funci on f (x) = ex x2 aplicando el m etodo del ex punto jo sobre la funci on g (x) = x , el m etodo diverge r apidamente.

.u cm .es
0 0.5 1 1.5 2

4.3. CALCULO DE RA ICES DE FUNCIONES CON MATLAB.

169

4.3.

C alculo de ra ces de funciones con Matlab.

Matlab suministra funciones propias para calcular ra ces de funciones. Las dividiremos en dos grupos. En primer lugar estudiaremos la funci on de Matlab fzero y despu es veremos un conjunto de funciones espec cas para manejar polinomios.

4.3.1.

La funci on de Matlab fzero.

handle de una funci on. El primer mecanismo, es asociar a una funci on un nombre de variable especial. Hasta ahora, siempre hemos empleado las variables para guardar en ellas valores num ericos o car acteres. Sin embargo Matlab permite guardar tambi en funciones en una variable. Estas variables, reciben el nombre de handles. Veamos un ejemplo. Si escribimos en Matlab, >> sn =@sin sn = @sin

Matlab asocia a la nueva variable seno la funci on seno ((sin). Para indicar a Matlab que se la nueva variable es el handle de una funci on es imprescindible emplear el s mbolo @, despu es del s mbolo de asignaci on =. Si pedimos a Matlab que nos muestre qu e variables tiene en el workspace, >> whos Name sn

Size 1x1

ua

r,j

Bo

rr

Matlab nos indica que se ha creado una variable sn, cuya clase es function handle. Esta variable tiene propiedades muy interesantes: por una parte, podemos manejarla como si se tratara de la funci on seno, asignando valores de entrada, y guardando el resultado en una variable de salida, >> x=sn(pi/2) x = 1 Pero adem as podemos usarla como variable de entrada para otra funci on, tal y como se muestra en el siguiente c odigo, function pinta_funcion(fun,intervalo) %Esta funci on dibuja la gr afica de una funcion cualquiera (fun) en un %itervalo dado (intervalo). fun debe ser un handle de la funci on que se

ad o

n. ji m en ez @
Bytes 32 Class function_handle

Attributes

La funci on fzero permite obtener la ra z de una funci on cualquiera real f (x) : R R. Es una fzero, es una funci on especial, ya que opera sobre otras funciones, podemos considerarla como una funci on de funciones. Las funciones ordinarias act uan sobre variables, a lo largo de los cap tulos anteriores hemos visto como asignar valores y variables de entrada a las funciones y tambi en c omo guardar los resultados obtenidos de las funciones en variables de salida. Matlab suministra varios mecanismos, para indicar a fzero, y en general a cualquier funci on de funciones sobre qu e funci on queremos que act ue. Veremos a continuaci on algunos de los m as comunes.

.u cm .es

170

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

%quiere pintar. intervalo debe ser un vector que contenga los extremos del %intervalo que se desea pintar. %Construimos cien puntos en el intevalo dado, x=linspace(intervalo(1),intervalo(2),100); %calculamos el valor de la funcion en los puntos del intervalo, y=fun(x); %dibujamos la gr afica plot(x,y)

Matlab obtendr a la gr aca de la funci on seno en el intervalo pedido. Podemos asignar handles no solo a las funciones internas de Matlab sino a cualquier funci on que escribamos. Por ejemplo, en los m etodos descritos m as arriba para obtener ra ces de funciones, usamos la funci on f (x) = ex x2 como funci on de prueba. podemos crear en Matlab un chero que implemente esta funci on, function y=prueba(x) %esta es una funcioncilla de prueba para los algoritmos de obtenci on de %ra ces y=exp(x)-x.^2;

pinta_funcion(mifuncion,[-2 2])

Bo

la funci on feval de Matlab. Esta funci on suministra un m etodo indirecto para calcular los resultados de una funci on cualquiera. Su sintaxis es la siguiente, [y1, y2, ..., ym]=feval(fun, x1, x2, ...,xn)

donde fun representa el nombre de la funci on que se desea evaluar, x1, x2,...,xn, son la variables de entrada empleadas por la funci on fun, y y1, y2, ...,ym representan sus variables de salida. Es importante destacar que el nombre de la funci on que se desea evaluar hay que introducirlo entre comillas simples. As por ejemplo si escribimos en Matlab,

rr

El resultado se muestra en la gura 4.21

ad o

Y a continuaci on, podemos emplear el programa pinta fun para representa la funci on en un intervalo, por ejemplo [22] que contenga la ra z,

r,j

mifuncion=@prueba

ua

Si guardamos el chero, con el nombre prueba.m en el directorio de trabajo, podemos ahora asignar un handle a nuestra funci on,

n. ji m en ez @

>>sn=@sin >>pinta_funcion(sn,[-pi/2,pi/2])

La funci on pinta funcion nos dibujar a la gr aca de cualquier funci on en el intervalo indicado. para ellos bastar a crear un handle de la funci on que se quiere dibujar y pasarlo a la funci on por ejemplo, si escribimos en Matlab, pinta fun como una variable de entrada. As

.u cm .es

4.3. CALCULO DE RA ICES DE FUNCIONES CON MATLAB.

171

4 2

1.5

0.5

0.5

1.5

Figura 4.21: Gr aca de la funci on f (x) = ex x2 , obtenida mediante pinta funcion. >> y=feval(sin,x) y = 1 >>

obtenemos el mismo resultado que empleando la funci on sin directamente para calcular el valor del seno de /2, >> x=pi/2; >> y=sin(x) y = 1 >>

Bo

rr

function pinta_funcion2(fun,intervalo) %Esta funci on dibuja la gr afica de una funcion cualquiera (fun) en un %itervalo dado (intervalo). fun debe ser una cadena de caract eres que contengan ex actamente el %quiere pintar. intervalo debe ser un vector que contenga los extremos del %intervalo que se desea pintar. %Construimos cien puntos en el intevalo dado, x=linspace(intervalo(1),intervalo(2),100); %calculamos el valor de la funcion en los puntos del intervalo, EMPLEANDO LA FUNCION feval y=feval(fun,x); %dibujamos la gr afica plot(x,y)

ad o

r,j

feval suministra un m etodo alternativo al uso de handles para crear y manejar funciones de funciones. Para ver un ejemplo, el siguiente c odigo muestra una versi on alternativa del programa pinta funcion, empleando la funci on feval,

ua

n. ji m en ez @

.u cm .es

172

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

Para representar la funci on seno en el intervalo on, introdu2 , 2 , empleando esta nueva funci cimos en Matlab,

>> pinta_funcion2(sin,[-pi,pi])

>> funcion=sin >> pinta_funcion2(funcion,[-pi,pi])

Al igual que en el caso del uso de handles podemos emplear la funci on feval con funciones creadas por el usuario, por ejemplo podemos representar nuestra funci on prueba, introducida anteriormente,

>>mf=@prueba >>pinta_funcion2(mf,[-2 2])

Obtendr amos una vez m as el mismo resultado.

Para calcular el valor de la funci on en un punto, la funci on inline se maneja de modo an alogo a cualquier otra funci on ordinaria.

Bo

>> y=fun(2) y = 3.3891 Como en el caso del uso de handles, la variable creada mediante una funci on inline, hace referencia a una funci on y puede ser empleada como variable de entrada por otras funciones. Por ejemplo, podr amos emplear directamente nuestra primera versi on del programa para pintar aca de nuestra funci on de prueba f (x) = ex x2 , funciones, pita funcion para obtener la gr

rr

ad o

>> fun=inline(exp(x)-x.^2) fun = Inline function: fun(x) = exp(x)-x^2

r,j

Funciones inline. Las funciones inline suministran un tercer mec anismo en Matlab para manejar una funci on de modo que sirva de variable a otra funci on. Las funciones inline tienen una peculiaridad con respecto a las funciones que hemos visto hasta ahora; no se guardan en cheros .m sino directamente en el workspace de Matlab. Las funciones inline solo existen mientras dura la sesi on de Matlab en que se crearon, aunque es posible guardarlas en cheros .mat y volver a cargarlas en Matlab, como se har a con cualquier otra variable. Para crear en Matlab una funci on inline se emplea el comando inline. En su forma m as sencilla, el comando debe emplear como variable de entrada una expresi on entre comillas simples que represente la expresi on matem atica de la funci on. Por ejemplo si queremos hacer una versi on inline de la funci on prueba,

ua

n. ji m en ez @

El resultado ser a de nuevo la gura 4.21. Una u ltima propiedad importante de la funci on feval es que tambi en admite que indiquemos la funci on a evaluar mediante un handle. S volvemos al u ltimo ejemplo, podr amos haber construido un handle para la funci on prueba,

>>pinta_funcion2(prueba,[-2 2])

.u cm .es

Tambi en podemos crear una variable alfa-num erica con el nombre de la funci on seno, y pasar directamente la variable creada,

4.3. CALCULO DE RA ICES DE FUNCIONES CON MATLAB. >>funcion=inline(exp(x)-x.^2) >>pinta_funcion(funcion,[-2 2])

173

1. Empleando un handle y un punto pr oximo a la ra z, >> hndl=@prueba hndl = @prueba >> raiz=fzero(hndl,2) raiz = -0.703467422498392

2. Empleando un handle y un intervalo que contenga la ra z, >> raiz=fzero(hndl,[-2 2]) raiz = -0.703467422498392

3. Empleando el nombre de la funci on entre comillas y un punto cercano a la ra z, >> raiz=fzero(prueba,2) raiz = -0.703467422498392

Bo

rr

ad o

>> raiz=fzero(prueba,[-2 2]) raiz = -0.703467422498392

5. Usando una funci on inline y un punto cercano a la ra z, >> finl=inline(exp(x)-x.^2) finl = Inline function: finl(x) = exp(x)-x.^2 >> raiz=fzero(finl,2) raiz = -0.703467422498392

6. Usando una funci on inline y un intervalo que contenga la ra z,

r,j

4. Empleando el nombre de la funci on entre comillas y un intervalo que contenga la ra z,

ua

n. ji m en ez @

.u cm .es

Una vez que hemos visto distintos m etodos para manejar una funci on como variable de entrada de otra funci on, volvamos a la funci on fzero de Matlab. En su forma m as sencilla, fzero admite como variable de entrada, una funci on expresada mediante un handle, mediante su nombre escrito entrecomillas o bien construida como funci on inline. Adem as es preciso introducir una segunda variable que puede ser un punto x0 pr oximo a la ra z de la funci on o bien un vector [ab] que dena un intervalo que contenga una ra z. La funci on fzero, devuelve como variable de salida el valor aproximado de la ra z. Si fzero no es capaz de encontrar la ra z de la funci on, devolver a NaN. Veamos un ejemplo con la funci on contenida en el chero, prueba.m, descrito m as arriba,

174

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

>> raiz=fzero(finl,[-2 2]) raiz = -0.703467422498392

4.3.2.

C alculo de ra ces de polinomios.

La funci on roots. Esta funci on calcula las ra ces de un polinomio de grado n a partir de los coecientes del polinomio, contenidos en un vector como los que acabamos de describir. La sintaxis es: raices=roots([vector de coecientes]). veamos un ejemplo. Dado el polinomio y (x) = x3 62 + 11x 6 lo expresar amos en Matlab como, >> p=[1 -6 11 -6]

Y obtendr amos sus ra ces como, >> raices=roots(ans) raices = 3.0000 2.0000 1.0000

Bo

Matlab devuelve todas las ra ces del polinomio en un u nico vector. Y devuelve todas las ra ces, tanto las reales como las complejas. Como por ejemplo en el caso del polinomio y (x) = x2 + 2x + 1 >> p=[1 2 3] p = 1 2 3 >> raices=roots(p) raices = -1.0000 + 1.4142i -1.0000 - 1.4142i

rr

ad o

r,j

ua

n. ji m en ez @

Matlab tiene un conjunto de funciones especialmente pensadas para manejar polinomios. En primer lugar, en Matlab es habitual representar los polinomios mediante vectores cuyos elementos, son los coecientes del polinomio ordenados de mayor a menor grado. As por ejemplo, el polinomio. y = 2x3 +3x2 +4x +1 se representa mediante el vector, p1 = [2 3 4 1], el polinomio y = 3x4 +2x2 +6x se representa mediante el vector, p2 = [3 0 2 6 0] y, en general, el polinomio y (x) = an xn + an1 xn1 + + a2 x2 + a1 x + a0 se representa mediante el vector p = [an an1 a2 a1 a0 ]. Si al polinomio le falta alg un o algunos t erminos, el elemento correspondiente toma el valor 0 en el vector que representa el polinomio. Veamos a continuaci on un conjunto de funciones de Matlab, especialmente pensadas para manejar polinomios,

.u cm .es

La funci on fzero, tiene muchas posibilidades de ajuste de la precisi on, del m etodo que emplea internamente para buscar la ra z, etc. Para obtener una visi on mas completa de su uso, consultar la ayuda de Matlab.

4.3. CALCULO DE RA ICES DE FUNCIONES CON MATLAB.

175

la funci on poly. Esta funci on podr a considerarse la opuesta a la anterior; dado un vector que contiene las ra ces de un polinomio, nos devuelve los coecientes del polinomio correspondiente, Por ejemplo si denimos el vector de ra ces, >>raices=[3 2 1] podemos obtener los coecientes del polinomio que posee esas ra ces como, >> raices=[1 2 3] raices = 1 2 3 >> coef=poly(raices) coef = 1 -6 11

-6

ad o

>> coef=[1 2 3 4] coef = 1 2 3 4 >> x=2 x = 2 >>y= polyval(coef,x) y = 26 >> x=[1:10] x = 1 2 3 4 >> y=polyval(coef,x) y = Columns 1 through 6 10 26 Columns 7 through 10 466 668

ua

n. ji m en ez @
5 6 7 8 9 58 922 112 1234

la funci on polyval. Esta funci on calcula el valor de un polinomio en un punto. Para ello es preciso darle un vector con los coecientes del polinomio, denido igual que en los casos anteriores, y un segundo vector con los puntos para los que se quiere calcular el valor del polinomio,

r,j

s
10 194

Es decir, las ra ces pertenecen al polinomio, y (x) = x3 5x2 + 11x 6.

Bo

rr

En este ejemplo se ha obtenido con polyval el valor del polinomio y (x) = x3 + 2x2 + 2x + 4 primero para el punto x = 2 y depu es para los puntos x = [1 2 3 4 5 6 7 8 9 10]. La funci on conv. Calcula el producto de dos polinomios. Cada polinomio se representa mediante un vector de coecientes y la funci on conv devuelve un vector con los coecientes del polinomio producto. Por ejemplo, si multiplicamos el polinomio y1 = x + 2 por el polinomio y2 = x 1 obtendremos como resultado, p = y1 y2 = x2 + x 2, >> y1=[1 2] y1 = 1 2

.u cm .es
310

176 >> y2=[1 -1] y2 = 1 -1 >> p=conv(y1,y2) p = 1 1 -2

CAP ITULO 4. CALCULO DE RA ICES DE UNA FUNCION

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 5

Aplicaciones del c alculo cient co al Algebra lineal


5.1. Matrices y vectores

En esta secci on vamos a repasar algunos conceptos fundamentales de algebra lineal y como pueden manejarse empleando Matlab. No daremos deniciones precisas ni tampoco demostraciones, ya que tanto unas como otras se ver an en detalle en la asignatura de algebra. matrices. Desde un punto de vista funcional deniremos una matriz como una tabla bidimensional de n umeros ordenados en las y columnas, (2) 3,5 0 1 A = 2 4,6 4 7 19 2,8 0,6 Cada l nea horizontal de n umeros constituye una la de la matriz y cada l nea horizontal una columna de la misma. A una matriz con m las y n columnas se la denomina matriz de orden m n. m y n son la dimensiones de la matriz y se dan siempre en el mismo orden: primero el n umero de las y despu es el de columnas. As , la matriz A del ejemplo anterior es una matriz 3 4. El orden de una matriz expresa el tama no de la matriz. Dos matrices son iguales si tienen el mismo orden, y los elementos que ocupan en ambas matrices los mismo lugares son iguales. Una matriz es cuadrada, si tiene el mismo n umero de las que de columnas. Es decir es de orden n n. Mientras no se diga expresamente lo contrario, emplearemos letras may usculas A, B, para representar matrices. La expresi on Amn indica que la matriz A tiene dimensiones m n. Para denotar los elementos de una matriz, emplearemos la misma letra en min usculas empleada para nombrar la matriz, indicando mediante sub ndices, y siempre por este orden, la la y la columna a la que pertenece el elemento. Asi por ejemplo aij representa al elemento de la matriz A, que ocupa la la i y la columna j . (2) 3,5 0 1 A = 2 4,6 4 a23 = 4,6 7 19 2,8 0,6

Bo

rr

ad o

r,j

ua

n. ji m en ez @
177

.u cm .es

178 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL vectores A una matriz compuesta por una sola la, la denominaremos vector la. A una matriz compuesta por una sola columna la denominaremos vector columna. Siempre que hablemos de un vector, sin especicar m as, entenderemos que se trata de un vector columna.1 Para representar vectores, emplearemos letras min usculas. Para representar sus elementos a nadiremos a la letra que representa al vector un sub ndice indicando la la a la que pertenece el elemento. a1 a2 . . . a= ai . . . an

a=

1.5

0.5

0.5

r,j

ua

1.5

2.5

De modo an alogo, podemos asociar vectores de dimensi on tres con puntos en el espacio tridimensional. En este caso, los valores de los elementos del vector corresponden con la coordenadas (x, y, z ) de los puntos en el espacio. La gura 5.2 muestra la representaci on gr aca en espacio tridimensional de los vectores, 1 2 0 a = 2 , b = 3 , c = 2 1 1 1
1 Esta identicaci on de los vectores como vectores columna no es general. La introducimos porque simplica las explicaciones posteriores.

Bo

rr

ad o

Figura 5.1: Representaci on gr aca de vectores en el plano

n. ji m en ez @
1 ,b = 2 2 ,c = 3 0 2
a b c 1.5 1 0.5 0 0.5 1 1.5 2 2.5 3 3.5

Podemos asociar los puntos del plano con los vectores de dimensi on dos. Para ello, usamos una representaci on cartesiana, en la que los elementos del vector son los valores de las coordenadas (x, y ) del punto del plano que representan. Cada vector se representa gr acamente mediante una echa que parte del origen de coordenadas y termina en el punto (x, y ) representado por el vector. La gura 5.1 representa los vectores,

.u cm .es

5.2. OPERACIONES MATRICIALES

179

3 3

2 2 1 0 0 1 x 2 2 3

Figura 5.2: Representaci on gr aca de vectores en el espacio Evidentemente para vectores de mayor dimensi on, no es posible obtener una representaci on gr aca. Si embargo muchas de las propiedades geometricas, observables en los vectores bi y trdimensionales, pueden extrapolarse a vectores de cualquier dimensi on.

5.2.

Operaciones matriciales

A continuaci on deniremos las operaciones matem aticas m as comunes, denidas sobre matrices. suma. La suma de dos matrices, se dene como la matriz resultante de sumar los elementos que ocupan en ambas la misma posici on. Solo est a denida para matrices del mismo orden,

ua

r,j

ad o

1 4 7

Bo

rr

La suma de matrices cumple las siguientes propiedades,

1. Asociativa: (A + B ) + C = A + (B + C ) 2. Conmutativa: A + B = B + A 3. Elemento neutro: Onm + Anm = Amm El elemento neutro Onm de la suma de matrices de orden n m es la matriz nula de dicho orden, compuesta esclusivamente por ceros . En Matlab, podemos crear una matriz de cualquier orden, compuesta exclusivamente por ceros mediante el comando zeros(m,n), donde m es el n umero de las y n el de columnas de la matriz de ceros resultante,

n. ji m en ez @
C =A+B cij = aij + bij 2 5 8 3 1 6 = 3 9 5 3 5 7 5 0 7 + 1 9 2 1 0 1

s
2 1 0

.u cm .es

180 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL >> O=zeros(2,3) O = 0 0 0 0 >> A=[1 2 3; 4 3 A = 1 2 4 3 >> B=A+O B = 1 2 4 3 >>

0 0 6] 3 6

3 6

4. Elemento opuesto: La opuesta a una matriz se obtiene cambiando de signo todos sus elementos, Aop = A >> A A = 1 2 4 3 >> Aop=-A Aop = -1 -2 -4 -3 >> S=A+Aop S = 0 0 0 0 3 6

-3 -6

0 0

>> A=[1 2 3; 4 3 6] A = 1 2 3 4 3 6 >> B=[1 2 3; 4 -3 2] B = 1 2 3 4 -3 2 >> S=A+B S = 2 4 6 8 0 8

Bo

Transposici on Dada una matriz A, su transpuesta AT se dene como la matriz que se obtiene intecambiando sus las con sus columnas,

rr

ad o

r,j

En Matlab el signo + representa por defecto la suma de matrices, por lo que la suma de dos matrices puede obtenerse directamente como,

ua

n. ji m en ez @

.u cm .es

5.2. OPERACIONES MATRICIALES

181

A AT aij aji 1 AT = 3 2 2 7 1

En Matlab, la operaci on de trnasposici on se indica mediante un ap otrofo (), >> A=[1 2 3; 4 3 6] A = 1 2 3 4 3 6 >> B=A B = 1 4 2 3 3 6

Para vectores, la transposici on convierte un vector la en un vector columna y viceversa. a aT 1 a = 3 aT = 1 2

Una matriz cuadrada se dice que es sim etrica si coincide con su transpuesta, A = AT

rr

ad o

Una matriz cuadrada es antisim etrica cuando cumple que A = AT . Cualquier matriz cuadrada se puede descomponer en la suma de una matriz sim etrica m as otra antisim etrica. La parte sim etrica puede denirse como, 1 A + AT AS = 2 y la parte antisim etrica como,

r,j

ua

Bo

As , por ejemplo, 1 2 3 1 A = AS + AA 4 5 6 = 3 7 8 9 5 Por u ltimo, la transpuesta de la suma de matrices 3 5 0 5 7 + 1 7 9 2 cumple, 1 0 1 2 1 0

n. ji m en ez @
3 2 aij = aji 1 3 0 A = AT = 3 3 2 3 2 4 AA = 1 A AT 2 (A + B )T = AT + B T

.u cm .es

A=

1 2

3 7

2 1

182 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL Producto de una matriz por un escalar. El producto de una matriz A por un n umero b es una matriz del mismo orden que A, cuyos elementos se obtienen multiplicando los elementos de A por el n umero b,

1 2

2 3

0 1

3 6

6 9

0 3

En Matlab, el simbolo * se emplea para representar el producto entre escalares (n umeros), entre escalares y matrices y el producto entre matrices, como veremos en los siguientes p arrafos.

1 1 3 2 = 1 1 + 3 (2) + 4 0 = 5 0 4

El resultado de producto escalar de dos vectores, es siempre un n umero; se multiplican los entre s los elementos de los vectores que ocupan id enticas posiciones y se suman los productos resultantes. Producto matricial El producto de una matriz de orden n m por una matriz m l, es una nueva matriz de orden n l, cuyos elementos se obtiene de acuerdo con la siguiente expresi on,

ua

r,j

Bo

rr

Por tanto, el elemento de la matriz producto que ocupa la la i y la columna j, se obtiene multiplicando por orden los elementos de la la i de la matriz A con los elementos correspondientes de la columna j de la matriz B, y sumando los productos resultantes. Para que dos matrices puedan multiplicarse es imprescindible que el n umero de columnas de la primera matriz coincida con el n umero de las de la segunda. Podemos entender la mec anica del producto de matrices de una manera m as f acil si consideramos la primera matriz como un grupo de vectores la,

ad o

A1 = a11 A2 = a21

a12 a22 . . .

n. ji m en ez @
n

ab=

ai bi

i=1

P = A B aij =
t=1

ait btj

a1n a2n

a11 a21 A= . . . am1

a12 a22 . . . am2

a1n a2n amn

Am = am1

am2

amn

y la segunda matriz como un grupo de vectores columna,

s
. . .

Producto escalar de dos vectores. Dados vectores de la misma dimensi on m se dene su producto escalar como,

.u cm .es

C = b A cij = b aij

5.2. OPERACIONES MATRICIALES

183

Podemos ahora considerar cada elemento pij de la matriz producto P = A B como el producto escalar del vector la Ai for el vector columna Bj , pij = Ai Bj . Es ahora relativamente f acil, deducir algunas de las propiedad del producto matricial, 1. Para que dos matrices puedan multiplicarse, es preciso que el n umero de las de la primera coincida con el numero de las de la segunda. Adem as la matriz producto tiene tantas las como la primera matriz y tantas columnas como la segunda. 2. El producto matricial no es conmutativo. En general A B = B A

Matriz identidad La matriz identidad de orden n n se dene como: In = ill = 1

Es decir, una matriz en los que todos los elementos que no pertencen a la diagonal principal son 0 y los elementos de la diagonal principal son 1. Por ejemplo, 1 0 0 I3 = 0 1 0 0 0 1

ua

La matriz identidad In es el elemento neutro del producto de matrices cuadradas de orden n n, Ann In = In Ann

Adem as,

ad o

r,j

En Matlab se emplea el comando eye(n) para construir la matriz identidad de orden n n,

Bo

rr

>> I4=eye(4) I4 = 1 0 0 1 0 0 0 0

0 0 1 0

Una matriz cuadrada se dice que es ortogonal si cumple, AT A = I

n. ji m en ez @
ikj = 0, k = j Anm Im = Anm In Anm = Anm 0 0 0 1

3. (A B )T = B T AT

.u cm .es

b12 b11 b22 b21 B1 = . B2 = . . . . . bn 2 bn1

b1m B3 = b2m . . .bnm

b11 b21 B= . . . bm 1

b12 b22 . . . bm2

b1n b2n bmn

. . .

184 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL Producto escalar de dos vectores y producto matricial Por conveniencia, representaremos el producto escalar de dos vectores como un producto matricial, a b = aT b = bT a = b a 1 1 4 2 = 1 1 0 3 = 1 1 + 3 (2) + 4 0 = 5 0 4

Es decir, transponemos el primer vector del producto, convirti endolo en un vector la.

Norma de un vector. La longitud eucl dea, m odulo, norma 2 o simplemente norma de un vector se dene como, xx= xT x x2 1 x2 2 x2 n

= x =

Constituye la manera usual de medir la longitud de un vector. Tiene una interpretaci on geom etrica inmediata a trav es del teorema de Pit agoras: nos da la longitud del segmento que representa al vector. La gura 5.3 muestra dicha interpretaci on, para un vector bidimensional.

3 x x2 2
2

ua

ad o

r,j

rr

1 0.5

0.5

n. ji m en ez @
x |x| =|x1| +|x2|
2 2 2

x1

1.5

Bo

2 x1

2.5

3.5

Figura 5.3: interpretaci on ge ometrica de la norma de un vector

A partir de la norma de un vector es posible obtener una expresi on alternativa para el producto escalar de dos vectores, a b = a b cos Donde representa el angulo formado por los dos vectores.

s
x2 i
i=1

.u cm .es
1 2

4.5

5.2. OPERACIONES MATRICIALES

185

Aunque se trate de la manera m as com un de denir la norma de un vector, la norma 2 no es la u nica denici on posible, Norma 1: Se dene como la suma de los valores absolutos de los elementos de un vector, x
1

= |x1 | + |x2 | |xn |

Norma p, Es una generalizaci on de la norma 2,


n

|x2 1|

|x2 2|

+ |x2 n| =
i=1

|xp i|

norma , se dene como el mayor elemento del vector valor absoluto, x

= max {|xi |}

En Matlab la norma de un vector puede obtenerse mediante en comando norm(v,p) La primera variable de entrada debe ser un vector y la segunda el tipo de norma que se desea calcular. Si se omite la segunda variable de entrada, el comando devuelve la norma 2. A continuaci on se incluyen varios ejemplo de utilizaci on, >> x=[1;2;-3;0;-1] x = 1 2 -3 0 -1 >> norma_2=norm(x,2) norma_2 = 3.872983346207417e+00 >> norma=norm(x) norma = 3.872983346207417e+00 >> norma_1=norm(x,1) norma_1 = 7 >> norma_4=norm(x,4) norma_4 = 3.154342145529904e+00 >> norma_inf=norm(x,inf) norma_inf = 3 >> norma_minf=norm(x,-inf) norma_minf = 0

Bo

rr

ad o

r,j

ua

n. ji m en ez @
x

Norma , el menor elemento del vector en valor absoluto, = min {|xi |}

.u cm .es
1 p

186 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL En general, una norma se dene como una funci on de Rn R, que cumple, x 0, x = 0 x = 0 x+y x + y x = || x , R Llamaremos vectores unitarios u, a aquellos para los que se cumple que u = 1. Dos vectores a y b son ortogonales si cumplen que su producto escalar es nulo, aT b = 0 ab. Si adem as ambos vectores tienen m odulo unidad, se dice entonces que los vectores son ortonormales. Desde el punto de vista de su representaci on geom etrica, dos vectores ortogonales, forman entre s un angulo recto. Traza de una matriz. La traza de una matriz cuadrada , se dene como la suma de los elementos que ocupan su diagonal principal,
n

1 T r 2 0

La traza de la suma de dos matrices cuadradas A y B del mismo orden, coincide con la suma de las trazas de A y B , tr(A + B ) = tr(A) + tr(B ) Dada una matriz A de dimensi on m n y una matriz B de dimensi on n m, se cumple que, tr(AB ) = tr(BA)

En Matlab, puede obtenerse directamente el valor de la traza de una matriz, mediante el comando trace, >> A=[1 3 4 3 5 2 2 -1 -2] A = 1 3 3 5 2 -1 >> t=trace(A) t = 4

Bo

Determinante de una matriz. El determinante de una matrz A, se representa habitualmente como |A| o, en ocasiones como det(A). Para poder denir el determinate de una matriz, necesitamos antes introducir una serie de conceptos previos. En primer lugar, si consideramos un escalar como una matriz de un solo elemento, el determinante ser a prec samente el valor de ese u nico elemento, A = a11 |A| = a11

rr

ad o

r,j

4 2 -2

ua

n. ji m en ez @
i=1

T r(A) =

aii

4 2 3

4 2 = 1 2 + 6 = 5 6

.u cm .es

5.2. OPERACIONES MATRICIALES

187

Se denomina menor complementario o simplemente menor, Mij del elemento aij de una matriz A, a la matriz que resulta de eliminar de la matriz A la la i y la columna j a las que pertenece el elemento aij . Por ejemplo, 1 A = 3 0 M32 = 0 2 6 1 3 2 3 , M23 = 5 2 , M33 = 3 1 0 1 3 0 6 0 2

Se denomina cofactor Cij de un elemento aij de una matriz A, a partir del determinante del menor complementario del elemento aij como, Cij = (1)i+j |Mij |

o alternativamente,

ad o

En el primer caso, se dice que se ha desarrollado el determinante a lo largo de la la i. En el segundo caso, se dice que es ha desarrollo el determinante a lo largo de la columna j . La f ormula de Laplace, obtiene el determinante de una matriz de orden n n a partir del c alculo de los determinantes de los menores complementarios de los elementos de una la; n matrices de orden (n 1) (n 1). A su vez, podr amos calcular el determinante de cada menor complementario, aplicando la formula de Laplace y as sucesivamente hasta llegar a matrices de orden 2 2. Para una matriz 2 2, si desarrollamos por la primera la obtenemos su determinante como,

r,j

ua

rr

Bo

y si desarrollamos por la segunda columna,

n. ji m en ez @
n

Podemos ahora denir el determinate de una matriz A cuadrada de orden n, empleando la f ormula de Laplace,

| A| =

aij Cij

j =1

| A| =

aij Cij

i=1

A= |A| =

a11 a21
2

a12 a22

a1j C1j = a11 C11 + a12 C12


j =1

= a11 (1)1+1 |M11 | + a12 (1)1+2 |M12 | = a11 a22 + a12 a21

.u cm .es

188 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

A= | A| =

a11 a21
2

a12 a22

j =1

= a12 (1)1+2 |M12 | + a22 (1)2+2 |M22 | = a12 a21 + a22 a12

Para una matriz de dimensi on arbitraria n n, el determinante se obtiene aplicando recursivamente la f ormula de Laplace,
n n

| A| =
j =1

aij Cij =
j =1 n1

Mij . . .

(n1)(n1)

11 = (1)s+t mst Mst

Asi, por ejemplo, podemos calcular el determinante de la matriz, 1 0 2 A = 3 2 3 0 6 5 desarroll andolo por los elementos de la primera columna, como,

ua

=1 (1)2 [(2) 5 6 3] + 3 (1)3 [0 5 6 (2)] + 0 (1)4 [0 3 (2) (2)] = 64 Podemos programar en Matlab una funci on recurrente que calcule el determinante de una matriz de rango n n. (El m etodo no es especialmente eciente pero, pero ilustra el uso de funciones recursivas. function d=determinante(M) %este programa, calcula el determinante de una matriz empleando la formula %de Laplace. La funci on es recursiva, (se llama a si misma sucesivamente %para calcular los cofactores necesarios). Desarrolla siempre por los %elementos de la primera columna. (Es un prodigio de ineficiencia numerica, %pero permite manejar bucles y funciones recursivas, asi que supongo que %puede ser util para los que empiezan a programar). %un posible ejercicio para ver lo malo que es el m etodo, consiste ir %aumentando la dimension de la matriz y comparar lo que lo tarde en %calcular el determinante con lo que tarda la funci on de Matlab det...

Bo

rr

ad o

r,j

|A| =1 (1)2

2 6

0 3 + 3 (1)3 5 6

n. ji m en ez @
n1

aij (1)i+j Mij

(n1)(n1)

mlk Clk =

mlk (1)l+k Mlk

(n2)(n2)

k=1

k=1

0 2 + 0 (1)4 2 5

2 3

.u cm .es

ai2 Ci2 = a12 C12 + a22 C22

5.2. OPERACIONES MATRICIALES

189

En Matlab, el determinante de una matriz se calcula directamente empleando la funci on det. As , para calcular el determinante de la matriz A del ejemplo anterior, >> A=[1 0 -2; 3 -2 3; 0 6 5] A = 1 0 3 -2 0 6 >> da=det(A) da = -64 -2 3 5

ad o

Entre las propiedades de los determinantes, destacaremos las siguientes,

1. El determinante del producto de un escalar a por una matriz A de dimensi on n n cumple, |a A| = an |A|

Bo

rr

2. El determinante de una matriz es igual al de su traspuesta, |A| = AT 3. El determinante del producto de dos matrices es igual al producto de los determinantes, |Ann Bnn | = |Ann | |Bnn | Una matriz es singular si su determinante es cero.

r,j

ua

n. ji m en ez @

%primero comprobamos que la matriz suministrada es cuadrada: d=0; [a,b]=size(M); if a~=b disp(la matriz no es cuadrada, Campe on) d=[]; else for i=1:a if a==1 d=M; else %Elimminamos la fila y columna que toque N=M([1:i-1 i+1:a],2:b); %A~ nadimos el calculo correspondiente al cofactor d=(-1)^(i+1)*M(i,1)*determinante(N)+d; %pause end end end

.u cm .es

190 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL El rango de una matriz se dene como el tama no de la submatriz m as grande dentro de A, cuyo determinante es distinto de cero. As por ejemplo la matriz, 1 2 3 A = 4 5 6 |A| = 0 7 8 9 Es una matriz singular y su rango es dos, 1 4 2 = 3 = 0 r(A) = 2 5

Para una matriz no singular, su rango coincide con su orden. En Matlab se puede estimar el rango de una matriz mediante el comando rank, >> A=[1 2 3 4 5 6 7 8 9] A = 1 2 4 5 7 8 >> r=rank(A) r = 2 Inversi on. 3 6 9

Dada una matriz cuadrada no singular A existe una u nica matriz A1 que cumple,
1 Ann A nn = Inn

ua

La matriz A1 recibe el nombre de matriz inversa de A, y puede calcularse a partir de A como, A 1 = 1 [adj (A)]T | A|

Bo

function B=inversa(A) %este programa calcula la inversa de una %t pica: A^(-1)=[adj(A)]/det(A) %Se ha includo al final del programa una %calcular determinantes %Todo el programa es MUY INEFICIENTE. El %las estructuras basicas de programacion %llamadas a funciones en Matlab etc.

rr

Donde adj (A) es la matriz adjunta de A, que se obtiene sustituyendo cada elemento aij de A, por su cofactor Cij . A continuaci on incluimos el c odigo en Matlab de una funci on inversa que calcula la inversa de una matriz. La funci on inversa llama a su vez a la funci on determinante descrita m as arriba. LO ideal es crear un chero inversa.m que incluya las dos funciones una detr as de la otra tal y como aparecen escritas a continuaci on. De este modo, si llamamos desde el workspace de Matlab a la funci on inversa, esta encuentra siempre el c odigo de deteminante ya que est a contenido en el mimo chero.

ad o

r,j

n. ji m en ez @

matriz a partir de definici on funcion (determinante) para nico interes de esto es ense~ u nar que funcionan, y como se majenan las

.u cm .es

5.2. OPERACIONES MATRICIALES

191

end end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Aqu incluimos la funcion determinante, as la funcion inversa, no tiene %que ir a buscarla a ningun sitio ya que esta incluida en su mismo %fichero %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function d=determinante(M) %este programa, calcula el determinante de una matriz empleando la formula %de Laplace. La funci on es recursiva, (se llama a si misma sucesivamente %para calcular los cofactores necesarios). Desarrolla siempre por los %elementos de la primera columna. (Es un prodigio de ineficiencia numerica, %pero permite manejar bucles y funciones recursivas, asi que supongo que %puede ser util para los que empiezan a programar). %un posible ejercicio para ver lo malo que es el m etodo, consiste ir %aumentando la dimension de la matriz y comparar lo que lo tarde en %calcular el determinante con lo que tarda la funci on de Matlab det...

Bo

rr

ad o

r,j

%Calculamos el cofactor de cada t emino de A mediante un doble bucle. for i=1:a for j=1:b %Construimos el menor correspondinste al elemento (i,j) m=A([1:i-1 i+1:a],[1:j-1 j+1:b]) %calculamos el cofactor llamando a la funci on determinante %lo ponemos ya en la posici on que corresponderia a la matriz %transpuesta de la adjunta. B(j,i)=(-1)^(i+j)*determinante(m) end end %Terminamos la operacion dividiendo por el determinante de A B=B/dA end

ua

n. ji m en ez @

%Lo primero que hacemos es comprobar si la matriz es cuadrada %primero comprobamos que la matriz suministrada es cuadrada: [a,b]=size(A); if a~=b disp(la matriz no es cuadrada, Campe on) B=[]; else %calculamos el determinante de A, si es cero hemos terminado dA=determinante(A) if dA==0 %deber amos condicionar en lugar de comparar con cero, los errores %de redondeo pueden matarnos.... Si el determinante es proximo a %cero disp(la matriz es singular, la pobre) B=[] else

.u cm .es

192 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

Como siempre, Matlab incluye una funci on propia inv para calcular la inversa de una matriz, A = 1 0 -2 3 -2 3 0 6 5 >> AI=inv(A) AI = 0.4375 0.1875 0.2344 -0.0781 -0.2813 0.0938 >> A*AI ans = 1.0000 0 0 1.0000 -0.0000 0.0000

ad o

>> AI=A^-1 AI = 0.4375 0.2344 -0.2813

Bo

rr

Alternativamente, podemos calcular la inversa, directamente como A^ -1,

0.1875 -0.0781 0.0938

Algunas propiedades relacionadas con la inversi on de matrices son, 1. Inversa del producto de dos matrices, (A B )1 = B 1 A1

r,j

ua

0.0625 0.1406 0.0313

0 0 1.0000

0.0625 0.1406 0.0313

n. ji m en ez @

%primero comprobamos que la matriz suministrada es cuadrada: d=0; [a,b]=size(M); if a~=b print(la matriz no es cuadrada, Campe on) d=[]; else for i=1:a if a==1 d=M; else %Elimminamos la fila y columna que toque N=M([1:i-1 i+1:a],2:b); %A~ nadimos el calculo correspondiente al cofactor d=(-1)^(i+1)*M(i,1)*determinante(N)+d; %pause end end end end

.u cm .es

5.3. OPERADORES VECTORIALES 2. Determinante de la inversa, A1 = |A|1 3. Una matriz es ortogonal si su inversa coincide con su transpuesta, A 1 = AT

193

5.3.

Operadores vectoriales

En esta secci on vamos a estudiar el efecto de las operaciones matriciales, descritas en la secci on anterior, sobre los vectores. Empecemos por considerar el producto por un escalar a. El efecto fundamental es modicar el m odulo del vector, a1 a1 a2 = a2 || a|| = a3 a3

Gr acamente, si alpha es un n umero positivo y mayor que la unidad, el resultado del producto ser a un vector m as largo que a con la misma direcci on y sentido. Si por el contrario, es menor que la unidad, el vector resultante ser a m as corto que a. Por u ltimo si se trata de un n umero negativo, a los resultados anteriores se a nade el cambio de sentido con respecto a a. La gura 5.4 muestra gr acamente un ejemplo del producto de un vector por un escalar.

r,j

ad o

a2

ua

rr

Bo

Figura 5.4: efecto del producto de un escalar por un vector

n. ji m en ez @
6 5 4 3 2 1 0 1 2 3 2 1 0 1 a1 2 3 4 a 2*a 0.5*a 1*a

2 2 2 2 2 2 2 2 a2 1 + a2 + a3 = || a1 + a2 + a3 = || ||a||

.u cm .es

194 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL Combinaci on lineal. Combinando la suma de vectores, con el producto por un escalar, podemos generar nuevos vectores, a partir de otros, el proceso se conoce como combinaci on lineal, c = a + b + + z

a + b + + z = 0 = = = = 0

La gura 5.5 muestra gr acamente estos dos vectores y algunos de los vectores resultantes de combinarlos lineamente.
3

x2

r,j

ua

ad o

3 3

Bo

Figura 5.5: Representaci on gr aca de los vectores a = (1, 2), b = (1, 1) y algunos vectores, combinaci on lineal de a y b. Si tomamos como ejemplo n = 3, cualquier conjunto de vectores que no est en contenidos en el mismo plano, pueden generar cualquier otro vector de dimensi on 3. Por ejemplo, x1 1 2 1 x2 = 2 + 0 + 1 x3 1 1 1

rr

n. ji m en ez @
a+0.5b 0.5a+b a b a0.5b a0.5b a0.5b 2 1 0 x 1 2 3
1

x1 x2

1 1 + 2 1

Es posible expresar cualquier vector de dimensi on n como una combinaci on lineal de n vectores linealmente independientes. Supongamos n = 2, cualquier par de vectores que no esten alineados, pueden generar todos los vector de dimensi on 2 por ejemplo,

.u cm .es

As el vector c ser a el resultado de una combinaci on lineal de los vectores a, b z . Dado un conjunto de vectores, se dice que son linealmente independientes entre s , si no es posible poner a unos como combinaci on lineal de otros,

5.3. OPERADORES VECTORIALES

195

La gura 5.6 muestra gr acamente estos tres vectores y el vector resultante de su combinaci on lineal, con = 1, = 0,5 y = 1. Es f acil ver a partir de la gura que cualquier otro vector de dimensi on 3 que queramos construir puede obtenerse a partir de los vectores a, b y c.

a+0.5b+c c a

1 0.5 0 0.5 1 2

n. ji m en ez @
b 1 1.5 1 0.5 1.5 0 0.5 1 2 x2

x3

Figura 5.6: Representaci on gr aca de los vectores a = (1, 2, 1), b = (2, 0, 1), c = (1, 1, 1) y del vector a b + c.

Bo

rr

Espacio vectorial y bases del espacio vectorial. El conjunto de los vectores de dimensi on n (matrices de orden n 1), junto con la suma vectorial y el producto por un escalar, constituye un espacio vectorial de dimensi on n. Como acabamos de ver, es posible obtener cualquier vector de dicho espacio vectorial a partir de n vectores linealmente independientes del mismo. Un conjunto de n vectores de un espacio vectorial de dimens on n recibe el nombre de base del espacio vectorial. En principio es posible encontrar innitas bases distintas para un espacio vectorial de dimensi on n. Hay algunas particularmente interesantes,

Bases ortogonales. Una base ortogonal es aquella en que todos sus vectores son ortogonales entre s , es decir cumple que su producto escalar es bi bj = 0, i = j . Donde bi representa el i- esimo vector de la base, B = b1 , b2 , , bn .

Bases ortonormales. Una base ortonormal, es una base ortogonal en la que, adem as, los vectores de la base tienen m odulo 1. Es decir, bi bj = 0, i = j y bi bj = 1, i = j . Un caso

ad o

r,j

ua

s
1 0.5 0 0.5 x1

.u cm .es

196 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL particularmente u til de base ortonormal es la base can onica, formada por los vectores, 0 0 0 1 0 0 1 0 . n . . , c = C = c1 = 0 , c2 = 0 , cn1 = . . . . . 0 1 . . . . 1 0 0 0

Podemos considerar las componentes de cualquier vector como los coecientes de la combinaci on lineal de la base can onica que lo representa, 0 0 0 1 a1 0 0 1 0 a2 . . 0 0 = a1 . + a + + a + a a= . n n 1 2 . . . . an1 0 1 . . . . an 1 0 0 0

Por extensi on, podemos generalizar este resultado a cualquier otra base, es decir podemos agrupar en un vector los coecientes de la combinaci on lineal de los vectores de la base que lo generan. Poe ejemplo, si construimos, para los vectores de dimensi on 3 la base, 1 1 1 B = 2 , 0 , 1 1 2 0 Podemos entonces representar un vector en la base B como,

Bo

La gura 5.7, muestra gr acamente la relaci on entre los vectores de la base can onica C , los vectores de la base B , y el vector a, cuyas componentes se han representado en ambas bases. Podemos aprovechar el producto de matrices para obtener las componentes en la base can onica C de un vector representado en una base cualquiera B . Si agrupamos los vectores de la base B , en una matriz B ,

rr

Tendr a en la base can onica las componentes, 1,125 1 1 1 1,5 aB = 0,375 a = 1,125 2 + 0,375 0 + 0,75 1 = 1,5 0,75 0 2 1 1,5

ad o

Donde estamos empleando el super ndice B , para indicar que las componentes del vector a est an denidas con respecto a la base B . As por ejemplo e vector, 1,125 aB = 0,375 0,75

r,j

ua

1 1 1 2 + 0 + 1 aB = 1 2 0

n. ji m en ez @

.u cm .es

5.3. OPERADORES VECTORIALES

197

2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 1 0.5 0 a3B=0.75 a2B=0.375 a z b=[1;1;1] c=[0;0;1] a3B=1.5

n. ji m en ez @
c=[1;0;0] c=[0;1;0] a2C=1.5 a1C=1.5 b=[1;2;0] 1 a1B=1.125 1 1.5 2 2.5 1.5 y

s
1 0.5 0 0.5 x

0.5

Bo

rr

b11 b11 b12 b1n b21 b22 b2n b21 . B = b1 = b31 , b2 = b32 , bn = . B= . b31 . . . . . . . b(n1)n . . bn1 bn2 bnn bn1

r,j

ua

Figura 5.7: Representaci on gr aca del vector a, en las base can onica C y en la base B

ad o

Supongamos que tenemos un vector a cuyas componentes en la base B son, B a1 aB 2 aB = . . . aB n

Para obtener las componentes en la base can onica, basta entonces multiplicar la matriz B , por el vector aB . As en el ejemplo que acabamos de ver,

.u cm .es
b12 b22 b32 . . . bn 2 b(n1)n bnn b1n b2n . . .

b=[1;0;2]

base B base B base B base cannica base cannica base cannica componente de a componente de a componente de a componente de a componente de a componente de a Vector a

198 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

1 a = B aB a = 2 0

1 0 2

1 1,125 1,5 1 0,375 = 1,5 1 0,75 1,5

1 a = B1 aB1 aB1 = B1 a 1 a = B2 aB2 aB2 = B2 a

Y sustituyendo obtenemos,
1 aB1 = B1 B2 aB2

El siguiente c odigo permite cambiar de base un vector, representa gr acamente tanto el vector como las bases antigua y nueva. function aB2=cambia_vb(aB1,B1,B2) %este programa cabia de base un vector de dimensi on 3 y lo representa en %relaci on con las bases antigua y nueva. %variables de entrada: %aB1, componentes del vector en la base 1 %B1 base representada como una matriz, (cada columna contiene un vector de %la base) En la que est a representado el vector aB1 %B2, base representada como una matriz, (cada columna contiene un vector de %la base) en la que se quiere representar el vector aB1 %Si solo se incluye un vector y una base, el programa asume que la segunda %base es la canonica B2=[1 0 0;0 1 0; 0 0 1] %variables de salida: %aB2, Componentes del vector aB1 en la nueva base B2. %la funci on hace uso de una funci on auxiliar (pintavec) incluida al final %del fichero para dibujar los vectores. if nargin==2 %asumimos que queremos cambiar el vector de B1 a la base canonica %Es B1 una base sensanta? if det(B1)<=eps error(los vectores de la base no son l. independientes) end aB2=B1*aB1; B2=eye(3); %creamos la base para luego pintarla... elseif nargin==3 %cambio de base B1 a B2 if (det(B1)<=eps)||(det(B2)<=eps)

Bo

rr

ad o

r,j

ua

n. ji m en ez @
1 aB2 = B2 B1 aB1

.u cm .es

Por u ltimo, una podemos combinar el producto de matrices y la matriz inversa, para obtener las componentes de un vector en una base cualquiera a partir de sus componentes en otra base. Supongamos que tenemos dos bases B1 y B2 y un vector a. Podemos obtener las componentes de a en la base can onica, a partir de las componentes en la baee B1 como, a = B1 aB1 y a partir de sus componentes en la base B2 como a = B2 aB2 . Haciendo uso de la matriz inversa,

5.3. OPERADORES VECTORIALES

199

error(los vectores de al menos una de las bases no son l. independientes) end %invertimos la base nueva y multiplicamos por la antigua y por el %vector para obtener las componentes del vector en la base nueva. aB2=inv(B2)*B1*aB1; error(el numero de variables de entrada es menor de dos o mayor de tres) end %Dibujo de los vectores con la funci on pintavec.... pintavec(B1,r) %vectores de la base original xlabel(x) ylabel(y) zlabel(z) grid on pintavec(B2,b) %vectores de la base nueva for i=1:3 pintavec(aB1(i)*B1(:,i),k) %componentes de aB1 pintavec(aB2(i)*B2(:,i),k) %componentes de aB2 end aBc=B1*aB1; %representacion del vector en la base can onica pintavec(aBc,g) %vector representado

Bo

function pintavec(a,par) %funci on auxiliar para pintar vectores... con origen en el origen de %coordenadas (0,0,0). %la variable a puede ser un vector o una matriz. y par, es una cadena que contiene los %t picos par ametros(color, tipo de l neaetc). El programa considera que %los vectores est an siempre definidos como vectores columnas... d=size(a,2); %miramos cuantas columnas tiene a, cada columna representar a un %vector distinto if nargin==2 for i=1:d quiver3(0,0,0,a(1,i),a(2,i),a(3,i),0,par) hold on end else for i=1:d quiver3(0,0,0,a(1,i),a(2,i),a(3,i),0) end end

rr

Operadores lineales. A partir de los visto en las secciones anteriores, sabemos que el producto de una matriz de A de orden n n multiplicada por un vector b de dimension n da como resultado un nuevo vector c = A b de dimensi on n. Podemos considerar cada matriz n n como un operador

ad o

r,j

ua

n. ji m en ez @

.u cm .es

else

200 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL lineal, que transforma unos vectores en otros. Decimos que se trata de un operador lineal porque las componentes del vector resultante, est an relacionadas linealmente con las del vector original, por ejemplo para n = 3, y1 a11 a12 a13 x1 y1 = a11 x1 + a12 x2 + a13 x3 y2 = a21 a22 a23 x2 y2 = a21 x1 + a22 x2 + a23 x3 y3 a31 a32 a33 x3 y3 = a31 x1 + a32 x2 + a33 x3

Entre los operadores lineales, es posible destacar aquellos que producen transformaciones geom etricas sencillas. Veamos algunos ejemplos para vectores bidimensionales, 1. Dilataci on: aumenta el m odulo de un vector en un factor > 1. Contracci on: disminuye el m odulo de un vector en un factor 0 < < 1. En ambos casos, se conserva la direcci on y el sentido del vector original. R= 0 0 Ra= 0 0 a 1 a2 =

2. Reexi on de un vector respecto al eje x, conservando su m odulo, Rx = 1 0 0 1 Rx a = 1 0 0 a 1 1 a2

3. Reexi on de un vector respecto al eje y, conservando su m odulo, Ry = 1 0 0 1 Ry a = 1 0 0 a 1 1 a2

ad o

5. Rotaci on en torno al origen un angulo , R = cos() sin() sin() cos() R a = cos() sin() a 1 sin() cos() a2 = a1 cos() a2 sin() a1 sin() + a2 cos()

Bo

La gura 5.8 muestra los vectores resultantes de aplicar las transformaciones lineales que acabamos de describir al vector, a = 1 2 ,

Norma de una matriz . La norma de una matriz se puede denir a partir del efecto que produce al actuar, como un operador lineal, sobre un vector. En este caso, se les llama normas inducidas. Para una matriz A de orden m n, y(m) = A(mn) x(n) , La norma inducida de A se dene en funci on de las normas de los vectoresx de su dominio y de las normas de los vectores y de su rango como, Ax y = m ax A = m ax x=0 x=0 x x

rr

r,j

Ser a equivalente a aplicar una reexi on respecto al eje x y luego respecto al eje y o vicerversa, R = Rx Ry = Ry Rx .

ua

4. Reexi on respecto al origen: Invierte el sentido de un vector, conservando su m odulo y direcci on, 1 0 1 0 a a1 R= Ra= 1 = 0 1 0 1 a2 a2

n. ji m en ez @
= =

s
a1 a2 a1 a2 a1 a2

.u cm .es

5.3. OPERADORES VECTORIALES

201

2.5 D*a, =1.5 R*a, =/6 1.5 R*a, =/3 1 Ry*a a=[1;2]

0.5

D*a, =0.5

0.5 R*a 1 Rx*a

1.5

2 3

n. ji m en ez @
2 1 0 1 x

Figura 5.8: Transformaciones lineales del vector a = [1; 2]. D, dilataci on/contracci on en un factor 1,5/0,5. Rx , reexi on respecto al eje x. Ry , reexion respecto al eje y. R rotaciones respecto al origen para angulos = /6 y = /3 Se puede interpretar como el factor m aximo con que el que la matriz A puede alargar un vector cualquiera. Es posible denir la norma inducida en funci on de los vectores unitarios del dominio,

ua

A = m ax
x=0

Junto a la norma inducida que acabamos de ver, se denen las siguientes normas,

ad o

1. Norma 1: Se suman los elementos de cada columna de la matriz, y se toma coma norma el valor m aximo de dichas sumas,
m

r,j

Ax x = m ax A x=0 x x

= m ax Ax
x =1

rr

Am,n

= m ax
j i=1

aij

Bo

2. Norma : Se suman los elementos de cada la y se toma como norma el valor m aximo de dichas sumas.
m

Am,n

= m ax
i j =1

aij

3. Norma 2: Se dene como el mayor de los valores singulares de una matriz. (Ver secci on 5.5.5). Am,n
2

= 11

s
2 3

.u cm .es

202 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL 4. Norma de Frobenius. Se dene como la ra z cuadrada de la suma de los cuadrados de todos los elementos de la matriz,
m m

Am,n

=
i=1 j =1

a2 ij

Que tambi en puede expresarse de forma mas directa como, Am,n


F

tr(AT A)

Formas cuadr aticas. Se denen como forma cuadr atica a la siguiente operaci on entre una matriz cuadrada A de orden n n y un vector b de dimensi on n,

ad o

r,j

>> A=[1 3 4 5 2 5 6 -3 1 0 4 3] A = 1 3 4 5 2 5 6 -3 1 0 4 3 >> n1=norm(A,1) n1 = 14 >> n2=norm(A,2) n2 = 1.022217214669622e+01 >> ninf=norm(A,inf) ninf = 16 >> nfro=norm(A,fro) nfro = 1.228820572744451e+01

rr

El resultado es un 1 A = 2 3

escalar. As por ejemplo, 2 1 1 0 2 , b = 2 1 2 2 3

Bo

ua

Para dimensi on n = 2, = b1 b2 a11 a21 a12 a22 a1 a2


2 x3 = a11 x2 1 + (a12 + a21 )x1 x2 + a22 x2

n. ji m en ez @
= bT A b, R 2 1 3 2 3 2 0 2 1 1 2 2 = 21 2 3

En Matlab, es posible calcular las distintas normas de una matriz, de modo an alogo a como se calculan para el caso de vectores, mediante el comando norm(A,p). Donde A, es ahora un a matriz y p especica el tipo de norma que se quiere calcular. En el caso de una matriz, el par ametro p solo puede tomar los valores, 1 (norma 1), 2 norma 2), inf (norma ), y fro (norma de frobenius. El siguiente ejemplo muestra el c alculo de las normas 1, 2, inf ty y de Frobenius de la misma matriz.

.u cm .es

5.3. OPERADORES VECTORIALES

203

a11>0. a22>0

a11<0, a22>0

2 1.5 x3 x3 1 0.5 0 1 1 0 x2 1 1 x1 0

1 0.5 0 0.5 1 1 0 x2 1

a11>0, a22<0

1 0.5 x3 0 0.5 1 1 0 x2

n. ji m en ez @
0 0.5 1 x3 1.5 2 1 1 0 0 1 x1 x2 1

s
a11<0, a22<0 1 0 1 x1

rr

ad o

Lo que obtenemos, dependiendo de los signos de a1 1 y a1 2, es la ecuaci on de un paraboloide o un hiperboloide. En la gura 5.9 Se muestra un ejemplo, Veamos brevemente, algunas propiedades relacionadas con las formas cuadr aticas, 1. Una matriz A de orden n n se dice que es denida positiva si da lugar a una forma cuadr atica que es siempre mayor que cero para cualquier vector no nulo, xT A x > 0, x = 0

Bo

2. Una matriz sim etrica es denida positiva si todos sus valores propios (ver seccion 5.5.3) son positivos. 3. Una matriz no sim etrica A es denida positiva si su parte sim etrica As = (A + AT )/2 lo es. x As > 0, x = 0 x A > 0, x = 0

r,j

ua

Figura 5.9: Formas cuadraticas asociadas a las cuatro matrices diagonales: |a11 | = |a22 | = 1, a12 = a21 = 0

.u cm .es
1 0 x1

204 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

5.4.

Tipos de matrices empleados frecuentemente

Denimos a continuaci on algunos tipos de matrices frecuentemente empleados en algebra, algunos ya han sido introducidos en secciones anteriores. Los reunimos todos aqu para facilitar su consulta 1. Matriz ortogonal: Una matriz Ann es ortogonal cuando su inversa coincide con su traspuesta. AT = A 1 ejemplo, 1/3 A = 2/3 2/3 2/3 2/3 1/3 2/3 1 1/3 A AT = AT A = 0 2/3 0

ejemplo,

ua

3. Matriz Diagonal: Una matriz A es diagonal si solon son distintos de ceros los elementos de su diagonal principal, a11 0 0 0 a22 0 . aij = 0, i = j . .. . . . 0 . . 0 0 ann

ad o

4. Matriz triangular superior: Una matriz es triangular superior cuando todos los elementos situados por debajo de la diagonal son cero. Es extrictamente diagonal superior si adem as los de elementos de la diagonal tambi en son cero, T RS aij = 0, i j ET RS aij = 0, i > j

Bo

rr

ejemplos, 1 T RS = 0 0 0 ET RS = 0 0 3 2 0 3 0 0 7 1 4 7 1 0

r,j

n. ji m en ez @
A = AT aij = aji 2 4 0 1 A = 2 3 3 0 5

2. Matriz sim etrica: Una matriz Ann es sim etrica cuando es igual que su traspuesta,

0 1 0

.u cm .es
0 0 1

DE MATRICES 5.5. FACTORIZACION

205

5. Matriz triangular inferior: Una matriz es triangular inferior si todos los elementos pro encima de su diagonal son cero. Es extrictamente triangular inferior si adem as los elementos de su diagonal son tambi en cero, T RS aij = 0, i j ET RS aij = 0, i < j ejemplos, 1 T RS = 3 7 0 ET RS = 3 7 0 2 1 0 0 4 0 0 0 0 1 0

si,

Entonces la matriz A es semidenida positiva.

7. Una matriz es Diagonal dominante si cada uno de los elementos de la diagonal en valor absoluto es mayor que la suma de los valores absolutos de los elementos de la a la que pertenece. |aii | > |aij |, i

ejemplo,

5.5.

Bo

La factorizaci on de matrices, consiste en la descomposici on de una matriz en el producto de dos o m as matrices. Las matrices resultantes de la factorizaci on se eligen de modo que simpliquen, o hagan m as robustas numericamente determinadas operaciones matriciales: C alculos de determinantes, inversas, etc. A continuaci on se describen las m as comunes.

rr

5.5.1.

Consiste en factorizar una matriz como el producto de una matriz triangular inferior L por una matriz triangular superior U , A = L U . Por ejemplo, 3 4 2 1 0 0 3 4 2 2 0 1 = 2 /3 1 0 0 8 /3 1 /3 3 3 2 1 1 3 /4 1 0 0 /4

ad o

Factorizaci on de matrices

Factorizacion LU

r,j

ua

n. ji m en ez @
xT A x 0, x = 0
j =i

6. Matriz denida Positiva. Una Matriz Ann es denida positiva si dado un vector x no nulo cumple, xT A x > 0, x = 0

10 2 3 10 > 2 + 3 5>2+1 A = 2 5 1 4 2 8 8>4+2

.u cm .es

206 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL Una aplicaci on inmediata, es el calculo del determinante. Puesto que el determinante de una matriz triangular, es directamente el producto de los elementos de la diagonal. En el ejemplo anterior, 3 8 |A| = 6 |L| |U | = 1 1 1 3 ( ) = 6 ( ) 3 4

Uno de los m etodos m as conocidos para calcular la factorizaci on LU de una matriz, se basa en el m etodo conocido como eliminaci on gausiana. La idea es convertir en ceros los elementos situados por debajo de la diagonal de la matriz. Para ello, se sustituyen progresivamente las las de la matriz, exceptuando la primera, por combinaciones formadas con la la que se sustituye y la la anterior. ve amos en qu e consiste con un ejemplo. Supongamos que tenemos la siguiente matriz de orden 4 4, 3 2 A= 3 5 4 0 2 2 2 1 1 3 5 2 8 2

Si sustitumos la segunda la por el resultado de restarle la primera multiplicada por 2 y dividida por 3 obtendr amos la matriz, 3 4 2 2 0 1 A= 3 2 1 5 2 3 5 3 4 0 2,6 2 2 [2 0 1 2] [3 4 2 5] U1 = 3 8 2 3 2 5 2 2 0,33 1 3 5 5,33 8 2

De modo an alogo, si sustituimos ahora la tercera la por el resultado de restarle la primera multiplicada por 3 y dividida 3, 3 0 U1 = 3 5 4 2,6 2 2 2 5 3 0 3 0,33 5,33 [3 2 1 8] [3 4 2 5] U1 = 0 1 8 3 3 2 5

ua

n. ji m en ez @

s
4 2,6 2 2 2 0,33 1 3 5 5,33 3 2 4 2,6 2 4, 66 2 5 0,33 5,33 1 3 0,33 6,33

Por u ltimo si sustituimos la u ltima la por el resultado de restarle la primera multiplicada por 5 y dividida por 3, 3 0 U1 = 0 5

rr

ad o

Bo

4 2,6 2 2

2 0,33 1 3

El resultado que hemos obtenido, tras realizar esta transformaci on , es una nueva matriz U en la que todos los elementos de su primera columna, por debajo de la diagonal, son ceros. Podemos proceder de modo an alogo para eliminar ahora los elementos de la segunda columna situados por debajo de la diagonal. Para ellos sustitimos la tercera la por la diferencia entre ella y las segunda la multiplicada por 2 y dividida por 2,6.

r,j

5 3 5,33 [5 2 3 2] 5 [3 4 2 5] U1 = 0 0 3 3 2 0

.u cm .es

DE MATRICES 5.5. FACTORIZACION

207

Y sustituyendo la u ltima la por la diferencia entre ella y la segunda multilicada por 4,66 y dividida por 2,6, 3 0 U2 = 0 0 3 0 U2 = 0 0

De este modo, los elementos de la segunda columna situados debajo de la diagonal, han sido sustituidos por ceros. Un u ltimo paso, nos llevar a hasta una matriz triangular superior; sustituimos la u ltima la por la diferencia entre ella y la tercera la multiplicada por 0,25 y dividida por 0,75, 3 0 U2 = 0 0 3 0 U3 = 0 0 4 2,6 0 0 2 5 0,33 5,33 [0 0 0,25 3] 0,25 [0 0 0,75 7 ] 0,75 7 0,75 0,25 3 2 5 0,33 5,33 =U 0,75 7 0 5,33

Podemos ahora, a partir del ejemplo, deducir un procedimiento general. Para eliminar convertir en 0 el elemento aij situado por debajo de la diagonal principal, i > j : 1. Dividimos los elementos de la la j por el elemento de dicha la que a su vez pertenece a la diagonal, ajj 0/ajj 0/ajj ajj /ajj ajj +1 /ajj

Bo

rr

ad o

2. Multiplicamos el resultado de la operaci on anterior por el elemento aij , aij 0/ajj aij 0/ajj aij ajj /ajj aij ajj +1 /ajj

3. Finalmente, sustituimos la la i de la matriz de partida por la diferencia entre ella y el resultado de la operaci on anterior. 0 0 aij aij +1 aij 0/ajj aij 0/ajj aij ajj /ajj aij ajj +1 /ajj

r,j

ua

4 2,6 0 0

n. ji m en ez @

4 2 5 2,6 0,33 5,33 [0 4,66 0,33 6,33] 4,66 [0 2,6 0,33 5,33 ] 2 1 3 2,6 4, 66 0,33 6,33 4 2 5 2,6 0,33 5,33 0 0,75 7 0 0,25 3

.u cm .es

3 0 U1 = 0 0 3 0 U2 = 0 0

4 2 5 2,6 0,33 5,33 [0 2 1 3] 2 [0 2,6 0,33 5,33 ] 2 1 3 2,6 4, 66 0,33 6,33 4 2 5 2,6 0,33 5,33 0 0,75 7 4,66 0,33 6,33

208 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL Este procedimiento se aplica iterativamente empezando en por el elemento a21 de la matriz y desplaz ando el c omputo hacia abajo, hasta llegar a la u ltima la y hacia la derecha hasta llegar en cada la al elemento anterior a la diagonal. El siguiente c odigo aplica el procedimiento descrito a una matriz de cualquier orden,

ad o

, El producto 1 A da como 3 4 0 2,66 U1 = 0 2 0 4,66

r,j

Hasta ahora, hemos descrito un procedimiento para transformar una matriz cualquiera en una matriz triangular superior. Nuestro objetivo era obtener la descomposici on de un matriz en el producto de dos, una triangular inferior y otra triangular superior. En primer lugar, podemos asociar el procedimiento descrito de eliminaci on gausiana al producto de matrices Volviendo al ejemplo anterior, si construimos la matriz 1 1 0 0 0 2/3 1 0 0 1 = 3/3 0 1 0 5/3 0 0 1

ua

resultado la matriz, 2 5 1 2/3 0,33 5,33 = 1 3 3/3 0,33 6,33 5/3

n. ji m en ez @
0 0 0 3 2 1 0 0 0 1 0 3 0 0 1 5 0 0 0 0 1 0 0 1 5 5,33 7 3

%Obtenemos el n umero de filas de la matriz.. nf=size(A,1); U=A % for j=1:nf-1 %recorro todas la columnas menos la ultima for i=j+1:nf %Recorro las filas desde debajo de la diagonal hasta la ultima %en Matlab tengo la suerte de poder manejar cada fila de un solo %golpe. U(i,:)=U(i,:)-U(j,:)*U(i,j)/U(j,j) end end

rr

De modo an alogo, U2 = 2 U1 1 0 0 1 2 = 0 2/2,66 0 4,66/2,66 3 4 2 0 2,6 0,33 U2 = 0 0 0,75 0 0 0,25

Bo

s
4 0 2 2 2 1 1 3

.u cm .es
5 2 8 2

function U=eligauss(A) %Esta funci on obtiene una matriz triangular superior, a partir de una %matriz dada, aplicando el m etodo de eliminaci on gaussiana. %No realiza piboteo de filas, as que si alg un elemento de la diagonal de A %queda cero o proximo a cero al ir eliminado dar a problemas...

DE MATRICES 5.5. FACTORIZACION Por u ltimo, U = 3 U2 1 0 3 = 0 0 3 0 U = 0 0 0 1 0 0 0 0 1 0,25/0,75 0 0 0 1 5 5,33 7 5,33

209

4 2,66 0 0

2 0,33 0,75 0

n. ji m en ez @
0 . . . 0 . . . 0 . . . 1 0 0 0 . . . 0 1 aj +1,j /ajj aj +2,j /ajj . . . an,j /ajj 0 0 0 1 . . . 0 0 0
U1 1 1 1 1

1 . . . 0 0 j = 0 0 . . .

ad o

r,j

Solo los elementos de la diagonal, que toman el valor 1, y los elementos de la columna j situados por debajo de la diagonal son distintos de cero. A partir de la denici on de las matrices j , podemos obtener una relaci on entre la matriz triangular superior U obtenida al nal del proceso de eliminaci on, y la matriz inicial A de orden 1 n n para ello, en cada paso multiplicamos por tanto por j como por su inversa j ,

ua

A= A=

1 A
U2

1 2

2 1 A
U3

rr

Bo

1 1 1 A = 1 2 3 3 2 1 A . . . U

A=

1 1

1 2

1 3

1 n

n 3 2 1 A

1 Las matrices tienen dos propiedades que las hacen particularmente f aciles de manejar: la j 1 primera es que cumplen que su inversa j puede obtenerse a partir de j , sin m as que cambiar

s
0 . . . 0 0 0 0 . . . 1

De nuevo, podemos generalizar el procedimiento empleado; cada matriz j elimina todos los elementos de la columna n de una matriz A , situados por debajo de la diagonal. La matriz j toma la forma general,

.u cm .es

210 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL de signo los elementos distintos de cero que no pertenecen a la diagonal (Compru ebalo), 1 0 0 0 0 . . . . . . . . . . . . . . . 0 1 0 0 0 0 0 1 0 0 1 j = 0 0 aj +1j /ajj 0 0 0 0 aj +2j /ajj 1 0 . . . . . . . . . . . . . . . 0 0 anj /ajj 0 1

y, en general,

n. ji m en ez @
0 . . . 0 . . . 0 . . . 0 1 aj +1j /ajj aj +2j /ajj . . . anj /ajj 0 0 0 1 . . . anj 1 /aj 1j 1
L U 1 n

1 1 1 1 La segunda propiedad es que el producto L = 1 2 3 n , se puede obtener progresivamente, a la vez que se construye U , sin m as que ir juntando en una u nica matriz L las columnas 1 1 de 1 , 2 , etc que contienen elementos no nulos, en nuestro ejemplo, 1 0 0 0 2/3 1 0 0 L= 3/3 2/2,66 1 0 5/3 4,66/2,66 0,25/0,75 1

s
0 10 1 0
20

an1 /a11

ua

aj 11 /a11 aj 1 /a11 L= aj +11 /a11 aj +11 /a11 . . .

1 . . .

1 ajj 1 /aj 1j 1 aj +1j 1 /aj 1j 1 aj +2j 1 /aj 1j 1 . . .

anj +1 /aj +1j +1

ad o

r,j

Por construcci on, la matriz L es una matriz inferior, Con lo que quedar a completo el c alculo de la factorizaci on LU,

A=

1 1

1 2

1 3

n 3 2 1 A = L U

La factorizaci on que acabamos de describir, puede presentar problemas num ericos dependiendo del c omo sea la matriz que se desea factorizar. El primer problema se produce cuando el el elemento de la diagonal de ujj por el que hay que toca didivir para eliminar los elementos de la columna j situados por debajo de la diagonal es 0. En ese caso el ordenador dar a un error de desbordamiento y no se puede seguir factorizando. El segundo problema surge cuando los elementos de la matriz son dispares en magnitud; las operaciones mat ematicas realizadas durante el proceso de factorizaci on pueden dar lugar a errores de redondeo importantes que hagan que incorrecto el resultado de la factorizaci on. Veamos un ejemplo un tanto extremo,

Bo

rr

L 20

10 1

20

1 1

1 1020

0 1 1 1020

0 10 1 1

1 1

1 1020

.u cm .es
0 . . . 0 0 0 0 . . . 1
U

1 1 1020

DE MATRICES 5.5. FACTORIZACION

211

Como el eps del ordenador es del orden de 1016 , 1 es despreciado frente 1020 . Es decir, (1 1020 ) 1020 , non lo cual el ordenador tendr a una versi on aproximada de U = U U 1020 0 1 1020

= LU

1 1020

0 1020 1 0

1 1020

1020 1

Una manera de paliar los efectos de redondeo, es reordenar las las de la matriz de modo que el elemento ajj por el que se va a dividir los elementos de la la j en el proceso de elimininaci on sea lo mayor posible. Este procedimiento se conoce con el nombre de pivoteo de las. Para el ejemplo que acabamos de examinar, supongamos que cambiamos de orden las dos las de la matriz, 1020 1 1 1 1 1020 1 1

Si recalculamos la factorizaci on LU, para la nueva matriz con la las intercambiadas,


L U L U

1 1020

1 1

1 1020

n. ji m en ez @
0 1 1 1020 0 1 1 1020 1 1 = = U U 1 0 1 1 1 1 = 1 1020 1 1 + 1020

s
1 1020 0 1 1 0 1 1 1020 1020 1 1 + 1020 1 A El resultado es equivalente 1 0 = A13 3

De nuevo, por errores de redondeo el ordenador tendr a una version aproximada de U .

y volvemos a reordenar las las del resultado, Sin embargo si recalculamos el producto L U = LU 1 1020

Bo

rr

La permutaci on de las las de una matriz A de orden nm, se puede denir a partir del producto con las matrices de permutaci on de orden n n. Estas se obtienen permutando directamente las las de la matriz identidad Inn . Si una matriz de permutaciones multiplica a otra matriz por la izquierda, permuta el orden de sus las. Si la multiplica por la derecha. permuta el orden de sus columnas. As por ejemplo, para matrices de orden 3 n, 1 0 0 0 0 1 Inn = 0 1 0 P13 = 0 1 0 0 0 1 1 0 0 Si multiplicamos P13 con cualquier otra matriz A de orden 3 n, a intercambiar en la matriz A la la 1 con la 3. Por ejemplo 0 0 1 1 2 5 3 3 6 2 P13 A = 0 1 0 4 2 3 0 = 4 2 3 1 0 0 3 6 2 1 1 2 5

Volvamos al c alculo de la factorizaci on LU, pero ahora empleando pivoteo de las. Supongamos una matriz A de orden n n

ad o

r,j

ua

0 1 1 0

.u cm .es
1 0 =A

Pero si ahora volvemos a multiplicar L U para recuperar A,

212 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL El primer paso, es buscar el elemento mayor en valor absoluto de la primera columna en intercambia la primera la de la matriz de A, con la la que contiene dicho elemento. Si utilizamos la matriz de permutaci on adecuada, esto puede expresarse como, A P1 A A continuacion eliminamos los elementos de la primera la situados por debajo de la diagonal, A P1 A 1 P1 A

Volvemos a buscar el mayor elemento en valor absoluto para la segunda columna (Solo desde la diagonal hasta el ultimo elemento de la columna). A P 1 A 1 P 1 A P 2 1 P1 A

Eliminamos los elementos de la segunda la situados por debajo de la diagonal,

Si seguimos todo el proceso hasta eliminar los elementos situados por debajo de la diagonal en la la n 1, obtendremos la expresi on de la matriz triangular superior U resultante, n1 Pn1 n2 Pn2 2 P2 1 P1 A = U

Aunque hemos obtenido U , necesitamos una manera de obtener L, ahora no es inmediato como en el caso de la factorizaci on sin pivoteo, no basta con invertir las matrices i ya que tenemos por medio todas las matrices de permutaci on utilizadas. Para obtenerla realizaremos la siguiente transformaci on, n1 Pn1 n2 Pn2 2 P2 1 P1 A = n1 n2 2 1 Pn1 Pn2 P2 P1 A

ad o

Bo

rr

Matem aticamente el c alculo de las matrices i requiere calcular el producto de un gran n umero de matrices. Sin embargo dicho c alculo es equivalente a permutar los elementos de i situados por debajo de la diagonal. As Por ejemplo para,

r,j

n1 = n1
1 n2 = Pn1 n2 Pn 1 1 1 n3 = Pn1 Pn2 n3 Pn 2 Pn 1 . . .

1 1 1 2 = Pn1 Pn2 P3 2 P3 Pn 2 Pn1 1 1 1 1 1 = Pn 1 Pn 2 P3 P2 1 P2 P3 Pn 2 Pn1

ua

Donde las matrices i pueden obtenerse a partir de las matrices i y de las matrices de permutaci on de la manera siguiente,

1 1 1 = Pn1 Pn2 Pk+1 k Pk +1 Pn2 Pn1 . . .

n. ji m en ez @

A P1 A 1 P1 A P2 1 P1 A 2 P2 1 P1 A

.u cm .es

DE MATRICES 5.5. FACTORIZACION

213

1 0 2 = 0 0 1 1 0 2 = P 3 2 P3 0 0 0 1 0 0 0 0 0 1

0 1 2 3

0 0 1 0

1 0 0 , P3 = 0 0 0 0 1 0 1 2 3 0 0 1 0 1 0 0 0 0 0 0 1

0 1 0 0 0 1 0 0

0 0 0 1 0 0 0 1

0 0 1 0 1 0 0 0 = 1 0 0 0

1 0 0 0 1 0 0 0

n. ji m en ez @
L

Pn 1 Pn 2 P2 P1 A =

11 22

1 1 n 2 n1

n1 Pn1 n2 Pn2 2 P2 1 P1 A

Como ejemplo, vamos a volver a calcular la 3 2 A= 3 5

factorizaci on LU de la matriz, 4 2 5 0 1 2 2 1 8 2 3 2

ad o

Bo

rr

Eliminamos ahora los elementos de la primera 1 0 0 0 5 2 U1 2/5 1 0 0 2 0 1 P1 A = 3/5 0 1 0 3 2 3/5 0 0 1 3 4

r,j

Pero empleando ahora pivoteo de las. En primer lugar buscamos el elemento de la primera columna mayor en valor absoluto. En esta caso es el u ltimo elemento de la columna por lo que intercambiamos la primera la con la cuarta, 5 2 3 2 3 4 2 5 0 0 0 1 0 1 0 0 2 0 1 2 2 0 1 2 P1 A = 0 0 1 0 3 2 1 8 = 3 2 1 8 1 0 0 0 5 2 3 2 3 4 2 5

ua

columna situados 3 2 5 0 1 2 = 1 8 0 0 5 0

Para eliminar los elementos de la segunda columna, repetimos los mismos pasos. El elemento mayor de la segunda columna de U1 es ahora 2,8, por tanto intercambiamos entre s la segunda y la cuarta la, 1 0 P2 1 P1 A = 0 0
U1

0 0 0 1

0 0 1 0

0 5 0 1 0 0 0 0

2 0,8 0,8 2,8

3 0,2 0,8 0,2

2 5 0 2,8 = 6,8 0 3,8 0

s
U

Por u ltimo podemos representar el producto de todas las matrices de permutaci on como una sola matriz, Pn1 Pn2 P2 P1 = P . (El producto de matrices de permutaci on entre s , da como resultado una nueva matriz de permutaci on. De esta manera, la factorizaci on LU con pivoteo de las podr amos representarla como P A = L U,

por debajo de la diagonal, 2 3 2 0,8 0,2 2,8 0,8 0,8 6,8 2,8 0,2 3,8

.u cm .es
0 1 3 2 0 0 1 0 0 0 0 1 2 2,8 0,8 0,8 3 0,2 0,8 0,2 2 3,8 6,8 2,8

214 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL A continuaci on, eliminamos los elementos de la segunda columna situados por debajo de la diagonal, 1 0 2 P2 1 P1 A = 0 0
U2

Para eliminar el elemento que queda debajo de la diagonal en la tercera columna, procedemos igual que para las columnas anteriores. Como en este caso, el elemento situado en la diagonal es mayor en valor absoluto no es preciso permutar. (Desde un punto de vista formal, podr amos decir que en este caso la matriz de permutaciones aplicada es la matriz identidad). 1 0 0 0 5 0 1 0 0 0 3 2 P2 1 P1 A = 0 0 1 0 0 0 0 0,14/0,85 1 0 5 2 3 2 0 2,8 0 , 2 3 ,8 = 0 0 0,85 5,71 = U 0 0 0 2,66
U

Como hemos visto, la matriz i las obtenemos a partir de i , permutando los elementos situados por debajo de la diagonal, distintos de cero. En nuestro ejemplo solo hay matriz 1 afectada por una u nica permutaci on P2 , 1 0 0 0 3/5 1 0 0 1 = 3/5 0 1 0 2/5 0 0 1 Para el resto, 2 = 2 y 3 = 3 . Para obtener la matriz L cambiando los signos a los elementos situados por debajo de la diagonal de 1 , 2 y 3 , y los agrupamos en una u nica matriz,

r,j

ua

Por u ltimo debemos multiplicar las matrices de permutaciones para agruparlas en una sola,

rr

ad o

1 3/5 L= 3/5 2/5

Bo

Es trivial comprobar que las matrices obtenidas cumplen 2 P A = L U . El siguiente c odigo calcula la factorizaci on LU de una matriz de orden arbitrario con pivoteo de las.
2 Los valores num erico empleados en el texto, est an redondeados, por tanto dan una soluci on incorrecta. Si se reproducen las operaciones descritas en Matlab el resultado es mucho m as preciso.

n. ji m en ez @
0 1 0,8/2,8 0,8/2,8 0 0 0 0 1 0 0,14/0,85 1 0 1 P = P 2 P1 = 0 0 0 0 0 1 0 0 1 0 1 0 0 0

2 2,8 0 0

3 2 0,2 3,8 0,85 5,71 0,14 1,71

.u cm .es

5 0 0 0 0 1 0 0 0,8/2,8 1 0 0 0 0,8/2,8 0 1

2 2,8 0,8 0,8

3 0,2 0,8 0,2

5 2 0 3,8 = 6,8 0 0 2,8

2 2,8 0 0

3 0,2 0,85 0,14

2 3,8 5,71 1,71

DE MATRICES 5.5. FACTORIZACION function [L,U,P]=lufact(A) %este programa calcula una factorizacionLU, de la matrix A, empleando %el m etodo de eliminacion gaussiana con pivoteo de filas... %L es una matriz triangular inferior, U es una matriz triangular superior y %P es una matriz de permutaciones tal que P*A=L*U %vamos a aprovechar la potencia de Matlab para evitar algunos buques en %los calculos..

215

%primero definimos la matriz de permutaciones como la matriz identidad de %orden igual al n umero de filas de la matriz A, (si no hay pivoteo de filas %la matriz de permutaciones es precisamente la identidad) t=size(A,1); %obtenemos el numero de filas de la matriz A P=eye(t); %Construimos la matriz identidad %Ademas, inicializamos las matrices L y U L=P; U=A;

Bo

rr

% reordenamos las filas de P, L y U de modo que el valor mas grande de % j pase a acupar la diagonal (Esto es equivalente a multiplicar U por %la matriz de permetuciones correspondiente, ir calculado %iterativamente el valor de la matriz de permutaciones P final, y %reordenar las filas ya calculadas de L (aportadas por los valores de %las matrices lambdas anteriores... a lambda_j) Aux=U(j,:); Aux2=P(j,:); Aux3=L(j,1:j-1); %Reordenamos U (Toda la fila) U(j,:)=U(index,:); U(index,:)=Aux; %Reordenamos L (Solo los elementos de la columnas anteriores...situados

ad o

r,j

%iniciamos un bucle para ir recorriendo las columnas (solo tenemos que %recorrer tantas columnas como fila - 1 tenga la matriz A for j=1:t-1 LA=zeros(t); %Matriz auxiliar (Lambda) de cada iteraci on. %Buscamos el elemento mas grande de la columna j maxcol=abs(U(j,j)); index=j; for i=j:t if abs(U(i,j))>maxcol maxcol=abs(U(i,j)); index=i; end end

ua

n. ji m en ez @

.u cm .es

216 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL %por debajo de la diagonal). L(j,1:j-1)=L(index,1:j-1); L(index,1:j-1)=Aux3; %modificamos la matriz de permutaciones P(j,:)=P(index,:); P(index,:)=Aux2;

Desde el punto de vista de la implementaci on, el c odigo anterior simplica el c alculo de la factorizaci on LU, 1. no se calculan la inversa de i . En realidad lo que se hace es ir construyendo iterativamente la matriz L: en cada iteraci on, primero se permutan los elementos de las columnas de la matriz L construida en la iteraci on anterior, y se a naden los elementos de la columna correspondiente. 2. la matriz de permutaci on se va calculando tambi en iterativamente, intercambiando las las de la matriz de permutaci on obtenida en la iteraci on anterior. Matlab posee un comando propio para calcular la factorizaci on LU de una Matriz, [L,U,P]=lu(A). Es importante pedir siempre que devuelva la matriz P, en otro caso, la matriz L devuelta por Matlab no tiene por que ser triangular inferior. El comando lu de Matlab, permite calcular la factorizaci on LU, por otros m etodos distintos a la eliminaci on gaussiana con pivoteo de las. La explicaci on de estos otros m etodos queda fuera del alcance de estos apuntes. Simplemente indicar que la factorizaci on LU de una matriz no es unica es posible encontrar distintos pares L y U que factorizan a la misma matriz A

Bo

Dada una matriz cuadrada, sim etrica y denida positiva, es siempre posible factorizarla como A = L LT . Donde L es una matriz triangular inferior, a11 a12 a1n L11 0 0 L11 L21 Ln1 a12 a22 a2n L21 L22 0 L22 Ln2 0 = . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .

rr

ad o

5.5.2.

Factorizaci on de Cholesky

r,j

a1n

a2n

ua

n. ji m en ez @
Ln1 Ln2 Lnn 0 0
j j 1

%Calculamos una matriz auxiliar con los factores de los elementos %a eliminar. LA(j+1:t,j)=U(j+1:t,j)/U(j,j); %estos elementos son directamente los que %se a~ naden a la matriz L %Modificamos L y U L(j+1:t,j)=U(j+1:t,j)/U(j,j); U=(eye(t)-LA)*U; %la expresi on eye(t)-LA nos permite cambiar de signo los %elementos situados por debajo de la diagonal principal... end

ann

Para obtener la factorizaci on de Cholesky podemos emplear directamente la denici on. As si 2 2 calculamos L LT , obtendr amos a11 = L11 L11 = L2 11 , a22 = L21 L21 + L22 L22 = L21 + L22 etc. Es f acil comprobar que los elementos de la diagonal aii de la matriz A cumplen, aii =
k=1

L2 ki

= Lii +
k=1

L2 ki

.u cm .es
Lnn

DE MATRICES 5.5. FACTORIZACION A partir de esta expresi on podemos despejar Lii ,


j 1

217

Lii =

aii
k=1

L2 ki

Del mismo modo, para los elementos que no pertencen a la diagonal,


j j 1

aij =
k=1

Lik Lkj = Lij Ljj +


k=1

Lik Lkj

A partir de esta expresi on podemos despejar Lii , Lij = aij


j 1 k=1

Lik Lkj

rr

function L=cholesky(A) %hacemos que devuelva la matriz triangular inferior. %Comprobamos que es cuadrada, simetrica, y definida positiva. [a,b]=size(A); if a-b~=0 disp(La matriz no es cuadrada) else %ha resultado cuadrada comprobamos si es simetrica c=A-A; if any(c) disp(LA matriz no es simetrica) else %ha resultado simetrica, comprobamos si es definida positiva auto=eig(A); if any(auto<=0) disp(la matriz no es definida positiva) else %una vez que la matriz cumple las condiciones necesarias, %factorizamos por cholesky

Bo

ad o

r,j

for k=1:a L(k,k)=A(k,k); for i=1:k-1 L(k,k)=L(k,k)-L(k,i)^2; end L(k,k)=sqrt(L(k,k)); for j=k+1:a L(j,k)=A(j,k); for i=1:k-1

ua

n. ji m en ez @

Los elementos de la matriz L, se pueden calcular de las expresiones anteriores iterativamente por columnas: para obtener L11 basta emplear a11 , para obtener los restantes elementos de la primera columna, basta conocer L11 . Conocidad la primera columna de L, se puede calcular L22 y as sucesivamente hasta completar toda la matriz. El siguiente c odigo calcula la factorizacion de Cholesky de una matriz, siempre que cumpla las condiciones requeridas,

Ljj

.u cm .es

218 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL L(j,k)=L(j,k)-L(j,i)*L(k,i); end L(j,k)=L(j,k)/L(k,k); end end end end

Matlab tiene una funci on interna chol, que permite obtener la factorizaci on de Cholesky, Por defecto devuelve una matriz triangular superior U, de modo que la factorizaci on calculada cumple A = U T U . (En realidad se trata tan solo de una forma alternativa de denir la factorizaci on de Cholesky), As por ejemplo, >> A A = 6 3 3 14 4 3 >> U=chol(A) U = 2.4495 0 0 >> R=U*U R = 6.0000 3.0000 4.0000 4 3 5

1.2247 3.5355 0

1.6330 0.2828 1.5011

5.5.3.

rr

Autovectores y autovalores. Dada una matriz A de orden n n, se dene como autovector, o vector propio de dicha matriz al vector x que cumple,

ad o

Si se quiere obtener directamente la matriz L, hay que indicarlo expresamente: L=chol(A,lower). Para obtener la factorizaci on Matlab emplea SOLO la parte triangular superior o la triangular inferior de la matriz A. Supone que A es sim etrica pero NO lo comprueba. Si la matriz no es denida positiva, la funci on chol da un mensaje de error.

Diagonalizaci on

r,j

Bo

Es decir, el efecto de multiplicar la matriz A por el vector x es equivalente a multiplicar el vector x por un n umero que, en general, ser a un n umero complejo. recibe el nombre de autovalor, o valor propio de la matriz A. Asi por ejemplo, 2 0 0 A = 0 2 1 0 0 3

ua

3.0000 14.0000 3.0000

4.0000 3.0000 5.0000

n. ji m en ez @
A x = x, x = 0, C

.u cm .es

end

DE MATRICES 5.5. FACTORIZACION tiene un autovalor = 3 para el vector propio, x = [0, 3, 3]T , 2 0 0 0 0 0 0 2 1 3 = 3 3 = 9 0 0 3 3 3 9

219

El vector propio asociado a un valor propio no es u nico, si x es un vector propio de una matriz A, asociado a un valor propio , Es trivial comprobar que cualquier vector de la forma x, C tambi en es u vector propio asociado a , A x = x A x = x

Donde D es una matriz diagonal formada por los autovalores de A. 1 0 0 0 2 0 . . . . . . 0 0 0 n Esta descomposici on no siempre existe. En general, si dos matrices A y B cumplen, A = X B X 1

Bo

rr

Por tanto en este ejemplo, los autovalores de A ser an 1 = 2, 2 = 2 y 3 = 3. Para estudiar la composici on de la matriz X Reescribimos la expresi on de la relaci on de semajanza de la siguiente manera, A = X D X 1 A X = X D Si consideramos ahora cada columna de la matriz X como un vector, 1 0 0 2 A X = X D A (x1 |x2 | |xn ) = (x1 |x2 | |xn ) . . . . . . 0 0

ad o

se dice de ellas que son similares. A la transformaci on que lleva a convertir B en A se le llama una transformaci on de semejanza. Una matriz es diagonalizable cuando admite una transformaci on de semejanza con una matriz diagonal de autovalores. Volviendo al ejemplo anterior podemos factorizar la matriz A como, 2 0 0 1 0 0 2 0 0 1 0 0 A = 0 2 1 = 0 1 3 0 2 0 0 1 1 0 0 3 0 0 3 0 0 1/3 0 0 3

r,j

ua

n. ji m en ez @

A = X D X 1

En realidad, cada vector propio expande un subspacio E S de Rn . Aplicar la matriz A, a un vector de E S es equivalente a multiplicar el vector por . Cada subespacio asociado a un autovalor recibe el nombre de autosubespacio o subespacio propio. El conjunto de todos los autovalores de una matriz A recibe el nombre de espectro de A y se representa como (A). Una descomposici on en autovalores de una matriz A se dene como.

Es f acil comprobar que si econsideramos el producto de la matriz A, por cada una de las columnas de la matriz X se cumple,

.u cm .es
(5.1) 0 0 0 n

220 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

A x1 = 1 x1 A x2 = 1 x2 . . . A xn = n xn

Lo que nos lleva a que cada columna de la matriz X tiene que ser un autovector de A puesto que cumple, A xi = 1 xi

Donde I es a matriz identidad de dimensi on n n. As por ejemplo para una matriz de dimensi on 2 2, 1 0 0 a 11 1 a21 a12 a22 z a11 a21 a12 = z a22

PA (z ) =det z

=(z a11 ) (z a22 ) a12 a21 = z 2 (a11 + a22 ) z + a11 a22 a12 a21 Los autovalores de una matriz A son las ra ces del polinomio caracter stico de la matriz A, pA () = 0

Bo

rr

Las ra ces de un polinomio pueden ser simples o m ultiples, es decir una mima ra z puede repetirse varias veces. Por tanto, los autovalores de una matriz, pueden tambi en repetirse. Se llama multiplicidad algebraica de un autovalor al n umero de veces que se repite. Adem as las ra ces de un polinomio pueden ser reales o complejas. Para una matriz cuyos elementos son todos reales, si tiene autovalores complejos estos se dan siempre como pares de n umeros complejos conjugados. Es decir si = a + bi es un autovalor entonces = a bi tambi en lo es. Veamos algunos ejemplos: La matriz, 3 2 A= 2 2 Tiene como polinomio caracter stico, PA (z ) = z3 2 2 = z2 z 2 z+2

Igualando el polinomio caracter stico a cero y obteniendo las ra ces de la ecuaci on de segundo grado resultante, obtenemos los autovalores de la matriz A, 2 2 = 0 1 = 2 2 = 1

ad o

r,j

ua

n. ji m en ez @
=

Polinomio caracter stico. El polinomio caracter stico de una matriz A de dimensi on n n, se dene como, PA (z ) = det(zI A)

.u cm .es

DE MATRICES 5.5. FACTORIZACION Un vector propio asociado a 1 = 2 ser a x1 = [2, 1]T , 3 2 2 2 2 1 =2 2 1 = 4 2

221

3 2 La matriz,

2 1 2 2

= 1 1 2

1 2

1 2

B= Tiene como polinomio caracter stico, PB ( z ) = z4 1

4 1

En este caso, hemos obtenido para el polin omio caracter stico una ra z doble, con lo que obtenemos un u nico autovalor = 3 de multiplicidad algebraica 2. La matriz, C= 2 1 1 2

tiene como polinomio carater stico,

Con lo que sus autovalores resultan ser dos n umeros complejos conjugados,

r,j

ua

Para que una matriz A de orden n n sea diagonalizable es preciso que cada autovalor tenga asociado un n umero de autovectores linealmente independientes, igual a su multiplicidad algebr aica. La matriz B del ejemplo mostrado m as arriba tiene tan solo un autovector, x = [1, 1]T asociado a su u nico autovalor de multiplicidad 2. No es posible encontrar otro linealmente independiente; por lo tanto B no es diagonalizable. La matriz, 3 0 1 G = 0 3 0 0 0 1 Tiene un autovalor 1 = 3, de multiplicidad 2, y un autovalor 2 = 1 de multiplicidad 1. Para el autovalor de multiplicidad 2 es posible encontrar dos autovectores linealmente independientes, por ejemplo: x1 = [1, 0, 0]T y x2 = [0, 1, 0]T . Para el segundo autovalor un posible autovector ser a, x3 = [2, 0, 1]T . Es posible por tanto diagonalizar la matriz G,

Bo

rr

ad o

n. ji m en ez @
2 6 + 9 = 0 1 = 3 2 = 3 PC ( z ) = z2 1 1 = z 2 4z + 5 z2 2 4 + 5 = 0 1 = 2 + i 2 = 2 i

procediendo igual que en el caso anterior, obtenemos los autovalores de la matriz B ,

1 = z 2 6z + 9 z2

.u cm .es

y un vector propio asociado a 2 = 1 ser a x2 = [1 2]T ,

222 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

3 G = 0 0

0 3 0

1 1 0 = X D X 1 = 0 1 0

0 1 1

2 3 0 0 1 0

0 3 0

0 1 0 0 1 0

0 1 1

2 0 1

1. La suma de los autovalores de una matriz, coincide con su traza,


n

tr(A) =
i=1

2. El producto de los autovalores de una matriz coincide con su determinante,


n

| A| =
i=1

3. Cuando loa autovectores de una matriz A son ortogonales entre s , entonces la matriz A es diagonalizable ortogonalmente, A = Q D Q1 ; Q1 = QT A = Q A QT Cualquier matriz sim etrica posee autovalores reales y es diagonalizable ortogonalmente. En general, una matriz es diagonalizable ortogonalmente si es normal: A AT = AT A 4. El mayor de los autovalores en valor absoluto, de una matriz A de orden n. recibe el nombre de radio espectral de dicha matriz,
n

Bo

>> A=[1 2 3;2 3 -2;3 0 1] A =

rr

Donde Q es una matriz ortogonal y T es una matriz triangular superior. Los elementos de la diagonal de T son prec samente los autovalores de A. Matlab incluye la funci on eig para calcular los autovectores y autovalores de una matriz. esa funci on admite como variable de entrada una matriz cuadrada de dimensi on arbitraria y devuelve como variable de salida un vector columna con los autovalores de la matriz de entrada,

1 2 3

>> Lambda=eig(A)

ad o

2 3 0

r,j

No vamos a ver ning un algoritmo concreto para diagonalizar matricces. Quiz a el masa utilizado, por su robustez num erica es el basado en la factorizaci on de Schur: cualquier matriz A puede factorizarse como, A = Q T QT

3 -2 1

ua

n. ji m en ez @
(A) = m ax |i |
i=1

.u cm .es

Propiedades asociadas a los autovalores. Damos a continuaci on, sin demostraci on, algunas propiedades de los autovalores de una matriz,

DE MATRICES 5.5. FACTORIZACION

223

Lambda = -2.7016 4.0000 3.7016

Tambi en puede llamarse a la funcion eig con dos variables de salida. En este caso la primera variable de salida es una matriz en la que cada columna representa un autovector de la matriz de entrada normalizado de m odulo 1. La segunda variable de salida es una matriz diagonal cuyos elementos son los autovalores de la matriz de entrada. >> A=[1 2 3;2 3 -2;3 0 1] A = 1 2 3 2 3 0 3 -2 1

>> [X,D]=eig(A) X = -0.6967 0.4425 0.5647 0.7071 0.0000 0.7071

Por u ltimo, Matlab tambi en incluye una funci on para calcular la factorizaci on de Schur. Si lo a aplicamos a la misma matriz A, para la que acabamos de calcular los autovalores, >> [Q,T]=schur(A)

Bo

rr

Q =

ad o

-0.6967 0.4425 0.5647

r,j

-2.7016 0 0

0 4.0000 0

0.6449 0.0415 0.7632

T = -2.7016 -0.6285 -1.2897

ua

D =

n. ji m en ez @
0.6548 -0.2062 0.7271 0 0 3.7016 -0.3142 -0.8958 0.3142

.u cm .es

224 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL 0 0 >> Q*Q 4.0000 0 -1.3934 3.7016

1.0000 0.0000 0.0000

0.0000 1.0000 0.0000

0.0000 0.0000 1.0000

Se observa como los elementos de la diagonal de T son los autovalores de A como la matriz Q es ortogonal.

5.5.4.

Factorizaci on QR

La idea es factorizar una matriz A en el producto de dos matrices; una matriz ortogonal Q y una matriz triangular superior R. A = Q R, Q QT = I

Supongamos que consideramos cada columna de A y cada columna de Q como un vector, A = (a1 |a2 | |an ) , Q = (q1 |q2 | |qn )

Bo

Podemos ahora considerar el producto Q R como combinaciones lineales de las columnas de Q, que dan como resultado las columnas de A, q11 q12 q1n r11 r12 r1n a11 a12 a1n a21 a22 a2n q21 q22 q2n 0 r22 r2n . = . . . . . . . . . . . . . . . . . . . . . . . . . . an1 an2 ann qn1 qn2 qnn 0 0 ann a11 q11 a21 q21 a1 = q1 r11 . = . r11 , . . . . an1 qn1 a12 q11 q12 a22 q21 q22 a2 = q1 r12 + q2 r22 . = . r12 + . r22 . . . . . .

rr

ad o

r,j

ua

an2

. . .

an = q1 r1n + q2 r2n + + rnn

n. ji m en ez @
q n1 qn2 ann q n1 q n2

a1n q11 q12 q1n a2n q21 q22 q2n . = . r1n + . r2n + + . rnn . . . . . . . . qnn

.u cm .es

ans =

DE MATRICES 5.5. FACTORIZACION

225

Para que la matriz Q sea ortogonal, basta hacer que sus columnas, consideradas cada una como un vector, sean ortonormales entre s . Podemos obtener la matriz Q a partir de la matriz A, aplicando a sus columnas alg un m etodo de ortogonalizaci on de vectores. En particular, emplearemos el m etodo conocido como ortogonalizacion de Grand-Schmidt.

a1 = q1 a1 r11 = a1 Supongamos por ejemplo que queremos factorizar 2 3 A = 2 0 1 4 La primera columna de la matriz Q ser a,

y el elemento r11 de la matriz R,

ad o

Para obtener la segunda columna Q, Calculamos en primer lugar la proyecci on de la segunda columna de A, a2 sobre el vector q1 . En general, la proyecci on de un vector a, sobre un vector b se calcula obteniendo el producto escalar de los dos vectores y dividiendo el resultado por el m odulo del vector b. En nuestro casos el vector q1 , sobre el que sa calcula la proyecci on, es unitario, por lo que calcular la proyecci on de a2 sobre q1 se reduce a calcular el producto escalar de los dos vectores,

r,j

ua

rr

Siguiendo con nuestro ejemplo,


T a2 /q1 = q1 a2 = 2/3

Bo

Podemos interpretar la proyecci on del vector a2 sobre el vector q1 como la componente del vector a2 en la direcci on de q1 . Por eso, si restamos al vector a2 su proyecci on sobre q1 multiplicada por q1 el resultado ser a un nuevo vector q2 ortogonal a q1 ,
T v2 = a2 a2 /q1 q1 = a2 (q1 a2 ) q1

n. ji m en ez @
2 2/3 a1 1 q1 = = 2 = 2/3 a1 3 1 1/3 r11 = a1 = 3
T a2 /q1 = q1 a2

la siguiente matriz, 1 2 3

2/3

3 10 1/3 0 = 3 4

De la expresi on anterior es f acil deducir quien ser a el elemento r11 de la matriz R,

.u cm .es

Ortogonalizaci on de Grand-Schmidt Este m etodo permite transformar un conjunto de vectores linealmente independientes arbitrarios en un conjunto de vectores ortonormales. Lo describiremos a la vez que estudiamos su uso para obtener la factorizaci on QR de una matriz A. En primer lugar, consideremos el vector a1 , formado por los elementos de la primera columna de la matriz A. Si lo dividimos por su m odulo, obtendremos un vector unitario, Este vector, ser a la priemrea columna de la matriz Q, a1 q1 = a1

226 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

2.5

1.5 a 1 q =a
2 2 2

(at 2

q ) q
1

q (at q ) q1 2 1

0.5

0.5

n. ji m en ez @
0.5 1 1.5 2 2.5 3
T V2 a2 (q1 a2 ) q1 = T v2 a2 (q1 a2 ) q1

0.5

Figura 5.10: Obtenci on de un vector ortogonal

La gura 5.10 muestra gr acamente el proceso para dos vectores en el plano. Como q2 tiene que ser un vector unitario para que la matriz Q sea ortogonal, dividimos el vector obtenido, q 2 , por su m odulo, q2 =

Por u ltimo despejando a2 podemos indenticar los valores de r12 y r22 , tal y como se describieron anteriormente,

ad o

Bo

rr

Volviendo a la matriz A de nuestro ejemplo la segunda columna de la matriz Q y los valores de r12 y r22 quedar an, 3 2/3 7/3 T a2 (q1 a2 ) q1 10 3 1 v2 = = 0 2/3 = 20/3 q2 = T a )q v2 3 a2 (q1 5 5 5 5 2 1 4 1/3 26/3 10 3 5 5 = 3

r12 = r22

r,j

ua

T T a2 = (q1 a2 ) q1 + a2 (q1 a2 ) q2 q2

T r12 = q1 a2 T r22 = a2 (q1 a2 ) q2

s
3.5

.u cm .es

DE MATRICES 5.5. FACTORIZACION Se puede comprobar que los vectores q1 y q2 son ortogonales, 7/3 T q1 q2 = 2/3 2/3 273 5 5 20/3 = 5 5 26/3

227

14 40 26 + 3 3 3

=0

Para obtener la tercera columna de la matriz Q, q3 proceder amos de modo an alogo: calcular amos la proyecci on de la tercera columna de A, a3 sobre los vectores formados por la los dos primeras columnas de Q, restamos de a3 las dos proyecciones y normalizamos el vector resultante dividi endolo por su m odulo, q3 =
T T a3 (q1 v3 a3 ) q1 (q2 a3 ) q2 = T T v3 a3 (q1 a3 ) q1 (q2 a3 ) q2

y de modo an alog al caso de la segunda columna,


T r13 = q1 a3

Es f acil observar como vamos obteniendo las sucesivas columnas de la matriz Q, iterativamente. Podemos generalizar los resultas anteriores para cualquier columna arbitraria de la matriz Q, qi = ai
i T j =1 (qj i T j =1 (qj

y para los valores de r1i , r2i , rii,

ua

El siguiente c odigo de Matlab, calcula la factorizaci on QR de una matriz, empleando el m etodo descrito, function [Q,R]=QRF1(A) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Factorizaci on QR obtenida directamente por ortogonalizaci on de grand-schmidt %Ojo, el algoritmo es inestable... Con lo que la bondad de las soluciones %dependera de la matriz que se quiera factorizar. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %En primer lugar obtenemos las dimensiones de la matriz [m,n]=size(A); %fatorizamos columna a columna for j=1:n %Construimos un vector auxiliar v, nos servira para ir obteniendo las %columnas de la matriz Q. for i=1:m %Solo llegamos hasta m factorizaci on incompleta si m>n

Bo

rr

ad o

r,j

n. ji m en ez @
T r23 = q2 a3 T T r33 = a3 (q1 a3 ) q1 (q2 a3 ) q2

ai ) qi

ai

ai ) qi

T rji = qj ai , j < i i

rii = ai
j =1

T (qj ai ) qi

.u cm .es

228 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL v(i)=A(i,j) end for i=1:j-1 %obtenemos los elementos de la matriz R, correspondientes a la %columna j, solo podemos construir hasta una fila antes de la %diagonal i=j-1. cada fila es el producto escalar de la columna i %de la matriz Q for la columna j de la Matriz A. R(i,j)=0 for k=1:m R(i,j)=R(i,j)+Q(k,i)*A(k,j) end %obtenemos las componentes del vector auxiliar que nos permitira %construir la columna j de la matriz Q for k=1:m v(k)=v(k)-R(i,j)*Q(k,i) end

end %Obtenemos el valor del elemento de la diagonal R(j,j) de la matriz R R(j,j)=0 for k=1:m R(j,j)=R(j,j)+v(k)^2 end R(j,j)=sqrt(R(j,j))

end

rr

En general, el algoritmo que acabamos de describir para obtener la ortogonalizaci on de GrandSchmidt, es num ericamente inestable. La estabilidad puede mejorarse, si vamos modicando progresivamente la matriz A, a medida que calculamos las columnas de Q. Cada vez que obtenemos una nueva columna de Q, modicamos las columnas de A de modo que sean ortogonales a la columna de Q obtenida. Para ello, lo m as sencillo es crear una matriz auxiliar V que hacemos, inicialmente, igual a A, V (0) = A para obtener la primera columna de Q, procedemos igual que antes, normalizando la primera columna de V (0)

ad o

r,j

ua

%Y por ultimo, divimos los elementos del vector v por R(j,j), para %obtener la columna j de la matriz Q for k=1:m Q(k,j)=v(k)/R(j,j) end

Bo

A continuaci on calculamos la proyecci on de todas las dem as columnas de la matriz V (0) con respecto a q1 , esto es equivalente a calcular los restantes elementos de la primera la de la matriz R: r21 , r31 , rn1 , (0) T r1j = q1 vj

n. ji m en ez @
q1 = v1
(0) (0) (0)

v1

r11 = v1

.u cm .es

DE MATRICES 5.5. FACTORIZACION

229

Una vez calculadas las proyecciones, modicamos todas las columnas de V (0) , excepto la primera restando a cada una su proyecci on con respecto a q1 . vj
(1)

= vj

(0)

r1j vj , j = 2, 3, n

(0)

q2 =

v2 v2

(1) (1)

r22 = v2

(1)

y, de nuevo actualizar amos todos las columnas de V 1 , a partir de la tercera, para que fueran ortogonales a q2 , vj
(2)

Las columnas de V (2) ser an ahora ortogonales a q1 y q2 . Si seguimos el mismo procedimiento n veces, calculando cada vez una nueva columna de Q y una la de R, obtenemos nalmente la factorizaci on QR de la matriz inicial A. En general, para obtener la columna qi y los elemntos de la la i de la matriz R tendr amos, vi
(i1)

ua

r,j

ad o

y la actualizaci on correspondiente de la matriz V ser a, vj = vj rij vj , j = i + 1, i + 2, n


(i) (i) (i)

Bo

El resultado es el mismo que el que se obtiene por el primer m etodo descrito. La ventaja es que num ericamente es m as estable. El siguiente c odigo de Matlab, calcula la facorizaci on QR de una matriz de orden n n, empleando el m etodo descrito, function [Q,R]=QRF2(A) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Calculo de factorizacion QR de la matriz A, mediante la ortogonaliaci on de %grand.schmidt modificada. Este algoritmo si que es estable... %Obtenemos las dimensiones de A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [m,n]=size(A);

rr

n. ji m en ez @
= vj
(1)

T r2j = q2 vj

(1)

r2j vj , j = 3, 4, n

(1)

qi =

vi

(i1)

rii = vi

(i1)

T rij = qi vj

(i1)

Podemos ahora calcular el resto de los elementos de la segunda la de la matriz R de modo an alogo a como hemos calculado los de la primera,

.u cm .es

La nueva matriz V (1) cumple que todas sus columnas a partir de la segunda son ortogonales a 1 q1 . Para obtener q2 es suciente dividir v2 por su m odulo,

230 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

Bo

Para terminar, indicar que Matlab tiene su propia funci on, [Q,R]=qr(A), para calcular la factorizaci on QR de una matriz. Para calcularla, emplea el m etodo de ortogonalizaci on de Householder. Este m etodo es a un m as robusto que la ortogonalizaci on de Grand-Schmidt modicada. Pero no lo veremos en este curso. Damos a continuaci on un ejemplo de uso de la funci on qr, >> A=[2 3 1;2 0 2;1 4 3] A = 2 3 1

rr

for i=1:m %la matriz Q tiene que ser mXm, aunque el numero de columnas de A sea n) %calculamos cada R(i,i) como el modulo del vector auxiliar v(1:m,i) R(i,i)=0; for k=1:m R(i,i)=R(i,i)+v(k,i)^2; end R(i,i)=sqrt(R(i,i)); %calculamos el la columna i de la matriz Q, normalizando la columna i %de la matriz v for k=1:m Q(k,i)=v(k,i)/R(i,i); end %Modificamos todos los R(i,j) con ij>i, en cuanto tenemos la columna j %de la matriz Q, nos basta calcular el producto escalar con las %columnas de A (En nuestro caso de v porque est an copiadas, de las %filas siguientes for j=i+1:n R(i,j)=0; for k=1:m R(i,j)=R(i,j)+Q(k,i)*v(k,j); end %i por ultimo modificamos todas las columnas de la matriz v desde %i+1 hasta el final de la matriz. Aqui es donde cambia el algoritmo %ya que estamos modificando la matriz A, y las sucesivas matrices V %cada vez que obtenemos una nueva fila de valores de R for k=1:m v(k,j)=v(k,j)-R(i,j)*Q(k,i); end end end

ad o

r,j

ua

n. ji m en ez @

.u cm .es

%creamos una matriz auxiliar v sobre la que vamos a realizar la %factorizaci on. Se podr a realizar directamente sobre A Machacando sus %columnas seg un la factorizaci on progresa... Ser a lo correcto para ahorrar %espacio de almacenamiento. Pero en fin, quiz a as queda m as claro aunque %sea menos eficiente. v=A; %Como siempre, vamos factorizando por columnas de la matriz A

DE MATRICES 5.5. FACTORIZACION 2 1 0 4 2 3

231

>> [q,r]=qr(A)

-0.6667 -0.6667 -0.3333

0.2087 -0.5963 0.7752

-0.7155 0.4472 0.5367

r = -3.0000 0 0 >> q*r ans = 2.0000 2.0000 1.0000 3.0000 0.0000 4.0000 -3.3333 3.7268 0 -3.0000 1.3416 1.7889

5.5.5.

Factorizaci on SVD

Bo

rr

Donde U es una matriz de orden m m ortogonal, V es una matriz de orden n n ortogonal y S es una matriz diagonal de orden m n. Adem as los elementos de S son positivos o cero y est an ordenados en orden no creciente, 1 0 0 0 2 0 s= . n(m, n) ; 1 2 i ; i = m . . . . . . . . . . . 0 0 i Los elementos de la diagonal de la matriz S , (1 , 2 , i ), reciben el nombre de valores singulares de la matriz A. De ah el nombre que recibe esta factorizaci on; SVD son las siglas en ingl es de Singular Value Decomposition. No vamos a describir ning un algoritmo para obtener la factorizaci on SVD de una matriz. En Matlab existe la funci on [U,S,V]=svd(A) que permite obtener directamente la factorizaci on dSDV de una matriz A de dimensi on arbitraria. A continuaci on se incluyen unos ejemplos de uso para matrices no cuadradas, >> A=[1 3 4;2 3 2;2 4 5;3 2 3]

ad o

r,j

ua

Dada una matriz cualquiera A de orden m n es posible factorizarla en el roducto de tres matrices, A=U SVT

n. ji m en ez @
1.0000 2.0000 3.0000

.u cm .es

q =

232 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

A = 1 2 2 3 3 3 4 2 4 2 5 3

>> [U,S,V]=svd(A) U = -0.4877 -0.3860 -0.6517 -0.4340 0.5175 -0.3612 0.3024 -0.7144 0.1164 -0.8375 0.0552 0.5311 -0.6934 -0.1387 0.6934 -0.1387

S = 10.2545 0 0 0 0 1.9011 0 0

0 0 1.1097 0

V = -0.3769 -0.5945 -0.7103 -0.9170 0.1313 0.3767

B =

Bo

1 3 4

ad o

>> B=A

2 3 2

>> [U,S,V]=svd(B) U = -0.3769 -0.5945 -0.7103 -0.9170 0.1313 0.3767 0.1307 -0.7933 0.5946

rr

r,j

Como la matriz A tiene m as las que columnas, la matriz S resultante termina con na la de ceros.

2 4 5

ua

0.1307 -0.7933 0.5946

3 2 3

n. ji m en ez @

.u cm .es

DE MATRICES 5.5. FACTORIZACION

233

S = 10.2545 0 0 0 1.9011 0 0 0 1.1097 0 0 0

V = -0.4877 -0.3860 -0.6517 -0.4340 0.5175 -0.3612 0.3024 -0.7144 0.1164 -0.8375 0.0552 0.5311 -0.6934 -0.1387 0.6934 -0.1387

Como la matriz B , transpuesta de la matriz A del ejemplo anterior, tiene m as columnas que las, la matriz S termina con una columna de ceros. A continuaci on enunciamos sin demostraci on algunas propiedades de la factorizaci on SVD. 1. El rango de una matriz A coincide con el n umero de sus valores singulares distintos de cero. 2. La norma-2 inducida de una matriz A coincide con su valor singular mayor 1 . 3. La norma de Frobenius de una matriz A cumple: A
F

ua

4. Los valores singulares de una matriz A distintos de cero son iguales a la ra z cuadrada positiva de los autovalores distintos de cero de las matrices A AT o AT A. (los autovalores distintos de cero de estas dos matrices son iguales),

ad o

5. El valor absoluto del determinante de una matriz cuadrada A,n n, coincide con el producto de sus valores singulares,
n

r,j

Bo

rr

6. El n umero de condici on de una matriz cuadrada A n n, que se dene como el producto de la norma-2 inducida de A por la norma-2 inducida de la inversa de A, puede expresarse como el cociente entre el el valor singular mayor de A y su valor singular m as peque no, k (A) = A
2

El n umero de condici on de una matriz, es una propiedad importante que permite estimar c omo de estables ser an los c alculos realizados empleando dicha matriz, en particular aquellos que involucran directa o indirectamente el c alculo de su inversa.

n. ji m en ez @
=
2 + 2 + + 2 1 r 2 2 i = i (A AT ) = i (AT A)

| det(A)| =
i=1

A 1

= 1

1 1 = n n

.u cm .es

234 CAP ITULO 5. APLICACIONES DEL CALCULO CIENT IFICO AL ALGEBRA LINEAL

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 6

Sistemas de ecuaciones lineales


6.1. Introducci on

Una ecuaci on lineal es aquella que establece una relaci on lineal entre dos o m as variables, por ejemplo, 3x1 2x2 = 12

Se dice que es una relaci on lineal, porque las variables est an relacionada entre s tan solo mediante sumas y productos por coecientes constantes. En particular, el ejemplo anterior puede representarse geom etricamente mediante una l nea recta. El n umero de variables relacionadas en una ecuaci on lineal determina la dimensi on de la ecuaci on, la del ejemplo anterior es una ecuaci on bidimensional, puesto que hay dos variables, El numero puede ser arbitrariamente grande en general, a1 x1 + a2 x2 + + an xn = b

Bo

ser a una ecuaci on n-dimensional. Como ya hemos se nalado m as arriba, una ecuaci on bidimensional admite una linea recta como representaci on geom etrica, una ecuaci on tridimensional admitir a un plano y para dimensiones mayores que tres cada ecuaci on representar a un hiperplano de dimension n. Por supuesto, para dimensiones mayores que tres, no es posible obtener una representaci on gr aca de la ecuaci on. Las ecuaciones lineales juegan un papel muy importante en la f sica y, en general en la ciencia y la tecnolog a. La raz on es que constituyen la aproximaci on matem atica m as sencilla a la relaci on entre magnitudes f sicas. Por ejemplo cuando decimos que la fuerza aplicada a un resorte y la elongaci on que sufre est an relacionadas por la ley de Hook, F = Kx estamos estableciendo una relaci on lineal entre las magnitudes fuerza y elongaci on. Se cumple siempre dicha relaci on? Desde luego que no. Pero es razonablemente cierta para elongaciones peque nas y, apoyados en ese sencillo modelo lineal de la realidad, se puede aprender mucha f sica. Un sistema de ecuaciones lineales est a constituido por varias ecuaciones lineales, que expresan relaciones lineales distintas sobre las mismas variables. Por ejemplo,

rr

ad o

r,j

ua

Se llaman soluciones del sistema de ecuaciones a los valores de las variables que satisfacen simult anemente a todas las ecuaciones que componen el sistema. Desde el punto de vista de la 235

n. ji m en ez @
a11 x1 + a12 x2 = b1 a21 x1 + a22 x2 = b2

.u cm .es

236

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

a11 x1 + a12 x2 + + a1n xn = b1 a21 x1 + a22 x2 + + a2n xn = b2 an1 x1 + an2 x2 + + ann xn = bn

n. ji m en ez @
A

Una de las grandes ventajas de los sistemas de ecuaciones lineales es que puede expresarse en forma de producto matricial,
x b

a11 x1 + a12 x2 + + a1n xn = b1 a11 a21 x1 + a22 x2 + + a2n xn = b2 a21 . . . an1 an1 x1 + an2 x2 + + ann xn = bn

a12 a22 . . .

.. .

an2

a1n x1 b1 x2 b2 a2n . = . . . . . . . . ann xn bn

ad o

Es decir, bastar a invertir la matriz de coecientes y multiplicarla por la izquierda por el vector de coecientes para obtener el vector de t erminos independientes. De aqu podemos deducir una segunda condici on para que un sistema de ecuaciones tenga una soluci on u nica; Su matriz de coecientes tiene que tener inversa. Veamos algunos ejemplos sencillos. Tomaremos en primer lugar un sistema de dos ecuaciones con dos inc ognitas,

r,j

ua

La matriz A recibe el nombre de matriz de coecientes del sistema de ecuaciones, el vector x es el vector de inc ognitas y el vector b es el vector de t erminos independientes. Para resolver un sistema de ecuaciones podr amos aplicar lo aprendido en el cap tulo anterior sobre algebra de matrices, A x = b x = A 1 b

4x1 + x2 = 6 3x1 2x2 = 1

Bo

rr

Si expresamos el sistema en forma de producto de matrices obtenemos, 4 3 1 x1 2 x2 = 6 1

e invirtiendo la matriz de coecientes y multiplic andola por el vector de t erminos independientes se llega al vector de soluciones del sistema, x1 x2 = 4 3 1 2
1

6 1

2/11 1/11 3/11 4/11

6 1

s
= 1 2

.u cm .es

obtenci on de las soluciones a las varibles se les suele denominar inc ognitas, es decir valores no conocidos que deseamos obtener o calcular. Un sistema de ecuaciones puede tener innitas soluciones, puede tener una u nica soluci on o puede no tener soluci on. En lo que sigue, nos centraremos en sistemas de ecuaciones que tienen una u nica soluci on. Una primera condici on para que un sistema de ecuaciones tengan una u nica soluci on es que el n umero de inc ognitas presentes en el sistema coincida con el n umero de ecuaciones. De modo general podemos decir que vamos a estudiar m etodos num ericos para resolver con un computador sistemas de ecuaciones de n ecuaciones con n inc ognitas,

6.1. INTRODUCCION

237

En el ejemplo que acabamos de ver, cada ecuaci on corresponde a una recta en el plano, en la gura 6.1 se han representado dichas rectas gr acamente. El punto en que se cortan es precisamente la soluci on del sistema.

10

3x 2x =1
1 1 2

4x +x =6
2

(x1,x2)=(1,2)

6 1

0.5

n. ji m en ez @
0 0.5 1 x1 1.5 2

s
2.5 3

ad o

Supongamos ahora el siguiente sistema tambi en de dos ecuaciones con dos incognitas, 4x1 + x2 = 6 1 2x1 + x2 = 1 2

Bo

rr

El sistema no tiene soluci on. Su matriz de coecientes tiene determinante cero, por lo que no es invertible, 4 1 | A| = = 0 A 1 2 1/2

Si representamos gr acamente las dos ecuaciones de este sistema (gura ??) es f acil entender lo que pasa, las rectas son paralelas, no existe ning un punto (x1 , x2 que pertenezca a las dos rectas, y por tanto el sistema carece de soluci on.

r,j

ua

Figura 6.1: Sistema de ecuaciones con soluci on u nica

.u cm .es

238

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

10 4x +x =6 2x +0.5x = 1
1 2 1 2

0 x2

10

15 1

0.5

n. ji m en ez @
0 0.5 1 x1 1.5 2

ad o

Dos rectas paralelas lo son por que tienen la misma pendiente. Esto se reeja en la matriz de coecientes, en que las las son proporcionales; si multiplicamos la segunda la por dos, obtenemos la primera. Por u ltimo, el sistema, 4x1 + x2 = 6 1 2x1 + x2 = 3 2

Bo

posee innitas soluciones. la raz on es que la segunda ecuaci on es igual que la primera multiplicada por dos: es decir, representa exactamente la misma relaci on lineal entre las variables x1 y x2 , por tanto, todos los puntos de la recta son soluci on del sistema. De nuevo, la matriz de coecientes del sistema no tiene inversa ya que su determinante es cero. Para sistemas de ecuaciones de dimensi on mayor, se cumple tambi en que que el sistema no tiene soluci on u nica si el determinante de su matriz de coeciente es cero. En todos los dem as casos, es posible obtener la soluci on del sistema invirtiendo la matriz de coecientes y multiplicando el resultado por el vector de t erminos independientes.

rr

r,j

ua

Figura 6.2: Sistema de ecuaciones sin soluci on

s
2.5 3

.u cm .es

6.2. CONDICIONAMIENTO

239

10 4x +x =6
1 1 2

6 1

0.5

n. ji m en ez @
0 0.5 1 x1 1.5 2

s
2.5 3

En cuanto un sistema de ecuaciones tiene una dimensi on sucientemente grande, invertir su matriz de coecientes, anal ticamente se torna un problema costoso o sencillamente inabordable. Desde un punto de vista num erico, la inversi on de una matriz, presenta frecuentemente problemas debido al error de redondeo en las operaciones. Por esto, casi nunca se resuelven los sistemas de ecuaciones invirtiendo su matriz de coecientes. A lo largo de este cap tulo estudiaremos dos tipos de m etodos de resoluci on de sistemas de ecuaciones. El primero de ellos recibe el nombre gen erico de m etodos directos, el grupo tipo lo constituyen los llamados m etodos iterativos.

Bo

rr

6.2.

El la introducci on hemos visto que para que un sistema de ecuaciones tenga soluci on, es preciso que su matriz de coecientes sea invertible. Sin embargo cuando tratamos de resolver un sistema de ecuaciones num ericamente, empleando un ordenador, debemos examinar cuidadosamente ante la matriz de coecientes del sistema. Veamos un ejemplo, el sistema,

ad o

Condicionamiento

r,j

ua

Figura 6.3: Sistema de ecuaciones con innitas soluciones

.u cm .es

2x +0.5x =3
2

240

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

4x1 + x2 = 6 2x1 + 0,4x2 = 1 8,5 40

x=

Si alteramos ligeramente uno de sus coecientes, 4 x1 + x2 = 6 2x1 + 0,49x2 = 1

Las soluciones se alternan se vuelven aproximadamente 10 veces m as grande,

y si volvemos a alterar el mismo coeciente,

La soluci on es aproximadamente 100 veces m as grande, x= 998,5 4000

Bo

La raz on para estos cambios es f acil de comprender intuitivamente; a medida que aproximo el coeciente a 0,5, estoy haciendo que las dos ecuaciones lineales sean cada vez mas paralelas, peque nas variaciones en la pendiente, modican mucho la posici on del punto de corte. Cuando peque nas variaciones en la matriz de coecientes generan grandes variaciones en las soluciones del sistema, se dice que el sistema est a mal condicionado, en otras palabras: que no es un sistema bueno para ser resuelto num ericamente. Las soluciones obtenidas para un sistema mal condicionado, hay que tomarlas siempre con bastante escepticismo. Para estimar el buen o mal condicionamiento de un sistema, se emplea el n umero de condici on, que denimos en el cap tulo anterior al hablar de la factorizaci on SVD 5.5.5. El n umero de condici on de una matriz es el cociente entre sus valores singulares mayor y menor. Cuanto m as pr oximo a 1 sea el n umero de condici on, mejor condicionada estar a la matriz y cuanto mayor sea el n umero de condici on peor condicionada estar a. Matlab tiene un comando espec co para obtener el n umero de condici on de una matriz, sin tener que calcular la factorizaci on SVD, el comando nc=cond(A). Si lo aplicamos a la matriz de coecientes del u ltimo ejemplo mostrado, >> A=[4 1; 2, 0.499] A = 4.0000 1.0000

rr

ad o

r,j

ua

n. ji m en ez @
4x1 + x2 = 6 2x1 + 0,499x2 = 1

x=

98,5 400

.u cm .es

Tiene como soluciones,

6.2. CONDICIONAMIENTO 2.0000 >> nc=cond(A) nc = 5.3123e+003 0.4990

241

El n umero est a bastante alejado de uno, lo que, en principio, indica un mal condicionamiento del sistema. Incidentalmente, podemos calcular la factorizaci on svd de la matriz de coecientes y dividir el valor singular mayor entre el menor para comprobar que el resultado es el mismo que nos da la funci on cond,

U = -0.8944 -0.4472 -0.4472 0.8944

S = 4.6097 0 0 0.0009

V = -0.9702 -0.2424 0.2424 -0.9702

Bo

Matlab emplea tambi en la funci on rnc=rcond(A) para estimar el condicionamiento de una matriz. No describiremos el m etodo, simplemente diremos que en lugar de obtener un n umero de condici on para la matriz, obtiene su inverso. De este modo, cuanto m as se aproxima a uno resultado de rcond, mejor condicionada est a la matriz, y cuanto m as se aproxime a cero peor. Para nuestro ejemplo anterior, >> rnc=rcond(A) rnc = 1.3333e-004

rr

ad o

nc =

5.3123e+003

r,j

>> nc=S(1,1)/S(2,2)

ua

n. ji m en ez @

>> [U,S,V]=svd(A)

.u cm .es

242

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Pr oximo a cero, lo que indica un mal condicionamiento de A. N otese que el resultado de rcond, no es el inverso del de cond.

6.3.
6.3.1.

Sistemas triangulares

Vamos a empezar el estudio de los m etodos directos por los algoritmos de resoluci on de los sistemas m as simples posibles, aquellos cuya matriz de coecientes es una matriz triangular, superior o inferior. Sistemas diagonales. triangular. Un sistema diagonal es aquel cuya matriz de coecientes es una matriz

a11 x1 = b1 a11 a22 x2 = b2 0 . . . 0 ann xn = bn

Su resoluci on es trivial, basta dividir cada t ermino independiente por el elemento correspondiente de la diagonal de la matriz de coecientes, xi = bi aii

Para obtener la soluci on basta crear en Matlab un sencillo bucle for, n=size(A,1); x=zeros(n,1); for i=1:n x(i)=b(i)/A(i,i); end

Sistemas triangulares inferiores: m etodo de sustituciones progresivas. gular inferior de n ecuaciones con n inc ognitas tendr a la forma general,

ad o

r,j

ua

n. ji m en ez @
0 a22 . . . 0 .. .
A

0 x1 b1 x 2 b2 0 . = . . . . . . . . ann xn bn

rr

s
b x

a11 a21 . . . a an1 x1 + an2 x2 + + ann xn = bn n1 a21 x1 + a22 x2 = b2

Bo

a11 x1 = b1

0 a22 . . . an2

.. .

0 0 . . . ann

x1 b1 x2 b2 =. . . . . . xn bn

El procedimiento para resolverlo a mano es muy sencillo, despejamos la primera la primera inc ognita de la primera ecuaci on, b1 x1 = a11

.u cm .es
Un sistema trianb

M etodos directos de resoluci on de sistemas de ecuaciones lineales

DE SISTEMAS DE ECUACIONES LINEALES243 6.3. METODOS DIRECTOS DE RESOLUCION A continuaci on sustituimos este resultado en la segunda ecuaci on, y despejamos x2 , x2 = b2 a21 x1 a22

xi =

bi

i1 j =1

aij xj

aii

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Obtenemos el tama~ no de la matriz de coeficientes y comprobamos que es %cuadrada, [f,c]=size(A); if f~=c error(la matriz de coeficientes no es cuadrada) end %construimos un vector solucion, inicialmente formado por ceros, x=zeros(f,1); %construimos un bucle for para ir calculando progresivamente las soluciones %del sistema for i=1:f %primero igualamos la soluci on al termino independiente de la ecuaci on %que toque... x(i)=b(i) %y luego creamos un bucle para ir restando todas las soluciones %anteriores... for j=1:i-1 x(i)=x(i)-A(i,j)*x(j) end %para terminar dividimos por el elemento de la diagonal de la matriz de %coeficientes... x(i)=x(i)/A(i,i) end Sistemas triangulares superiores: m etodo de sustituciones regresivas. sistema general de n ecuaciones con n inc ognitas tendr a la forma general,

Bo

rr

ad o

r,j

ua

n. ji m en ez @

function x = progresivas(A,b) %Esta Funci on permite obtener la solucion de un sistema triangular inferior %empleando sustituciones progresivas. La variables de entrada son la matriz %de coeficientes A y el vector de terminos independientes b. la solucion se %devuelve como un vector columna en la varible x

Si repetimos este mismo proceso hasta llegar a la u ltima ecuaci on del sistema, n, habremos obtenido la soluci on completa. EL siguiente c odigo calcula la soluci on de un sistema triangular inferior mediante sustituciones progresivas,

.u cm .es
En este caso, el

De cada ecuaci on vamos obteniendo una componente del vector soluci on, sustituyendo las soluciones obtenidas en las ecuaciones anteriores, as cuando llegamos a la ecuaci on i,

244

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

El m etodo de resoluci on es id entico al de un sistema triangular inferior, simplemente que ahora, empezamos a resolver por la u ltima ecuaci on, xn = Y seguimos sustituyendo hacia arriba, xn1 = bn1 a(n1)n a(n1)(n1)
n j =i+1

bn ann

El c odigo para implementar este m etodo es similar al de las sustituciones progresivas. Se deja como ejercicio el construir una funci on en Matlab que calcule la soluci on de un sistema triangular inferior por el m etodo de las sustituciones regresivas.

6.3.2.

M etodos Basados en las factorizaciones

Bo

rr

Donde P representa una matriz de permutaciones. Supongamos que queremos resolver un sistema de n ecuaciones lineales con n inc ognitas que representamos gen ericamente en forma matricial, como siempre, Ax=b

Si calculamos la fatorizaci on LU de su matriz de coecientes, AP A=LU

Podemos transformar nuestro sistema de ecuaciones en uno equivalente aplicando la matriz de permutaciones, por la izquierda a ambos lados del igual. El efecto es equivalente a que cambi aramos el orden en que se presentan las ecuaciones del sistema,

ad o

Factorizaci on LU. En el cap tulo anterior 5.5.1 vimos como factorizar una matriz en el producto de dos, una triangular inferior L y una triangular superior U . La factorizaci on pod a incluir pivoteo de las, para alcanzar una soluci on num ericamente estable. En este caso la factorizaci on LU tomaba la forma, P A=LU

r,j

ua

Puesto que sabemos como resolver sistemas triangulares, Una manera de resolver sistemas m as complejos ser a encontrar m etodos de reducirlos a sistemas triangulares. De este modo evitamos invertir la matriz de coecientes y los posibles problemas de estabilidad num erica derivados de dicha operaci on. En el cap tulo anterior 5.5, vimos varios m etodos de factorizar una matriz, que permiten una aplicaci on directa a la resoluci on de sistemas.

n. ji m en ez @
xi = bi aij xj aii

.u cm .es

a11 x1 + a12 x2 + + a1n xn = b1 a11 a22 x2 + + a2n xn = b2 0 . . . 0 ann xn = bn

a12 a22 . . .

.. .

a1n x1 b1 x2 b2 a2n . = . . . . . . . . xn bn ann

DE SISTEMAS DE ECUACIONES LINEALES245 6.3. METODOS DIRECTOS DE RESOLUCION

Ax=bP Ax=P b Si sustituimos ahora P A por su factorizaci on LU, P Ax=P bLU x=P b El nuevo sistema puede resolverse en dos pasos empleando sustituciones regresivas y sustituciones progresivas. Para ello, asociamos el producto U x, a un vector de inc ognitas auxiliar al que llamaremos z , U x=z

Si sustituimos nuestro vector auxiliar z en la expresi on matricial de nuestro sistema de ecuaciones,


z

LU x=P bLz =P B

El sistema resultante es triangular inferior, por lo que podemos resolverlo por sustituciones progresivas, y obtener de este modo los valores de z . Podemos nalmente obtener la soluci on del sistema a trav es de la denici on de z ; U x = z , se trata de un sistema triangular superior, que podemos resolver mediante sustituciones regresivas. Veamos un ejemplo. Supongamos que queremos resolver el sistema de ecuaciones lineales, 1 3 2 x1 13 2 1 1 x2 = 3 1 4 3 x3 18 En primer lugar deber amos comprobar que la matriz de coeciente esta bien condicionada, >> A=[1 3 2;2 -1 1;1 4 3] A = 1 3 2 -1 1 4 >> nc=cond(A) nc = 24.3827 2 1 3

Bo

rr

No es un valor grande, con lo que podemos considerar que A est a bien condicionada. Calculamos la factorizaci on LU de la matriz de coecientes, para ello podemos emplear el programa lufact.m, incluido en el cap tulo anterior 5.5.1, o bien la funci on lu de Matlab,

>> [L U P]=lufact(A) L = 1.0000 0.5000 0.5000 0 1.0000 0.7778 0 0 1.0000

ad o

r,j

ua

n. ji m en ez @

.u cm .es

246 U = 2.0000 0 0 P = 0 0 1 1 0 0 0 1 0 -1.0000 4.5000 0 1.0000 2.5000 -0.4444

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

A continuaci on debemos aplicar la matriz de permutaciones, al vector de t erminos independientes del sistema, para poder construir el sistema equivalente L U = P b, >> b=[13;3;18] b = 13 3 18 >> bp=P*b bp = 3 18 13

>> z=progresivas(L,bp) z = 3.0000 16.5000 -1.3333

Bo

Finalmente, podemos obtener la soluci on del sistema sin m as que aplicar el met odo de las sustituciones regresiva a la matriz U y al vector auxiliar z que acabamos de obtener,1 >> x=regresivas(U,z) x =

1 La funci on regresivas no se ha suministrado ni existe en Matlab. Se construcci on se ha dejado como ejercicio en la secci on anterior.

rr

ad o

r,j

Empleamos la matriz L obtenida y el productobp = P b que acabamos de calcular, para obtener por sustituciones progresivas, el vector auxiliar z descrito m as arriba. Empleamos para ello el la funci on progresivas, cuyo c odigo incluimos en la secci on anterior,

ua

n. ji m en ez @

.u cm .es

DE SISTEMAS DE ECUACIONES LINEALES247 6.3. METODOS DIRECTOS DE RESOLUCION 1.0000 2.0000 3.0000

Para comprobar que la soluci on es correcta basta multiplicar la matriz de coecientes del sistema original por el resultado obtenido para x y comprobar que obtenemos como resultado el vector de t erminos independientes. >> A*x ans = 13 3 18

Factorizaci on de Cholesky. Como vimos en el capitulo anterior 5.5.2, la factorizaci on de Cholesky permite descomponer una matriz A en el producto de de una matr z triangular inferior, por su traspuesta. A = L LT Para ello, es preciso que A sea sim etrica y denida positiva. Por tanto, en el caso part cular de un sistema cuya matriz de coecientes fuera sim etrica y denida positiva, podr amos descomponerla empleando la factorizaci on de Cholesky y resolver el sistema de modo an alogo a como hicimos con con la factorizaci on LU, sustituimos A por el producto LL, A x = b L LT x = b Denimos el vector auxiliar z ,

Resolvemos por sustituciones progresivas el sistema,

r,j

ua

ad o

y por u ltimo obtenemos x resolviendo por sustituciones regresivas el sistema, LT x = z Matlab muestra la resolucion del sistema, 1 x1 15 2 x2 = 39 6 x3 23

Bo

La siguiente secuencia de comandos de 2 5 5 14 1 2

rr

>> A=[2 5 1;5 14 2;1 2 6] A = 2 5 1 5 14 2 1 2 6

n. ji m en ez @
LT x = z Lz =b

.u cm .es

248 >> b=[15;39;23] b = 15 39 23 >> L=cholesky(A) L = 1.4142 0 3.5355 1.2247 0.7071 -0.4082 >> z=progresivas(L,b) z = 10.6066 1.2247 6.9282 >> x=regresivas(L,z) x = 1.0000 2.0000 3.0000 >> A*x ans = 15 39 23

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

0 0 2.3094

ad o

Factorizaci on QR Como vimos en el cap tulo anterior 5.5.4, la factorizaci on QR, descompone una matriz en el producto de una matriz ortogonal Q por una matriz triangular superior R. Si obtenemos la factorizaci on QR de la matriz de coecientes de un sistema, Ax=bQRx=b

Podemos resolver ahora el sistema en dos pasos. En primer lugar, como Q es ortogonal, Q1 = Q , podemos multiplicar por QT a ambos lados de la igualdad,
T

Bo

rr

Pero el sistema resultante, es un sistema triangular superior, por lo que podemos resolverlo por sustituciones regresivas. Tomando el mismo ejemplo que resolvimos antes por factorizaci on LU, 1 3 2 x1 13 2 1 1 x2 = 3 1 4 3 x3 18

r,j

En este ejemplo se ha empleado la funci on cholesky, cuyo c odigo se incluy o en el cap tulo anterior 5.5.2, para factorizar la matriz de coecientes del sistema. La factorizaci on se podr a haber llevado a cabo igualmente, empleando la funcion de Matlab chol.

Q R x = b QT Q R x = QT b R x = QT b

ua

n. ji m en ez @

.u cm .es

DE SISTEMAS DE ECUACIONES LINEALES249 6.3. METODOS DIRECTOS DE RESOLUCION podemos ahora resolverlo mediante factorizaci on QR. Para ello aplicamos la funci on QRF2 incluida en el cap tulo anterior 5.5.4, o directamente la funcion de Matlab qr, a la matriz de coecientes del sistema, >> A=[1 3 2;2 -1 1;1 4 3] A = 1 3 2 2 -1 1 1 4 3 >> [Q,R]=QRF2(A) Q = 0.4082 0.4637 0.8165 -0.5707 0.4082 0.6777 R = 2.4495 0 0 2.0412 4.6726 0

A continuaci on multiplicamos QT por el vector de t erminos independientes, >> b=[13;3;18] b = 13 3 18 >> z=Q*b z = 15.1052 16.5147 1.0484

>> x=regresivas(R,z)

Bo

rr

x =

>> A*x ans = 13.0000

ad o

Por u ltimo resolvemos el sistema R x = QT b mediante sustituciones regresivas y comprobamos el resultado,

1.0000 2.0000 3.0000

r,j

ua

n. ji m en ez @
2.8577 2.3898 0.3495

-0.7863 0.0874 0.6116

.u cm .es

250 3.0000 18.0000

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Donde U y V son matrices ortogonales y S es una matriz diagonal. Si calculamos la factorizaci on svd de la matriz de coeciente de un sistema, Ax=bU SVT x=b

Como en el caso de la factorizaci on QR, podemos aprovechar la ortogonalidad de las matrices U y V para simplicar el sistema,

Como en casos anteriores, podemos crear un vector auxiliar z , VT x=z

de modo que resolvemos primero el sistema,

Como la matriz S es diagonal, se trata de un sistema diagonal que, como hemos visto, es trivial de resolver. Una vez conocido Z podemos obtener la soluci on del sistema original, haciendo ahora uso de la orotgonalidad de la matriz V , VT x=z V VT x=V z x=V z

ua

Volvamos a nuestro ejemplo,

>> A=[1 3 2;2 -1 1;1 4 3] A =

rr

Bo

1 2 1

>> [U,S,V]=svd(A) U = -0.5908 -0.0411 -0.8058 -0.0053 -0.9985 0.0548 -0.8068 0.0366 0.5897

ad o

En primer lugar factorizamos la matriz de coecientes empleando el comando svd de Matlab,

3 -1 4

r,j

1 2 1

2 1 3

n. ji m en ez @
S z = UT b 3 1 4 2 x1 13 1 x2 = 3 3 18 x3

U S V T x = b UT U S V T x = UT b S V T x = UT b

.u cm .es

Factorizaci on SVD. La factorizaci on svd 5.5.5, descompone una matriz cualquiera en el producto de tres matrices, A=U SVT

DE SISTEMAS DE ECUACIONES LINEALES251 6.3. METODOS DIRECTOS DE RESOLUCION

S = 6.3232 0 0 0 2.4393 0 0 0 0.2593

V = -0.2339 -0.7835 -0.5757 -0.7983 0.4927 -0.3463 -0.5549 -0.3786 0.7408

Calculamos a continuaci on el valor del vector auxiliar z , >> ba=U*b ba = -22.3076 -2.0777 0.2360 >> z=S^-1*ba z = -3.5279 -0.8518 0.9101

por u ltimo, calculamos x y comprobamos la soluci on obtendida, >> x=V*z x = 1.0000 2.0000 3.0000 >> A*x ans = 13.0000 3.0000 18.0000

Bo

rr

6.3.3.

El m etodo de eliminaci on gaussiana es el mismo descrito en el cap tulo anterior 5.5.1 para obtener la matriz triangular superior U en la factorizaci on LU de una matriz. Como ya se explico en detalle, el m etodo consiste en hacer cero todos los elementos situados por debajo de la diagonal de una matriz. Para ello se sustituyen progresivamente las las de la matriz, exceptuando la primera, por combinaciones adecuadas de dicha la con las anteriores.

ad o

El m etodo de eliminaci on de Gauss.

r,j

ua

n. ji m en ez @

.u cm .es

252

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Toda las discusi on incluida en el cap tulo anterior sobre la eliminaci on de Gauss, es v alida tambi en para la resoluci on de sistemas, por lo que no volveremos a repetirla. Nos centraremos solo en su aplicaci on al problema de resolver un sistema de ecuaciones lineales. La idea fundamental, es sacar partido de las siguientes propiedades de todo sistema de ecuaciones lineales; 1. Un sistema de ecuaciones lineales no cambia aunque se altere el orden de sus ecuaciones.

2. Un sistema de ecuaciones lineales no cambia aunque se multiplique cualquiera de sus ecuaciones por una constante distinta de cero.

3. Un sistema de ecuaciones no cambia si se sustituye cualquiera de sus ecuaciones por una combinaci on lineal de ella con otra ecuaci on.

Si cambio de orden la segunda ecuaci on con la primera obtengo el siguiente sistema equivalente, x1 2 1 1 3 1 3 2 x2 = 13 1 4 3 x3 18 Es decir, se intercambia la primera la de la matriz de coecientes con la segunda, y el primer elemento del vector de t erminos independientes con el segundo. El vector de inc ognitas permanece inalterado. Si ahora sustituimos la segunda la, por la diferencia entre ella y la primera multiplicada por 0,5, obtenemos de nuevo un sistema equivalente, x1 3 2 1 1 0 3,5 1,5 x2 = 11,5 1 4 3 x3 18 Acabamos de dar los dos primeros pasos en el proceso de eliminaci on de Gauss para convertir la matriz de coecientes del sistema en una matriz triangular superior: hemos piboteado las dos primeras las y despu es hemos transformado en cero el primer elemento de la segunda la, combin andola con la primera. De nuevo, hemos aplicado tambi en esta segunda al segundo elemento del vector de t erminos independientes, para que el sistema obtenido sea equivalente al original. Para poder trabajar de una forma c omoda con el m etodo de eliminaci on de Gauss, se suele construir una matriz, conocida con el nombre de matriz ampliada, a nadiendo a la matriz de coecientes, el vector de t erminos independientes como una columna m as,

Bo

rr

ad o

r,j

En nuestro ejemplo, 1 2 1 3 1 4 2 13 1 1 , 3 2 3 18 1 3 1 4 2 13 1 3 3 18

ua

n. ji m en ez @
A, b AM = (A|b)

Si usamos las representaci on matricial de un sistema de ecuaciones, Cualquiera de los cambios descritos en las propiedades anteriores afecta tanto a la matriz de coecientes como al vector de t erminos independientes, por ejemplo dado el sistema, x1 13 1 3 2 2 1 1 x2 = 3 18 x3 1 4 3

.u cm .es

DE SISTEMAS DE ECUACIONES LINEALES253 6.3. METODOS DIRECTOS DE RESOLUCION Podemos aplicar directamente a la matriz ampliada AM el programa de eliminaci on de Gauss, eligauss, que incluimos en el cap tulo anterior 5.5.1, en la secci on dedicada a la factorizaci on LU. Si aplicamos eligauss a la matriz ampliada del sistema del ejemplo, >> A=[1 3 2;2 -1 1;1 4 3] A = 1 2 1 3 -1 4 2 1 3

>> b=[13;3;18] b = 13 3 18 >> AM=[A b] AM = 1 3 2 -1 1 4

2 1 3

13 3 18

>> GA=eligauss(AM) GA = 1.0000 0 0 3.0000 -7.0000 0

Bo

rr

El sistema resultante de la eliminaci on de Gauss es triangular superior, con lo que podemos resolverlo directamente mediante sustituciones regresivas, >> G=GA(:,1:3) G = 2.0000 -3.0000 0.5714

1.0000 3.0000 0 -7.0000 0 0 >> bp=GA(:,4) bp =

ad o

El programa ha obtenido como resultado una nueva matriz en la que los elementos situados por debajo de la diagonal son ahora cero. Podemos reconstruir, a partir del resultado obtenido un sistema equivalente actual Separando la u ltima columna del resultado, 1 3 2 13 1 3 2 x1 13 0 7 3 23 0 7 3 x2 = 23 0 0 0,5714 1,7143 0 0 0,571 x3 1,7143

r,j

ua

n. ji m en ez @
2.0000 -3.0000 0.5714 13.0000 -23.0000 1.7143

.u cm .es

254

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

El programa eligauss, presenta el problema de que no incluye el pivoteo de las. Como se explic o en el cap tulo anterior este en necesario para evitar que un cero o un valor relativamente peque no en la diagonal, impida completar el proceso de eliminaci on o haga los c alculos inestables. A continuaci on, incluimos una versi on modicada de eligauss que incluye el pivoteo de las. function U=eligaussp(A) %Esta funci on obtiene una matriz triangular superior, a partir de una %matriz dada, aplicando el m etodo de eliminaci on gaussiana. %realiza piboteo de filas, as que lo primero que hace es comprobar si el %el elemento de la diagonal, de la fila que se va a emplear para eliminar %el mayor que los que tiene por debajo en su columna, si no es as , % intercambia la fila con la que tenga el elemento mayor en dicha columna. %Obtenemos el n umero de filas de la matriz.. nf=size(A,1); U=A; % for j=1:nf-1 %recorro todas la columnas menos la ultima %%%%%%%%%%%pivoteo de filas%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Buscamos el elemento mayor de la columna j de la diagonal para abajo maxcol=U(j,j); index=j; for l=j:nf if U(l,j)>maxcol maxcol=U(l,j); index=l; end end %si el mayor no era el elemento de la diagonal U(j,j), intecambiamos la %fila l con la fila j if index~=j aux=U(j,:); U(j,:)=U(l,:); U(l,:)=aux; end %%%%%%%%fin del pivoteo de filas%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=j+1:nf %Recorro las filas desde debajo de la diagonal hasta la % ultima en Matlab tengo la suerte de poder manejar cada fila de un %solo golpe. U(i,:)=U(i,:)-U(j,:)*U(i,j)/U(j,j);

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

13.0000 -23.0000 1.7143 >> x=regresivas(G,bp) x = 1.0000 2.0000 3.0000

DE SISTEMAS DE ECUACIONES LINEALES255 6.3. METODOS DIRECTOS DE RESOLUCION end end Si aplicamos esta funci on a nuestro ejemplo de siempre,

1 0 0

4 -1 0

3 -1 4

18 -5 12

y separando en la matriz ampliada la matriz de coecientes y el vector de t erminos independientes podemos resolver el sistema por sustituciones regresivas,

>> bp=GA(:,4) bp = 18 -5 12 >> x=regresivas(G,bp) x = 1 2 3

6.3.4.

Gauss-Jordan y matrices en forma reducida escalonada

El m etodo de eliminaci on de Gauss, permite obtener a partir de una matriz arbitraria, una matriz triangular superior. Una vez obtenida esta, podr amos seguir transformado la matriz de modo que hici eramos cero todos los elementos situados por encima de su diagonal. Para ello bastar a aplicar el mismo m etodo de eliminaci on de Gauss, la diferencia es que ahora eliminnar amos har amos ceros los elementos situados por encima de la diagonal principal de la matriz, empezando por la u ltima columna y movi endonos de abajo a arriba y de derecha a izquierda. Este proceso se conoce con el nombre de eliminaci on de Gauss-Jordan. Por ejemplo supongamos que partimos de la matriz que acabamos de obtener por eliminaci on de Gauss en ejemplo anterior, 1 4 3 18 GA = 0 1 1 5 0 0 4 12 Empezar amos por hacer cero el elemento ga23 que es el que est a situado enc ma de u ltimo elemento de la diagonal principal, para ello restariamos a la segunda columna la tercera multiplicada por 1 y dividida por 4,

Bo

rr

ad o

r,j

ua

n. ji m en ez @

1 0 0

4 -1 0

3 -1 4

>> G=GA(:,1:3) G =

.u cm .es

>> GA=eligaussp(AM) GA =

256

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

1 0 0 0

4 1 0 0

3 1 + 4/4 4

18 1 5 + 12/4 = 0 12 0

4 1 0

3 18 0 2 4 12

Si ahora separamos en la matriz ampliada resultante, la matriz de coecientes y el vector de t erminos independientes, obtenemos un sistema diagonal, cuya soluci on es trivial, 1 1 x1 1 0 0 1 0 0 1 0 1 0 2 0 1 0 x2 = 2 x = 2 x3 0 0 4 0 0 4 12 12 3 El siguiente programa gauss-jordan, a nade las l neas de c odigo necesarias a eligaussp para realizar la eliminaci on de Gauss-Jordan completa de una matriz. function U=gauss_jordan(A) %Esta funci on realiza la eliminaci on de GAUSS-JORDAN, que permite obtener, %a partir de una matriz dada, una matriz cuyos elementos por encima y %debajo de la diagonal son todos cero. %Obtenemos el n umero de filas de la matriz.. nf=size(A,1); U=A; % %primera parte: reducci on a una matriz triangular pro eliminaci on %progresiva for j=1:nf-1 %recorro todas la columnas menos la ultima %%%%%%%%%%%pivoteo de filas%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Buscamos el elemento mayor de la columna j de la diagonal para abajo maxcol=U(j,j); index=j; for l=j:nf if U(l,j)>maxcol maxcol=U(l,j); index=l; end end %si el mayor no era el elemento de la diagonal U(j,j), intecambiamos la

Bo

rr

ad o

r,j

ua

n. ji m en ez @

Como hemos llegado a la primera columna, pasamos a eliminar los elementos de la siguiente columna de la izquierda. En este ejemplo solo tenemos un elemento por encima de la diagonal. Para eliminarlo restamos de la primera la la segunda multiplica por 4 y dividida por 1, 1 0 4 4 (1)/(1) 0 9 (2) 4/(1) 1 0 0 1 0 = 0 1 0 2 1 0 2 0 0 4 12 0 0 4 12

.u cm .es

A continuaci on, Eliminar amos el elemento situado en la misma columna, una la por encima. Para ello restamos a la primera la tercera multiplicada por 3 y dividida por 4 , 1 0 4 0 3 3 4/4 18 12 3/4 1 4 0 9 0 = 0 1 0 2 1 0 2 0 0 4 12 0 0 4 12

DE SISTEMAS DE ECUACIONES LINEALES257 6.3. METODOS DIRECTOS DE RESOLUCION %fila l con la fila j if index~=j aux=U(j,:); U(j,:)=U(l,:); U(l,:)=aux; end %%%%%%%%fin del pivoteo de filas%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=j+1:nf %Recorro las filas desde debajo de la diagonal hasta la % ultima en Matlab tengo la suerte de poder manejar cada fila de un %solo golpe. U(i,:)=U(i,:)-U(j,:)*U(i,j)/U(j,j); end end

for j=nf:-1:2 for i=j-1:-1:1 %Recorro las filas desde encima de la diagonal hasta la %primera, U(i,:)=U(i,:)-U(j,:)*U(i,j)/U(j,j); end end Si tras realizar la eliminaci on de Gauss-Jordan a la matriz ampliada de un sistema, dividimos cada la por el elemento que ocupa la diagonal principal, obtendr amos en la u ltima columna las soluciones del sistema. En nuestro ejemplo, 1 0 0 1 0 1 0 2 0 0 1 3 La matriz resultante se dice que esta en forma escalonada reducida por las. Se deja como un ejercicio, a nadir el c odigo necesario al programa anterior para que de como resultado la forma escalonada reducida por las de la matriz ampliada de un sistema. Como siempre, Matlab tiene su propia funci on para obtener formas escalonadas reducidas por las. Se trata de la funci on rref (el nombre es la abreviatura en ingles de Row Reduced Echelon Form).

Bo

rr

>> A A =

ad o

1 2 4 2

3 -1 -3 3

r,j

ua

4 2 2 4

5 3 1 -2

>> EF=rref(A) EF =

n. ji m en ez @
39 18 8 12

%segunda parte, obtenci on de una matriz diagonal mediante eliminaci on %regresiva, Recorremos ahora las columnas en orden inverso empezando por el %final... (Eliminaci on de Gauss Jordan)

.u cm .es

258 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 2 3 4

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

6.4.

M etodos iterativos

Los m etodos iterativos se basan en aproximaci on distinta al problema de la resoluci on de sistemas de ecuaciones lineales. La idea en todos ellos es buscar un m etodo que, a partir de un valor inicial para la soluci on del sistema, vaya ren andolo progresivamente, acerc andose cada vez m as a la soluci on real. La gura 6.4, muestra un diagrama de ujo general para todos los m etodos iterativos de resoluci on de sistemas.

Calculamos xs+1 = M (xs )

es xs+1 xs tol? No

Bo

Siguiendo el diagrama de ujo, el primer paso, es proponer un vector con soluciones del sistema. Si se conocen valores pr oximos a las soluciones reales se eligen dichos valores como soluci on inicial. Si, como es habitual, no se tiene idea alguna de cuales son las soluciones, lo m as habitual es empezar con el vector = 0, 0 0 x0 = . . .

rr

ad o

r,j

Figura 6.4: Diagrama de ujo general de los m etodos iterativos para resolver sistemas de ecuaciones. La funci on M (x) es la que especica en cada caso el m etodo.

ua

A partir de la primera soluci on, se calcula una segunda, siguiendo la especicaciones concretas del m etodo que se est e usando. En el diagrama de ujo se ha representado de modo gen erico el m etodo mediante la funci on M (). Dedicaremos buena parte de esta secci on a estudiar algunos de los m etodos m as usuales. Una vez que se tienen dos soluciones se comparan. Para ello, se ha utilizado el m odulo del vector diferencia de las dos soluciones. Este m odulo nos da una medida de cuanto se parecen entre

n. ji m en ez @
S xs = xs+1 0

convergencia: terminar

Soluci on inicial xs = x0

.u cm .es

6.4. METODOS ITERATIVOS

259

6.4.1.

El m etodo de Jacobi.

Supongamos que supieramos de antemano el valor de x2 , para obtener x1 , bastar a entonces despejar x1 , por ejemplo de la primera ecuaci on, y sustituir el valor conocido de x2 , x1 = 5 3x2

ua

De modo an alogo, si conoci eramos previamente x1 , podr amos despejar x2 , ahora por ejemplo de la segunda ecuaci on, y sustituir el valor conocido de x1 , x2 = 2 2x1 2
(0)

ad o

El m etodo de Jacobi la que hace es suponer conocido el valor de x2 , x2 = 0, y con el obtener (1) un valor de x1 , (1) (0) x1 = 5 3x2 = 5 3 0 = 5 a continuaci on supone conocido el valor de x1 , x1
(0)

r,j

rr

x2 ,

Bo

n. ji m en ez @
x1 + 3 x2 = 5 2x1 2x2 = 2 x2 =
(1)

Obtenci on del algoritmo. Empezaremos por introducir el m etodo iterativo de Jacobi, por ser el m as intuitivo de todos. Para introducirlo, emplearemos un ejemplo sencillo. Supongamos que queremos resolver el siguiente sistema de ecuaciones,

= 0 y con el obtiene un nuevo valor para

2 2 x0 220 1 = = 1 2 2
(1)

En el siguiente paso, tomamos los valores obtenidos, x1 calcular unos nuevos valores,
(2) (1)

y x2

x1 = 5 3 x2 = 5 + 3 = 8 x2 =
(2)

2 2x1 2

(1)

2 10 =4 2

s
(2)

como punto de partida para

.u cm .es

s las dos soluciones. Si la diferencia es sucientemente peque na, menor que un cierto valor de tolerancia tol damos la soluci on por buena y el algoritmo termina. En caso contrario, copiamos la u ltima soluci on obtenida en la pen ultima y repetimos todo el proceso. El bucle se repite hasta que se cumpla la condici on de que el m odulo de la diferencia de dos soluciones sucesivas sea menor que la tolerancia establecida. Una pregunta que surge de modo inmediato del esquema general que acabamos de introducir es si el proceso descrito converge, y, caso de hacerlo si converge a la soluci on correcta del sistema. La respuesta es que los sistemas iterativos no siempre convergen, es decir, no esta garantizado que tras un cierto n umero de iteraciones la diferencia entre dos soluciones sucesivas sea menor que un valor de tolerancia arbitrario. La convergencia, como veremos m as adelante, depender a tanto del sistema que se quiere resolver como del m etodo iterativo empleado. Por otro lado, si se cumple siempre que si el m etodo converge, las sucesivas soluciones obtenidas se van aproximando a la soluci on real del sistema.

260 y en general,

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

x1

(s+1)

= 5 3 x2 =

(s) (s)

Si repetimos el mismo c alculo diez veces obtenemos, x1


(10)

= 2,008 = 1,004

(10) x2

Si lo repetimos veinte veces, x1


(20)

La soluci on exacta del sistema es x1 = 2, x2 = 1. Seg un aumentamos el n umero de iteraciones, vemos c omo las soluciones obtenidas se aproximan cada vez m as a la soluci on real. A partir del ejemplo, podemos generalizar el m etodo de Jacobi para un sistema cualquiera de n ecuaciones con n incognitas, a11 x1 + a12 x2 + + a1n xn = b1

a21 x1 + a22 x2 + + a2n xn = b2

an1 x1 + an2 x2 + + ann xn = bn

La soluci on para la inc ognita xi en la iteraci on, s + 1 a partir de la soluci onnes obtenidas en la iteraci on s toma la forma,

r,j

ua

A continuaci on, incluimos el c odigo correspondiente al c alculo de una iteraci on del algoritmo de Jacobi. Este c odigo es el que corresponde, para el m etodo de jacobi, a la funci on M () del diagrama de ujo de la gura 6.4.

Bo

rr

xs=xs1; %volvemos a inicializar el vector de soluciones al valor de los %terminos independientes xs1=b; for i=1:n %bucle para recorrer todas las ecuaciones for j=1:i-1 %restamos la contribucion de todas las incognitas xs1(i)=xs1(i)-A(i,j)*xs(j); %por encima de x(i) end for j=i+1:n %restamos la contribuci on de todas las incognitas %por debajo de x(i)

ad o

n. ji m en ez @
(20) x2

= 1,99996 = 0,99998

(s+1) xi

bi

j =i

aij xj

(s)

aii

.u cm .es

x2

(s+1)

2 2x1 2

6.4. METODOS ITERATIVOS xs1(i)=xs1(i)-A(i,j)*xs(j); end %dividimos por el elemento de la diagonal, xs1(i)=xs1(i)/A(i,i); end

261

Expresi on matricial para el m etodo de Jacobi. El m etodo de Jacobi que acabamos de exponer puede expresarse en forma tambi en en forma matricial. En Matlab, el empleo en forma matricial, tiene la ventaja de ahorrar bucles en el c alculo de la nueva soluci on a partir de la anterior. Si expresamos un sistema general de orden n en forma matricial,
A x b

Podr amos separar en tres sumandos la expresi on de la izquierda del sistema: una matriz diagonal D, una matriz estrictamente diagonal superior U , y una matriz estrictamente triangular inferior L, a11 0 . . . 0 0 a22 . . . 0
D U L

n. ji m en ez @
a12 0 . . . 0 0 .. . a1n 0 a21 a2n + . . . . . . 0 0 0 . . . an1 an2
x

a11 a21 . . . an1

an2

ann

xn

s
bn .. .
x b

a12 a22 . . .

.. .

a1n x1 b1 a2n x 2 b2 . = . . . . . . . .

.. .

0 0 . . . ann

0 0 + . . .

Si pasamos los t erminos correspondientes a las dos matrices triangulares al lado derecho de la igualdad,

ad o

a11 0 . . . 0

0 a22 . . . 0

r,j

.. .

rr

ua

0 0 . . . ann

x1 x2 . = . . xn
b

a12 0 . . . 0

b1 0 b2 0 = . . . . . . bn 0

.. .

a1n 0 a21 a2n + . . . . . . 0 an1

Bo

0 0 . . . an2

Si Examinamos las las de la matrices resultantes a uno y otro lado del igual, es f acil ver que de cada una de ellas coincide con la expresi on correspondiente a una iteraci on de del m etodo de

.u cm .es
0 x1 b1 0 x 2 b2 . = . . . . . . . . 0 xn bn
L

.. .

0 x1 0 x2 . . . . . . 0 xn

262

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Jacobi, sin mas que cambiar los valores de las inc ognitas a la izquierda del igual por x(s+1) y la (s) derecha por x ,
xs+1

an1

an2

y multiplicar a ambos lados por la inversa de la matriz D2 ,


xs+1 D 1

n. ji m en ez @

s
an1

b1 0 b2 0 = . . . . . . bn 0

a12 0 . . .

.. .

a1n 0 a21 a2n + . . . . . .

0 0 . . .

.. .

(s+1) x1 a11 (s+1) 0 x2 . = . . . . . (s+1) 0 xn

0 a22 . . . 0

.. .

1 b1 0 b2 0 . . . . . . ann bn 0 0 0 . . .

a12 0 . . . 0

.. .

a1n 0 a21 a2n + . . . . . . 0

que equivale al c odigo para una iteraci on y, por tanto a la funci on M () del m etodo de Jacobi. Si analizamos la ecuaci on anterior, observamos que el t ermino, D1 b es jo. Es decir, permanece igual en todas la iteraciones que necesitemos realizar para que la soluci on converja. El segundo t ermino, tiene tambi en una parte ja, D1 (L + U ) Se trata de una matriz de orden n, igual al del sistema que tratamos de resolver, Esta matriz, recibe el nombre de matriz del m etodo, se suele representar por la letra H y como veremos despu es esta directamente relaciona con la convergencia del m etodo. Si queremos implemetar en Matlab el m etodo de Jacobi en forma matricial, lo mas eciente es que calculemos en primer lugar las matrices D, L, U, f = D1 b y H . Una vez calculadas, empleamos el resultado para aproximar la soluci on iterativamente. Veamos con con un ejemplo como construir la matrices en Matlab. Supongamos que tenemos el siguiente sistema, 4 2 1 x1 5 3 5 1 x2 = 4 1 1 6 x3 17

Bo

2 D es una matriz diagonal su inversa se calcula trivialmente sin m as cambiar cada elemento de la diagonal por su inverso.

rr

ad o

r,j

ua

El resultado nal es una operaci on matricial,

x(s+1) = D1 b D1 (L + U ) xs

.u cm .es

xs

a11 0 . . .

0 a22 . . .

.. .

(s+1) x1 0 (s+1) 0 x2 . . = . . . . (s+1) ann xn

s 0 x 1 s 0 x2 . . . . . . xs 0 n

.. .

xs

0 0 . . . an2

s 0 x 1 s 0 x2 . . . . . . 0 xs n

6.4. METODOS ITERATIVOS

263

En primer lugar, calculamos la matriz D, a partir de la matriz de coecientes del sistema, empleando el comando de Matlab diag. Aplicando diag a una matriz extraemos en un vector los elementos de su diagonal, A = 4 2 3 -5 1 -1 >> d=diag(A) d = 4 -5 6 -1 1 6

Aplicando diag a un vector construimos una matriz con los elementos del vector colocados sobre la diagonal de la matriz. El resto de los elementos son cero. >> D=diag(d) D = 4 0 0 0 -5 0 0 0 6

Si aplicamos dos veces diag sobre la matriz de coecientes de un sistema, obtenemos directamente la matriz D, >> D=diag(diag(A)) D = 4 0 0 0 -5 0 0 0 6

>> TU=triu(A) TU =

rr

ad o

Para calcular las matrices L y U , podemos emplear los comandos de Matlab, triu y tril que extraen una matriz triangular superior y una matriz triangular inferior, respectivamente, a partir de una matriz dada.

Bo

4 0 0

2 -5 0

>> TL=tril(A) TL = 4 3 1 0 -5 -1 0 0 6

r,j

-1 1 6

ua

n. ji m en ez @

.u cm .es

264

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Las matrices L y U son estrictamente triangulares superior e inferior, Podemos obtenerlas restando a las matrices que acabamos de obtener la matriz D, >> U=triu(A)-D U = 0 0 0 2 0 0 -1 1 0

>> L=tril(A)-D L = 0 3 1 0 0 -1 0 0 0

>> U=A-tril(A) U = 0 0 0 2 0 0 -1 1 0

>> L=A-triu(A) L = 0 3 1 0 0 -1 0 0 0

Construimos a continuaci on el vector f , >> f=D^-1*b f = 1.2500 0.8000 2.8333

Bo

>> H=-D^-1*(L+U) H = 0 0.6000 -0.1667 -0.5000 0 0.1667 0.2500 0.2000 0

rr

Construimos la matriz del sistema,

ad o

r,j

ua

n. ji m en ez @

Tambi en podemos obtenerlas directamente, empleando solo la matriz de coecientes,

.u cm .es

6.4. METODOS ITERATIVOS

265

A partir de las matrices construidas, el c odigo para calcular una iteraci on por el m etodo de Jacobi ser a simplemente, xs1=f+H*xs En el siguiente fragmento de c odigo se re unen todas las operaciones descritas, ... ... %obtenemos el tama~ no del sistema,

%calculamos la primera iteraci on, xs1=f+H*xs; %calculamos la diferencia entre las dos soluciones, tolf=norm(xs1-xs); %ponemos a 1 el contador de iteraciones. it=1;

Obtenci on del algoritmo. Este m etodo aplica una mejora, sencilla y l ogica al m etodo de Jacobi que acabamos de estudiar. Si volvemos a escribir la expresi on general para calcular una iteraci on de una de las componentes de la soluci on de un sistema por el m etodo de Jacobi,

rr

ad o

6.4.2.

El m etodo de Gauss-Seidel.

r,j

%a partir de aqu vendr a el c odigo necesario para calcular las %sucesivas iteraciones hasta que la soluci on converja ... ...

ua

Bo

n. ji m en ez @
xi
(s+1)

n=size(A,1); %creamos un vector de soluciones inicial, xs=zeros(n,1); %creamos las matrices del m etodo D=diag(diag(A)); U=A-tril(A); L=A-triu(A); %ALternativamente para jacobi podemos crear una solo matriz equivalenta a %L+U, LpU=A-D f=D^-1*b; H=-D^-1*(L+U);

bi
(s) xi

j =i

aij xj

(s)

aii
(s+1)

Observamos que para obtener el t ermino empleamos todos los t erminos xj , j = i de la iteraci on anterior. Sin embargo, es f acil darse cuenta que, como el algoritmo va caculando las componentes de cada iteraci on por orden, cuando vamos a calcular xi (s + 1), disponemos ya del resultado de todas las componentes anteriores de la soluci on para la iteraci on s + 1. Es decir, (s+1), l<i sabemos ya c ual es el resultado de xl . Si el algoritmo converge, esta soluciones ser an mejores que las obtenidas en la iteraci on anterior. Si las usamos para calcular xi (s + 1), el resultado que obtendremos, ser a m as proximo a la soluci on exacta y por tanto el algoritmo converge mas deprisa.

.u cm .es

266

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES La idea, por tanto ser a: Para calcular x1 (s + 1) procedemos igual que en el m etodo de Jacobi.
(s+1) x1

bi

n j =2

a1j xj

(s)

a11

Para calcular x2 (s + 1) usamos la soluci on que acabamos de obtener x1 (s + 1) y todas las restantes soluciones de las iteraciones de la iteraciones anteriores,
(s+1) x2

+1 bi x s 1

n j =3

a2j xj

(s)

a22

Para calcular x3 (s + 1) usamos las dos soluciones que acabamos de obtener x1 (s + 1), x2 (s + 1) y todas las restantes soluciones de las iteraciones de la iteraciones anteriores, x3
(s+1)

Y para una componente i cualquiera de la soluci on, obtenemos la expresi on expresi on general del m etodo de Gauss-Seidel,
(s+1) xi

El siguiente c odigo de Matlab implementa una iteraci on del m etodo de Gauss-Seidel y puede considerarse como la funcion M (), incluida en el diagrama de ujo de la gura 6.4, para dicho m etodo. xs=xs1; %volvemos a inicializar el vector de soluciones al valor de los %terminos independientes xs1=b; for i=1:n %bucle para recorrer todas las ecuaciones for j=1:i-1 %restamos la contribucion de todas las incognitas xs1(i)=xs1(i)-A(i,j)*xs1(j); %por encima de x(i) end for j=i+1:n %restamos la contribuci on de todas las incognitas %por debajo de x(i) xs1(i)=xs1(i)-A(i,j)*xs(j); end %dividimos por el elemento de la diagonal, xs1(i)=xs1(i)/A(i,i); end %calculamos la diferencia entre las dos soluciones, tolf=norm(xs1-xs); %incrementamos el contador de iteraciones it=it+1;

Bo

Es interesante destacar, que el u nico cambio en todo el c odigo respecto al m etodo de Jacobi es la sustituci on de la variable xs(j) por la variable xs1(j) al nal del primer bucle for anidado.

rr

ad o

r,j

ua

n. ji m en ez @
a33 bi
j<i

+1 +1 bi x s xs 1 2

n j =4

a3j xj

(s)

aij xj

(s+1)

j>i

aij xj

(s)

aii

.u cm .es

6.4. METODOS ITERATIVOS

267

Forma matricial del m etodo de Gauss-Seidel. De m odo an alogo a c omo hicimos para el m etodo de Jacobi, es posible obtener una soluci on matricial para el m etodo de Gauss-Seidel. Supongamos que realizamos la misma descomposici on en sumandos de la matriz de coecientes que empleamos para el m etodo de Jacobi,

En este caso, en c alculo de cada componente de la soluci on en una iteraci on intervienen las componentes de la iteraci on anterior que est an por debajo de la que queremos calcular, por tanto solo deberemos pasar a la derecha de la igualdad, la matriz U , Que contiene los coecientes que multiplican a dichas componentes, (D + L + U ) x = b (D + L) x = b U x

x(s+1) = (D + L)1 b (D + L)1 U x(s) Igual que hemos hecho en con el m etodo de Jacobi, podemos identicar las partes jas que no cambian al iterar: f = (D + L)1 b y la matriz del m etodo, qu en este caso es, H = (D + L)1 U . El siguiente fragmento de c odigo muestra la construcci on de las matrices necesarias para implementar en Matlab el m etodo de Gauss-Seidel, ... ... %obtenemos el tama~ no del sistema,

Bo

rr

f=(D+L)^(-1)*b; H=-(D+L)^(-1)*U

%calculamos la primera iteraci on xs1=f+H*xs; %calculamos la diferencia entre las dos soluciones, tolf=norm(xs1-xs); %ponemos a 1 el contador de iteraciones. it=1; %A partir de aqu vendr a el c odigo necesario para calcular las %Sucesivas iteraciones hasta que la soluci on converja.

ad o

D=diag(diag(A)); U=A-tril(A); L=A-triu(A);

r,j

n=size(A,1); %creamos un vector de soluciones inicial, xs=zeros(n,1); %calculamos las matrices necesarias

ua

n. ji m en ez @

Sustituyendo x a cada lado de la igualdad por x(s+1) y x(s) y multiplicando por la inversa de D + U a ambos lados, obtenemos la expresi on en forma matricial del c alculo de una iteraci on por el m etodo de Gauss-Seidel,

.u cm .es

A x = b (D + L + U ) x = b

268

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Empleando en ambos casos una tolerancia tol = 0,00001, el m etodo de Jacobi necesita 23 iteraciones para lograr una soluci on, mientras que el de Gauss-Seidel solo necesita 13. La gura 6.5, muestra la evoluci on de la tolerancia tol = x(s+1) x(s) , en funci on del n umero de iteraci on. En ambos casos el valor inicial de la soluci on se tom o como el vector (0, 0, 0)T .

3.5

tol.=||x(s+1)x(s)||

2.5

tol.=||x(s+1)x(s)||

1.5

0.5

ua

n. ji m en ez @
x 10
3

Detalle de las ltimas iteraciones, (tol<0.00001)

4 3 2 1 0

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 n de iteracin 11 12 13 14 n de iteracin 15 16 17 18 19 20 21 22 23 24

10

Bo

El amortiguamiento consiste en modicar un m etodo iterativo, de modo que en cada iteraci on, se da como soluci on, la media ponderada de los resultados de dos iteraciones sucesivas, x(s+1) = x + (1 ) x(s)

Donde x() representa el valor que se obtendr a aplicando una iteraci on del m etodo a x(s) , es (s+1) decir ser a el valor de x si no se aplica amortiguamiento. El par ametro recibe el nombre de factor de relajamiento. Si 0 < < 1 se trata de un m etodo de subrelajaci on. Su uso permite resolver sistemas que no convergen si se usa el mismo m etodo si relajaci on. Si w > 0 el m etodo se llama de sobrerelajaci on, permite acelerar la convergencia

rr

6.4.3.

ad o

Figura 6.5: evoluci on de la tolerancia (m odulo de la diferencia entre dos soluciones sucesivas) para un mismo sistema resuelto mediante el m etodo de Gauss-Seidel y el m etodo de Jacobi

Amortiguamiento.

r,j

.u cm .es
GaussSeidel Jacobi

En general, el m etodo de Gauss-Seidel es capaz de obtener soluciones, para un sistema dado y un cierto valor de tolerancia, empleando menos iteraciones que el m etodo de Jacobi. Por ejemplo, si aplicamos ambos m etodos a la resoluci on del sistema, 4 2 1 x1 5 3 5 1 x2 = 4 1 1 6 x3 17

6.4. METODOS ITERATIVOS

269

respecto al mismo m etodo sin relajaci on. Por u ltimo, si hacemos = 1, recuperamos el m etodo original sin relajaci on. El m etodo de Jacobi amortiguado. Se obtiene aplicando el m etodo de relajaci on que acabamos de describir, al m etodo de Jacobi. La expresi on general de una iteraci on del m etodo de Jacobi amortiguando ser a,
x() (s+1)

xi

bi

j =i

aij xj

(s)

aii

+( 1) xs i

Para implementarlo en Matlab, bastar a a nadir al c odigo del m etodo de Jacobi una l nea incluyendo el promedio entre las dos soluciones sucesivas, while norm(xs1-xs)>tol xs=xs1; %volvemos a inicializar el vector de soluciones al valor de los %terminos independientes xs1=b; for i=1:n %bucle para recorrer todas las ecuaciones for j=1:i-1 %restamos la contribucion de todas las incognitas xs1(i)=xs1(i)-A(i,j)*xs(j); %por encima de x(i) end for j=i+1:n %restamos la contribuci on de todas las incognitas %por debajo de x(i) xs1(i)=xs1(i)-A(i,j)*xs(j); end %dividimos por el elemento de la diagonal, xs1(i)=xs1(i)/A(i,i); end %promediamos la soluci on obtenida con la anterior (amortiguamiento) xs1=w*xs1+(1-w)*xs end En forma matricial, la expresi on general del m etodo de Jacobi amortiguado ser a,

r,j

ua

ad o

x(s+1) = D1 b D1 (L + U ) xs +(1 w)x(s)

Si reorganizamos esta expresi on,

rr

x(s+1) = D1 b + (1 w) I w D1 (L + U ) x(s)

Podemos indenticar f acilmente el termino jo, f = D1 b y la matriz del m etodo 1 (1 w) I w D (L + U ) . Para implementar el c odigo del m etodo de Jacobi amortiguado en Matlab, debemos calcular la matriz identidad del tama no de sistema y modicar las expresiones de f y H , ... ... %obtenemos el tama~ no del sistema,

Bo

n. ji m en ez @
x()

.u cm .es

270

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

%a partir de aqu vendr a el c odigo necesario para calcular las %sucesivas iteraciones hasta que la soluci on converja ... ... El m etodo SOR. El m etodo SOR Succesive OverRelaxation se obtiene aplicando amortiguamiento al m etodo de Gauss-Seidel. Aplicando el mismo razonamiento que el caso de Jacobi amortiguado, la expresi on general para una iteraci on del m etodo SOR es,
x()

ua

(s+1) xi

bi

Al igual que en el caso de Jacobi amortiguado, para implementar en Matlab el m etodo SOR es suciente a nadir una l nea que calcule el promedio de dos soluciones sucesivas, xs=xs1; %volvemos a inicializar el vector de soluciones al valor de los %terminos independientes xs1=b; for i=1:n %bucle para recorrer todas las ecuaciones for j=1:i-1 %restamos la contribucion de todas las incognitas xs1(i)=xs1(i)-A(i,j)*xs1(j); %por encima de x(i) end for j=i+1:n %restamos la contribuci on de todas las incognitas %por debajo de x(i) xs1(i)=xs1(i)-A(i,j)*xs(j); end %dividimos por el elemento de la diagonal, xs1(i)=xs1(i)/A(i,i);

Bo

rr

ad o

r,j

n. ji m en ez @
j<i

%calculamos la primera iteraci on, xs1=f+H*xs; %calculamos la diferencia entre las dos soluciones, tolf=norm(xs1-xs); %ponemos a 1 el contador de iteraciones. it=1;

aij xj

(s+1)

j>i

aij xj

(s)

aii

+(1 ) x(s)

.u cm .es

n=size(A,1); %creamos un vector de soluciones inicial, xs=zeros(n,1); %creamos las matrices del m etodo D=diag(diag(A)); U=A-tril(A); L=A-triu(A); I=eye(n); %Alternativamente para jacobi podemos crear una solo matriz equivalenta a %L+U, LpU=A-D f=w*D^-1*b; H=-w*D^-1*(L+U)+(1-w)*I;

6.4. METODOS ITERATIVOS end %amortiguamos la soluci on xs1=w*xs1+(1-w)*xs; %calculamos la diferencia entre las dos soluciones, tolf=norm(xs1-xs); %incrementamos el contador de iteraciones it=it+1;

271

En forma matricial la expresi on para una iteraci on del m etodo SOR ser a,
x()

x(s+1) = (D + L)1 b (D + L)1 U x(s) +(1 ) x(s)

x(s+1) = (D + L)1 b + (1 ) I (D + L)1 U x(s) De nuevo, podemos identicar, f = (D + L)1 b y la matriz del m etodo, H = (1 ) I (D + L)1 El siguiente fragmento de c odigo muestra la obtenci on de f y H para el m etodo SOR, %obtenemos el tama~ no del sistema,

n=size(A,1); %creamos un vector de soluciones inicial, xs=zeros(n,1); %calculamos las matrices necesarias D=diag(diag(A)); U=A-tril(A); L=A-triu(A); I=eye(n);

f=w*(D+L)^(-1)*b; H=(1-w)*I-w*(D+L)^(-1)*U;

%calculamos la primera iteraci on xs1=f+H*xs;

Bo

rr

%calculamos la diferencia entre las dos soluciones, tolf=norm(x-x0); %ponemos a 1 el contador de iteraciones. it=1;

6.4.4.

En la introducci on a los m etodos iterativos dejamos abierta la cuesti on de su convergencia. Vamos a analizar en m as detalle en qu e condiciones podemos asegurar que un m etodo iterativo, aplicado a un sistema de ecuaciones lineales concreto, converge.

ad o

An alisis de convergencia

r,j

ua

n. ji m en ez @

Y tras reordenar,

.u cm .es

272

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

En primer lugar, tenemos que denir qu e entendemos por convergencia. Cuando un m etodo iterativo converge, lo hace en forma asint otica, es decir har a falta un n umero innito de iteraciones para alcanzar la soluci on exacta. x(0) x(1) x(2) x() = x

x(s+1) x(s) C x(s+1) x e(s+1)

Podemos expresar el error de convergencia como, e(s+1) = x(s+1) x = f + H x(s) x Pero la soluci on exacta, si pudiera alcanzarse, cumplir a, x=f +H x

Y si sustituimos en la expresi on del error de convergencia,

e(s+1) = f + H x(s) f H x

Llegamos nalmente a la siguiente expresi on, que relaciona los errores de convergencia de dos iteraciones sucesivas, e(s+1) = H e(s)

ad o

Para que el error disminuya de iteraci on en iteraci on y el m etodo converja, es necesario que la matriz del m etodo H tenga norma-2 menor que la unidad. Supongamos que un sistema de dimension n su matriz del m etodo H , tiene un conjunto de n autovectores linealmente independientes, w1 , w2 , cdots, wn , cada uno asociado a su correspondiente autovalor, 1 , 2 , , n . El error de convergencia, es tambi en un vector de dimensi on n, por tanto podemos expresarlo como una conbinaci on lineal de los n autovectores linealmente independientes de la matriz H . Supongamos que lo hacemos para el error de convergencia e(0) correspondiente al valor inicial de la soluci on x(0) ,

Bo

Si empleamos la ecuaci on deducida antes para la relaci on del error entre dos iteraciones sucesivas y recordando que aplicar una matriz aun autovector, es equivalente a multiplicarlo por el autovalor correspondientes, H wi = i wi , obtnemos para el error de convergencia en la iteraci on s, e(1) = H e(0) = 1 1 w1 + 2 2 w2 + + n n wn
2 2 e(2) = H e(1) = H 2 e(0) = 1 2 1 w1 + 2 2 w2 + + n n wn . . . s s e(s) = H e(s1) = H s e(0) = 1 s 1 w1 + 2 2 w2 + + n n wn

rr

r,j

ua

e(0) = 1 w1 + 2 w2 + + n wn

n. ji m en ez @

Donde e(s+1) representar a el error real de convergencia cometido en la iteraci on s + 1. Tomando como punto de partida el expresi on general del c alculo de una iteraci on en forma matricial, x(s+1) = f + H x(s)

.u cm .es

L ogicamente, es inviable realizar un n umero innito de iteraciones. Por esta raz on, las soluciones de los m etodos iterativos son siempre aproximadas; realizamos un n umero nito de iteraciones hasta cumplir una determinada condici on de convergencia. Como no conocemos la soluci on exacta, imponemos dicha condici on entre dos iteraciones sucesivas,

6.4. METODOS ITERATIVOS

273

Para que el error tienda a cero, e(s) 0 al aumentar s, para cualquier combinaci on inicial de valores i , esto es para cualquier aproximaci on inicial x(0) , es necesario que todos los autovalores de la matriz del m etodo cumplan, |i | < 1 Por tanto, el sistema converge si el radio espectral de la matriz del metodo es menor que la unidad. 3 (H ) < 1 l m e(s) = 0
s

Podemos ahora calcular cuantas iteraciones nos costar a reducir un error inicial por debajo de un determinado valor. Esto depender a de la soluci on inicial y de radio espectral de la matriz del m etodo, e(s) e(s) (h)s e(0) (0) (h)s e as por ejemplo si queremos reducir el error inicial en m d gitos, e(s) m (h)s 10m s (0) log10 ((H )) e

Bo

No converge si tratamos de resolverlo por el m etodo de Jacobi. Sin embargo si es posible obtener su soluci on empleando el m etodo de Jacobi Amortiguado. La gura ?? muestra la evoluci on de la tolerancia para dicho sistema empleando ambos m etodos. Si calculamos el radio espectral de la matriz del m etodo, para el m etodo de Jacobi tendr amos, >> A=[1 2 -1 A = 1
3 El

rr

ad o

La matriz del m etodo juega por tanto un papel fundamental tanto en la convergencia del m etodo, como en la velocidad (n umero de iteraciones) con la que el m etodo converge. Los m etodos amortiguados, permiten modicar la matriz de convergencia, gracias al factor de amortiguamiento , haciendo que sistemas para los que no es posible encontrar una soluci on mediante un m etodo iterativo converjan. Como ejemplo, el sistema, 4 2 1 x1 5 2 5 1 x2 = 4 1 1 3 x3 17

radio espectral de una matriz es el mayor de sus autovalores en valor absoluto. Ver cap tulo anterior 4.

r,j

; 2 -5 1;1 -1 3]

-1

ua

n. ji m en ez @
e(s) cn (h)s wn = cn s n wn

Velocidad de convergencia. Para un n umero de iteraciones sucientemente grande, el radio espectral de la matriz del m etodo nos da la velocidad de convergencia. Esto es debido a que el resto de los t erminos del error, asociados a otros autovalores m as peque nos tienden a cero m as deprisa. Por tanto podemos hacer la siguiente aproximaci on, donde estamos suponiendo que el autovalor n es el radio espectral,

.u cm .es

274

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

18 16 14 tol.=||x(s+1)x(s)|| 12 10 8 6 4 2 0 0 5 Jacobi amortiguado. = 0.5 Jacobi

n. ji m en ez @
10 15 20 n de iteracin 25

Figura 6.6: Evoluci on de la tolerancia para un mismo sistema empleando el metodo de Jacobi (diverge) y el de Jacobi amortiguado (converge).

2 1

-5 -1

1 3

>> H=diag(diag(A))^-1*(A-diag(diag(A))) H = 0 -0.4000 0.3333 >> l=eig(H) l = 2.0000 0 -0.3333

Bo

0.1187 + 1.0531i 0.1187 - 1.0531i -0.2374

>> radio_espectral=max(abs(l)) radio_espectral = 1.0597 El radio espectral es mayor que la unidad y el m etodo no converge. SI repetimos el c alculo para el m etodo de Jacobi amortiguado, con = 0,5

rr

ad o

r,j

ua

-1.0000 -0.2000 0

s
30

.u cm .es

6.4. METODOS ITERATIVOS >> H=(1-0.5)*eye(3)-0.5*diag(diag(A))^-1*(A-diag(diag(A))) H = 0.5000 0.2000 -0.1667 >> l=eig(H) l = 0.4406 + 0.5265i 0.4406 - 0.5265i 0.6187 >> radio_espectral=max(abs(l)) radio_espectral = 0.6866 -1.0000 0.5000 0.1667 0.5000 0.1000 0.5000

275

El radio espectral es ahora menor que la unidad y el m etodo converge. Por u ltimo indicar que cualquiera de los m etodos iterativos descrito converge para un sistema que cumpla que su matriz de coecientes es estrictamente diagonal dominante.

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

276

CAP ITULO 6. SISTEMAS DE ECUACIONES LINEALES

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 7

Interpolaci on y ajuste de funciones

En este cap tulo vamos a estudiar distintos m etodos de aproximaci on polin omica. En t erminos generales el problema consiste en sustituir una funci on f (x) por un polinomio, f (x) p(x) = a0 + a1 x + a2 x2 + a3 x3 + + an xn Para obtener la aproximaci on podemos partir de la ecuaci on que dene f (x), por ejemplo la funci on error,
x 2 2 et dt erf (x) = 0 O bien, puede suceder que solo conozcamos algunos valores de la funci on, por ejemplo a trav es de una tabla de datos,

La aproximaci on de una funci on por un polinomio, tiene ventajas e inconvenientes. Probablemente la principal ventaja, desde el punto de vista del c omputo, es que un polinomio es f acil de evaluar mediante un ordenador ya que solo involucra operaciones aritm eticas sencillas. Adem as, los polinomios son f aciles de derivar e integrar, dando lugar a otros polinomios. En cuanto a los inconvenientes hay que citar el crecimiento hacia innito o menos innito de cualquier polinomio para valores de la variable independiente alejados del origen. Esto puede da lugar en algunos casos a errores de redondeo dif ciles de manejar. Y hacer muy dif cil la aproximaci on para funciones no crecientes. Vamos a estudiar tres m etodos distintos; en primer lugar veremos la aproximaci on mediante el polinomio de Taylor, u til para aproximar un polinomio en las inmediaciones de un punto. A continuaci on, veremos la interpolaci on polin omica y, por u ltimo, estudiaremos el ajuste polin omico por m nimos cuadrados. El uso de uno u otro de estos m etodos esta asociado a la informaci on disponible sobre la funci on que de desea aproximar y al uso que se desea hacer de la aproximaci on realizada. 277

Bo

rr

ad o

r,j

ua

n. ji m en ez @
Tabla 7.1: x 0,0 0,1 0,2 0,3 0,4 0,5 f (x) = erf (x) f (x) 0,0000 0,1125 0,2227 0,3286 0,4284 0,5205

.u cm .es

278

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

7.1.

El polinomio de Taylor.

Supongamos una funci on innitamente derivable en un entorno de un punto x0 . Su expansi on en serie de Taylor se dene como, f (x) = f (x0 )+f (x0 )(xx0 )+f (x0 )(xx0 )2 + +

Donde z es un punto sin determinar situado entre x y x0 . Si eliminamos el u ltimo t ermino, la funci on puede aproximarse por un polinomio de grado n 1 (n) f (x0 ) (x x0 )n n! El error cometido al aproximar una funci on por un polinomio de Taylor de grado n, viene dado por el t ermino, f (x) f (x0 ) + f (x0 ) (x x0 ) + f (x0 ) (x x0 )2 + + e(x) = |f (x) p(x)| =

1 1 ex 1 + x + x2 + + xn = 2 n!

y el del logaritmo natural, desarrollado en torno al punto x0 = 1, (1)n+1 1 (x 1)n = log(x) (x 1) (x 1)2 + + 2 n

Bo

function y=taylorln(x,n) %Esta funci on aproxima el valor del logaritmo natural de un numero %empleando para ello un polinomio de Taylor de grado n desarrollado en %torno a x=1. Las variables de entrada son: x, valor para el que se desea %calcular el logaritmo. n Grado del polinomio que se emplear a en el %c alculo. La variable de salida y es el logaritmo de x. (nota si x %es un vector, calcular a el logaritmo para todos los puntos del vector) %iniciliazamos la variable de salida y y=0; %construimos un b ucle para ir a~ nadiendo t erminos al desarrollo for i=1:n y=y+(-1)^(i+1)*(x-1).^i/i; end

rr

ad o

r,j

La existencia de un t ermino general para los desarrollos de Taylor de muchas funciones elementales lo hace particularmente atractivo para aproximar funciones mediante un ordenador. As por ejemplo, la siguiente funcion de Matlab, aproxima el valor del logaritmo natural en un punto, empleando un polinomio de Taylor del grado que se desee,

ua

n. ji m en ez @
n i=0

1 f (n+1) (z ) (x x0 )n+1 (n + 1)! Es f acil deducir de la ecuaci on que el error disminuye con el grado del polinomio empleado y aumenta con la distancia entre x y x0 . Adem as cuanto m as suave es la funci on (derivadas peque nas) mejor es la aproximaci on. Por ejemplo para la funci on exponencial, el polinomio de Taylor de orden n desarrollado en torno al punto x0 = 0 es, 1 i x i!

i=1

(1)i+1 (x 1)i i

.u cm .es

1 (n) 1 f (x0 )(xx0 )n + f (n+1) (z )(xx0 )n+1 n! (n + 1)!

7.1. EL POLINOMIO DE TAYLOR.

279

La aproximaci on funciona razonablemente bien para puntos comprendidos en el intervalo 0 < x < 2. La gura 7.1 muestra los resultados obtenidos en dicho intervalo para polinomios de Taylor del logaritmo natural de grados 2, 5, 10 20. La linea continua azul representa el valor del logaritmo obtenido con la funcion de Matlab log.

x2 x3 x5 0 x10 x20 log(x)

ad o

r,j

ua

0.2

n. ji m en ez @
0.4 0.6 0.8 1 x 1.2 1.4 1.6 1.8 2

Bo

rr

Figura 7.1: Comparaci on entre resultados obtenidos para polinomios de Taylor del logaritmo natural de grados 2, 3, 5, 10, 20

Particularmente atractivas son las aproximaciones de las funciones sin(x) y cos(x). Si desarrollamos en torno a x0 = 0, La serie del coseno solo tendr a potencias pares mientras que la del seno solo tendr a potencias impares,

.u cm .es

280

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

cos(x)
i=0 n

(1)i 2i x (2i)!

i=0

1 x
2

x4 x6 0.5 x8 cos(x)

0.5

1.5 4

n. ji m en ez @
2 1 0 x 1 2 3

(a) cos(x), polinomios 2, 4, 6 y 8 grados

1 0.8 0.6 0.4 0.2 0

rr

ad o

r,j

0.2 0.4 0.6 0.8 1

ua

Bo

(b) sin(x), polinomios 3, 5, 7 y 9 grados

Figura 7.2: Polynomios de Taylor para las funciones coseno y seno

En las guras 7.2(a) y 7.2(b) Se muestran las aproximaciones mediante polinomios de Taylor de las funciones coseno y seno. Para el coseno se han empleado polinomios hasta grado 8 y para el seno hasta grado 9. En ambos casos se dan los resultados correspondientes a un periodo (, ). Si se comparan los resultados con las funciones cos y sin, suministradas por Matlab, puede observarse

s
4

x3 x5 x
7

x9 sin(x)

.u cm .es

sin(x)

(1)i 2i+1 x (2i + 1)!

POLINOMIAL. 7.2. INTERPOLACION

281

que la aproximaci on es bastante buena para los polinomios de mayor grado empleados en cada caso.

7.2.

Interpolaci on polinomial.

S entiende por interpolaci on el proceso por el cual, dado un conjunto de pares de puntos (x0 , y0 ), (x1 , y1 ), (xn , yn ) se obtiene una funci on f (x), tal que, yi = f (xi ), para cada par de puntos (xi , yi ) del conjunto. Si, en particular, la funci on empleada es un polinomio f (x) p(x), entonces se trata de interpolaci on polin omica.

7.2.1.

La matriz de Vandermonde

Supongamos que tenemos un conjunto de pares de puntos A, x x0 x1 x2 . . . f (x) y0 y1 y2 . . . yn

Para que un polinomio de orden n,

r,j

ad o

pase por todos los pares de A debe cumplir,


n yi = a0 + a1 xi + a2 x2 i + + an xi , (xi , yi ) A

Bo

rr

Es decir, obtendr amos un sistema de n ecuaciones lineales, una para cada par de valores, en la que las inc ognitas son precisamente los n coecientes ai del polinomio. Por ejemplo para los puntos, x 1 2 3 Obtendr amos, f (x) 2 1 2

ua

n. ji m en ez @
xn p(x) = a0 + a1 x + a2 x2 + + an xn

Teorema de unicidad. Dado un conjunto (x0 , y0 ), (x1 , y1 ), (xn , yn ) de n + 1 pares de puntos, tales que todos los valores xi de dicho conjuntos son diferentes entre s , solo existe un polinomio p(x) de grado n, tal que yi = f (xi ) para todos los pares de puntos del conjunto. Si tratamos de interpolar los puntos con un polinomio de grado menor que n, es posible que no encontremos ninguno que pase por todos los puntos. Si, por el contrario empleamos un polinomio de grado mayor que n, nos encontramos con que no es u nico. Por u ltimo si el polinomio empleado es de grado n, entonces ser a el mimo con independencia del m etodo que empleemos para construirlo.

.u cm .es

282

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

a0 + a1 1 + a2 12 = 2 a0 + a1 2 + a2 22 = 1 a0 + a1 3 + a2 32 = 2 que podr amos expresar en forma 1 1 1 matricial como, 1 12 a0 2 2 22 a1 = 1 3 32 a2 2

xn

La matriz de coecientes del sistema resultante recibe el nombre de matriz de Vandermonde. Est a formada por la n primeras potencias de cada uno de los valores de la variable independiente, colocados por las. Es evidente que cuanto mayor es el n umero de datos, mayor tender a a ser la diferencia de tama no entre los elementos de cada la. Por ello, en la mayor a de los casos, resulta ser una matriz mal condicionada para resolver el sistema num ericamente. En la pr actica, para obtener el polinomio interpolador, se emplean otros m etodos alternativos,

7.2.2.

El polinomio interpolador de Lagrange.

A partir de los valores x0 , x1 , , xn , se construye el siguiente conjunto de n + 1 polinomio de grado n


n

lj (x) =
k=0 k=j

x xk (x x0 )(x x1 ) (x xj 1 )(x xj +1 ) (x xn ) = xj xk (xj x0 )(xj x1 ) (xj xj 1 )(xj xj +1 ) (xj xn )

ad o

Los polinomios as denidos cumplen una interesante propiedad en relaci on con los valores x0 , x1 , , xn , empleados para cosntruirlos, lj (xi ) = 1, i = j 0, i = j

Bo

A partir de estos polinomios podemos construir ahora el siguiente polinomio de interpolaci on empleando las im agenes y0 , y1 , yn correspondientes a los valores x0 , x1 , , xn ,
n

rr

r,j

ua

Efectivamente, es f acil comprobar que, tal y como se ha construido, este polinomio pasa por los pares de puntos xi , yi , puesto que p(xi ) = yi . El siguiente c odigo de Matlab calcula el valor en un punto x cualquiera del polinomio de interpolaci on de Lagrange para un conjunto de puntos.

n. ji m en ez @
x2 n xn n an yn p(x) =
j =0

Y en general, para n pares de datos, 1 x0 x2 0 1 x1 x2 1 . . . . . . . . .

.. .

y0 a0 xn 0 y2 xn 1 a1 . = . . . . . . . .

lj ( x ) y j

.u cm .es

7.3. DIFERENCIAS DIVIDIDAS. function y1=Lagrange(x,y,x1) %este programa obtiene el valor interpolado y1 correspondiente al valor x1 %empleando el polinomio interpolador de Lagrange de grado n, obtenido a %partir de los vectores x e y (de longitud n)

283

%sumamos la contribuci on del polinomio de Lagrange lj y1=y1+lj*y(j); end

El m etodo de las diferencias divididas, permite obtener el polinomio de interpolaci on en un n umero menor de operaciones que en el caso del polinomio de Lagrange y adem as, el c alculo se hace escalonadamente, aprovechando todos los resultados anteriores cuando se a nade al polinomio la contribuci on de un nuevo dato.

Bo

rr

pn (x) = a0 +(x x0 ) a1 +(x x0 ) (x x1 ) a2 + +(x x0 ) (x x1 ) (x xn2 ) (x xn1 ) an

Donde, como siempre, (x0 , y0 ), (x1 , y1 ), (xn , yn ), representan los datos para los que se quiere calcular el polinomio interpolador de grado n. Si sustituimos las datos en el polinomio, llegamos a un sistema de ecuaciones, triangular inferior, en el que las inc ognitas son los coecientes del

ad o

El polinomio de orden n de diferencias divididas se construye de la siguiente manera,

r,j

Tanto el m etodo de la matriz de Vandermonde como el de los polinomios de Lagrange, presentan el inconveniente de que si se a nade un dato m as (xn+1 , yn+1 ) a la colecci on de datos ya existentes, es preciso recalcular el polinomio de interpolaci on desde el principio.

ua

7.3.

Diferencias divididas.

n. ji m en ez @

n=length(x); %inicializamos la variable de salida y1=0; %construimos el valor a partir de los polinomios de Lagrange, for j=1:n %inicializamos el polinomio de Lagrange correspondiente al dato i lj=1; %y lo calculamos... for i=1:j-1 lj=lj*(x1-x(i))/(x(i)-x(j)); end for i=j+1:n lj=lj*(x1-x(i))/(x(i)-x(j)); end

.u cm .es

%obtenemos el tama~ no del conjunto de datos,

284 polinomio. a0 a0 + (x1 x0 )a1

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

= y0 = y1 = y2

a0 + (x2 x0 )a1 + (x2 x0 )(x2 x1 )a2 a0 + (xn x0 )a1 + (xn x0 )(xn x1 )a2 + + (x xn2 )(x xn1 )an

Este sistema se resuelve expl citamente empleando un esquema de diferencias divididas. La diferencia divida de primer orden entre dos puntos (x0 , y0 ) y (x1 , y1 ) se dene como, f [x0 , x1 ] = y1 y0 x1 x0

f [x0 , x1 , x2 ] =

f [x1 , x2 , , xn ] f [x0 , x1 , , xn1 ] xi x0 Si despejamos por sustituci on progresiva los coecientes del polinomio de interpolaci on del sistema triangular inferior obtenido, cada coeciente puede asociarse a una diferencia dividida, f [x0 , x1 , , xi ] = a0 = f [x0 ] = y0 a1 = f [x0 , x1 ] . . .

r,j

Por tanto, podemos obtener directamente los coecientes del polinomio calculando las diferencias divididas. Veamos un ejemplo empleando el siguiente conjunto de cuatro datos,

ad o

ua

Bo

Habitualmente, se construye a partir de los datos una tabla, como la 7.2, de diferencias divididas. Las primera columna contiene los valores de la variable x, la siguiente los valores de las diferencias divididas de orden cero (valores de y ). A partir de la segunda, las siguiente columnas contienen las diferencias dividas de los elementos de la columna anterior, calculados entre los elementos que ocupan las consecutivas. La tabla va perdiendo cada vez una la, hasta llegar a la diferencia dividida de orden n de todos los datos iniciales. Los coecientes del polinomio de diferencias divididas se corresponden con los elementos de la primera la de la tabla. Por lo que en nuestro ejemplo el polinomio resultante ser a,

rr

n. ji m en ez @
ai = f [x0 , x1 , , xi ] . . . an = f [x0 , x1 , , xn ] x y 0 1 1 -1 3 2 4 3

f [x1 , x0 ] f [x0 , x1 ] x2 x0 y, en general deniremos la diferencia dividida de orden i para i + 1 puntos como,

Para tres puntos se dene la diferencia dividida de segundo orden como, (x0 , y0 ), (x1 , y1 ) y (x2 , y2 )

.u cm .es
= yn

7.3. DIFERENCIAS DIVIDIDAS.

285

function a=difdiv(x,y) %este polinomio permite obtener los coeficientes del polinomio de %diferencias divididas que interpola los datos contenidos el los vectores x %e y. Da como resultado un vector fila a con los coeficientes %miramos cuantos datos tenemos n=length(x);

%inicializamos el vector de coeficientes con las diferencias de orden 0, es %decir los valores de y,

Bo

%y ahora montamos un bucle, si tenemos n datos debemos calcular n %diferencias, como ya tenenos la primera, iniciamos el bucle en 2, for j=2:n %en cada iteraci on calculamos las diferencias de un orden superior, %como solo nos vale la primera diferencia de cada orden empezamos el %bucle interior en el valor del exterior j for i=j:n a(i)=(a(i)-y(i-1))/(x(i)-x(i-j+1)); end %volvemos acopiar en y las diferencias obtenidas para emplearlas en la %siguiente iteracion y=a; end Como el polinomio de diferencias divididas toma una forma especial, es preciso tenerlo en cuenta a la hora de calcular el valor que toma el polinomio en un punto x determinado. Es siguiente c odigo permite evaluar un polinomio de diferencias divididas en un punto dado, conocidos sus coecientes y los valores x1 , , xn a partir de los cuales se obtuvo el polinomio,

rr

ad o

r,j

ua

a=y;

n. ji m en ez @

7 1 p3 (x) = 1 2x + x(x 1) x(x 1)(x 3) 6 3 Es importante hacer notar que el polinomio de interpolaci on obtenido por diferencias divididas siempre aparece representado como suma de productos de binomios (x x0 )(x x1 ) y los coecientes obtenidos corresponden a esta representaci on y no a la representaci on habitual de un polinomio como suma de potencias de la variable x. El siguiente c odigo permite calcular los coecientes del polinomio de diferencias divididas a partir de un conjunto de n datos.

.u cm .es

xi x0 = 0 x1 = 1 x2 = 3 x3 = 4

Tabla yi y0 = 1 y1 = 1 y2 = 2 y3 = 3

7.2: Tabla de diferencia divididas para cuatro datos f [xi , xi+1 ] f [xi , xi+1 , xi+2 ] f [xi , xi+1 , xi+2 , xi+3 ] f [x0 , x1 ] = 2 f [x0 , x1 , x2 ] = 7/6 f [x0 , x1 , x2 , x3 ] = 1/3 f [x1 , x2 ] = 3/2 f [x1 , x2 , x3 ] = 1/6 f [x2 , x3 ] = 1

286

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

function y=evdif(a,x,x1) %esta funci on obtiene el valor de un polinomio de diferencias divididas a %partir de los coeficientes (a) del polinomio, los puntos (x) sobre los que %se ha calculado el polinomio y el punto o vector de puntos (x1) para el %que se quiere calcular el valor que toma el polinomio. %obtenemos el tama~ no del vector de coeficientes del polinomio, n=length(a);

Por u ltimo se podr an reunir las dos funciones anteriores en una u nica funci on que permitiera obtener directamente el valor que toma el polinomio de diferencias divididas en un punto x, partiendo de los datos interpolados. Una soluci on sencilla, es crear una funci on que llame a las dos anteriores, function y=intdifdiv(x,xp,yp) %Esta funci on calcula el valor del polinomio de diferencias divididas que %interpola los puntos (xp,yp) el el punto, o %los puntos contenidos en x. %Empleando las funciones, difdiv, para calcular los coeficientes del %polinomio y evdif para evaluarlo %llamamos a difdiv a=difdiv(xp,yp);

%y a continuaci on llamamos a evdif y=evdif(a,xp,x);

7.3.1.

Bo

Supone una simplicaci on al c alculo del polinomio de diferencias divididas para el caso particular en que los datos se encuentran equiespaciados y dispuestos en orden creciente con respecto a los valores de la coordenada x. En este caso, calcular los valores de las diferencias es mucho mas sencillo. Si pensamos en las diferencias de primer orden, los denominadores de todas ellas son iguales, puesto que los datos est an equiespaciados, x xi xi1 = h

rr

ad o

El polinomio de Newton-Gregory

r,j

ua

n. ji m en ez @

%Construimos un bucle para calcular el valor del polinomio, y=a(1); for k=1:n-1 %calculamos el valor del producto de los binomios que multiplican al %coeficiente i binprod=1; for j=1:k binprod=binprod.*(x1-x(j)); end y=y+a(k+1)*binprod; end

.u cm .es

7.3. DIFERENCIAS DIVIDIDAS.

287

En cuanto a los numeradores, se calcular an de modo an alogo al de las diferencias divididas normales, y0 = y1 y0 , y1 = y2 y1 , , yi = yi+1 yi , , yn1 = yn yn1

2 y0 = (y0 ) = (y2 y1 ) (y1 y0 ) = (y2 2y1 + y0 ) En este caso, el denominador de la diferencia ser a x2 x0 = 2h. En general, para la diferencias de orden n tendr amos, n y0 = yn

n n yn1 + yn2 + (1)n y0 1 2

Donde se ha hecho uso de la expresi on binomial, k l = k ! l! (k l)!

Para obtener la diferencia divididida de orden n, bastar a ahora dividir por n! hn . f [x0 , x1 , , xn ] = n y 0 n! hn

A partir de las diferencias, podemos representar el polinomio de diferencias divididas resultante como, x x0 (x x1 ) (x x0 ) 2 (x xn1 ) (x x1 ) (x x0 ) n y0 + y0 + + y0 h 2 h2 n! hn

pn (x) = y0 +

ad o

Bo

Tabla 7.3: Tabla de diferencias xi x0 = 0 x1 = 1 x2 = 2 x3 = 3

r,j

Este polinomio se conoce como el polinomio de Newton-Gregory, y podr a considerarse como una aproximaci on num erica al polinomio de Taylor de orden n de la posible funci on asociada a los datos empleados. En este caso, podr amos construir la tabla para obtener los coecientes de diferencias, calculando en cada columna simplemente las diferencias de los elementos de la columna anterior. Por ejemplo,

ua

rr

Una vez calculadas las diferencias, basta dividir por n! hn los elementos de la primera la de la tabla, a0 = 1, a1 =

2 5 7 , a2 = , a3 = 1 2 12 6 13 El siguiente c odigo muestra un ejemplo de implementaci on en Matlab del polinomio de mewtongregory

n. ji m en ez @

para el polinomio de Newton -Gregory de cuatro datos yi yi 2 yi 3 yi y 0 = 1 2 5 7 y1 = 1 3 2 y2 = 2 1 y3 = 3

.u cm .es

Las diferencias de orden superior para los numeradores se pueden obtener de modo recursivo, a partir de las de orden uno, puesto que los denominadores de todas ellas h, son iguales.

288

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

%miramos cuantos datos tenemos n=length(x);

%inicializamos el vector de coeficientes con las diferencias de orden 0, es %decir los valores de y, a=y; h=x(2)-x(1); %y ahora montamos un bucle, si tenemos n datos debemos calcular n %diferencias, como ya tenenos la primera, iniciamos el bucle en 2, for j=2:n %en cada iteraci on calculamos las diferencias de un orden superior, %como solo nos vale la primera diferencia de cada orden empezamos el %bucle interior en el valor del exterior j for i=j:n %ahora basta dividir en todos los casos por la distancia h %multiplicada por el orden de la diferencia a(i)=(a(i)-y(i-1))/((j-1)*h); end %volvemos acopiar en y las diferencias obtenidas para emplearlas en la %siguiente iteracion y=a;

end y1=[]; if nargin==3 %Construimos un bucle para calcular el valor del polinomio, y1=a(1); for k=1:n-1 %calculamos el valor del producto de los binomios que multiplican al %coeficiente i binprod=1; for j=1:k binprod=binprod.*(x1-x(j)); end y1=y1+a(k+1)*binprod; end end

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

function [a,y1]=newgre(x,y,x1) %este polinomio permite obtener los coeficientes del polinomio de %newton-gregory que interpola los datos contenidos en los vectores x %e y. Da como resultado un vector fila a con los coeficientes, si se le dan %adema un punto o vector de puntos calcula los valores que toma el %polinomio en dichos puntos.

POR INTERVALOS. 7.4. INTERPOLACION

289

7.4.

Interpolaci on por intervalos.

350

300

250

200

150

100

ad o

r,j

50

50

ua

rr

n. ji m en ez @
3 4 5 x 6 7 8

datos polinomio de interpolacin

s
9 10

Bo

Figura 7.3: Polinomio de interpolaci on de grado nueve obtenido a partir de un conjunto de diez datos En muchos casos es preferible no emplear todos los datos disponibles para obtener un u nico polinomio de interpolaci on. En su lugar, lo que se hace es dividir el conjunto de datos en varios intervalos consecutivos, y obtener varios polinomios de menor grado que interpolen los datos de cada intervalo.

.u cm .es

Hasta ahora, hemos visto c omo interpolar un conjunto de n + 1 datos mediante un polinomio de grado n. En muchos caso, especialmente cuando el n umero de datos es sucientemente alto, los resultados de dicha interpolaci on pueden no ser satisfactorios. La raz on es que el grado del polinomio de interpolaci on crece linealmente con el n umero de puntos a interpolar, as por ejemplo para interpolar 11 datos necesitamos un polinomio de grado 10. Desde un punto de vista num erico, este tipo de polinomios pueden dar grandes errores debido al redondeo. Por otro lado, y dependiendo de la disposici on de los datos para los que se realiza la interpolaci on, puede resultar que el polinomio obtenido tome una forma demasiado complicada para los valores comprendidos entres los datos interpolados.. La gura 7.3 muestra el polinomio de interpolaci on de grado nueve para un conjunto de 10 datos. Es f acil darse cuenta, simplemente observando los datos, que no hay ninguna raz on que justique las curvas que traza el polinomio entre los puntos 1 y 2 o los puntos 9 y 10, por ejemplo.

290

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

El grado de los polinomios empleados deber a estar, en principio, relacionado con los datos contenidos en cada tramo.

350 300 250 200 150 100 50 0 50 datos interpolacin de orden cero

350 300 250 200 150 100

rr

ad o

Bo

r,j

50 0 50

ua

Figura 7.4: Interpolaciones de orden cero y lineal para los datos de la gura 7.3

n. ji m en ez @
3 4 5 6 7 8 9 10 x

(a) Interpolaci on de orden cero

datos interpolacin lineal

5 x

(b) Interpolaci on lineal

s
10

.u cm .es

interpolaci on de orden cero si hacemos que cada intervalo contenga un solo dato, obtendr amos polinomios de interpolaci on de grado cero, a0i = yi . El resultado, es un conjunto de escalones cuya valor var a de un intervalo a otro de acuerdo con el dato representativo contenido en cada tramo. La gura 7.4(a) muestra el resultado de la interpolaci on de orden cero para los mismos diez datos de la gura 7.3.

POR INTERVALOS. 7.4. INTERPOLACION

291

7.4.1.

Interpolaci on mediante splines c ubicos

Bo

rr

Para que S sea una funci on Spline de orden m debe cumplir que sea continua y tenga m 1 derivadas continuas en el intervalo [x0 , xm ] en que se desean interpolar los datos. Para asegurar la continuidad, los polinomios que forman S deben cumplen las siguientes condiciones en sus extremos; Si (xi+1 ) = Si+1 (xi+1 ), (1 i n 1) Si (xi+1 ) = Si+1 (xi+1 ), (1 i n 1) Si (xi+1 ) = Si+1 (xi+1 ), (1 i n 1) . . .
m1 m1 Si (xi+1 ) = Si +1 (xi+1 ), (1 i n 1)

ad o

Para construir una funci on spline S de orden m, que interpole los datos de la tabla, se denen intervalos tomando como extremos dos puntos consecutivos de la tabla y un polinomio de grado m para cada uno de los intervalos, S0 (x), x [x0 , x1 ] S1 (x), x [x1 , x2 ] . . . S= Si (x), x [xi , xi+1 ] . . . Sn1 (x), x [xn1 , xn ]

r,j

ua

n. ji m en ez @
x y x0 y0 x1 y1 xn yn

Hemos descrito antes c omo el polinomio interpolador de orden n para un conjunto de n + 1 datos puede presentar el inconveniente de complicar excesivamente la forma de la curva obtenida entre los puntos interpolados. La interpolaci on a tramos acabamos de describir, simplica la forma de la curva entre los puntos pero presenta el problemas de continuidad en las uniones entre tramos sucesivos. Ser a deseable encontrar m etodos de interpolaci on que fueran capaces de solucionar ambos problemas simult aneamente. Una buena aproximaci on a dicha soluci on la proporcionan los splines. Una funci on spline est a formado por un conjunto de polinomios, cada uno denido en un intervalo, que se unen entre s obedeciendo a ciertas condiciones de continuidad. Supongamos que tenemos una tabla de datos cualquiera,

.u cm .es

interpolaci on lineal. En este caso, se dividen los datos en grupos de dos. Cada par de datos consecutivos se interpola calculando la recta que pasa por ellos. La interpolaci on lineal se emplea en muchas aplicaciones debido a su sencillez de c alculo. La gura 7.4(b), muestra el resultado de aproximar linealmente los mismos datos contenidos en los ejemplos anteriores. Siguiendo el mismo procedimiento, aumentando el n umero de datos contenidos en cada intervalo, podr amos denir una interpolaci on cuadr atica, con polinomios de segundo grado, tomando intervalos que contengan tres puntos, una interpolaci on c ubica, para intervalos de cuatro puntos etc.

292

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

1. Splines naturales S (x0 ) = S (xn ) = 0

2. Splines con valor conocido en la primera derivada de los extremos S (x0 ) = y0 , S (xn ) = yn 3. Splines peri odicos, S (x0 ) = S (xn ) S ( x0 ) = S ( xn ) S (x0 ) = S (xn )

Intentar construir un sistema de ecuaciones para obtener a la vez todos los coecientes de todos los polinomios es una tarea excesivamente compleja porque hay demasiados par ametros. Para abordar el problema partimos del hecho de que S (x) es tambi en un spline de orden 1 para los puntos interpolados. Si los denimos como, Si (x) = Mi

Bo

Empezamos por imponer las condiciones de interpolaci on: el polinomio Si debe pasar por el punto (xi , yi ), Si (xi ) = Mi (xi xi+1 )3 Mi h2 i + Bi = yi Bi = yi , i = 0, , n 1 6 hi 6

A continuacion imponemos continuidad del spline en los nodos comunes: El polinomio Si1 tambi en debe pasar por el punto (xi , yi ),

rr

ad o

Si (x) = Mi

(x xi+1 )2 (x xi )2 + Mi+1 + Ai , i = 0, , n 1 2 hi 2 hi (x xi+1 )3 (x xi )3 Si (x) = Mi + Mi+1 + Ai (x xi ) + Bi , i = 0, , n 1 6 hi 6 hi

r,j

donde hi = xi+1 xi representa el ancho de cada intervalo y donde cada valor Mi = S (xi ) ser an las incognitas que deberemos resolver. Si integramos dos veces la expresi on anterior,

ua

n. ji m en ez @

x xi x xi+1 + Mi+1 , i = 0, , n 1 hi hi

Splines c ubicos. Los splines m as empleados son los formados por polinomios de tercer grado. En total, tendremos que determinar 4n coecientes para obtener todos los polinomios que componen el spline. Las condiciones de continuidad m as la de interpolaci on suministran en total 3(n1)+n+1 = 4 n 2 ecuaciones. Necesitamos imponer al spline dos condiciones m as. Algunas t picas son,

.u cm .es

Es decir, dos polinomios consecutivos del spline y sus m 1 primeras derivadas, deben tomar los mismos valores en el extremo com un. Una consecuencia inmediata de las condiciones de continuidad exigidas a los splines es que sus derivadas sucesivas, S , S , son a su vez funciones spline de orden m 1, m 2, . Por otro lado, las condiciones de continuidad suministran (n 1) m ecuaciones que, unidas a las n + 1 condiciones de interpolaci on cada polinomio debe pasar por los datos que constituyen los extremos de su intervalo de denici on, suministran un total de m n que son insucientes para determinar los (m + 1) n par ametros correspondientes a los n polinomios d egrado m empleados en la interpolaci on. Las m 1 ecuaciones que faltan se obtienen imponiendo condiciones adicionales.

POR INTERVALOS. 7.4. INTERPOLACION

293

Bi1

Si1 (xi ) = Mi Ai1 Y por tanto,

Ai =

yi+1 yi Mi+1 Mi hi , i = 0, , n 1 hi 6

En tercer lugar imponemos la condici on de que las derivadas tambi en sean continuas en los nodos comunes, (xi xi+1 )2 (xi xi )2 yi+1 yi Mi+1 Mi hi , i = 0, , n 1 + Mi+1 + 2 hi 2 hi hi 6 (xi xi )2 (xi xi1 )2 yi yi1 Mi Mi1 hi1 , i = 1, , n Si1 (xi ) = Mi1 + Mi + 2 hi1 2 hi1 hi1 6 Si (xi ) = Si1 (xi ), i = 1, , n 1 hi yi+1 yi Mi+1 Mi hi1 yi yi1 M i M i 1 hi = Mi + hi1 Mi + 2 hi 6 2 hi1 6 Si agrupamos a un lado los valores Mi1 , Mi , Mi+1 ,

hi1 Mi1 + 2 (hi1 + hi ) Mi + hi Mi+1 = 6

n. ji m en ez @
M0 = S (x0 ) = 0 Mn = S (xn ) = 0 .. . 0 0 0 . . . hn2 0 0 0 . . .

Si (xi ) = Mi

Bo

rr

Con estas condiciones y la expresi on obtenida para el resto de los Mi , podemos construir un sistema de ecuaciones tridiagonal 2(h0 + h1 ) h1 0 0 h 2( h + h ) h 0 1 1 2 2 0 h 2( h + h ) h 2 2 3 3 . . . . . . . . . . . . 0 0 0 0 Donde hemos hecho, M1 M2 M3 . . . b1 b2 b3 . . .

ad o

r,j

En total tenemos M0 , , Mn , n + 1 inc ognitas y la expresi on anterior, solo nos suministra n 1 ecuaciones. Necesitamos dos ecuaciones m as, Si imponemos la condici on de splines naturales, Para el extremo de la izquierda del primer polinomio y para el extremo de la derecha del u ltimo,

ua

= 2(hn2 + hn1 ) M n1 bn 1

yi+1 yi yi yi1 hi hi1 i = 1, , n 1

.u cm .es

Mi1 h2 (xi xi1 )3 i1 + Ai1 (xi xi1 ) + yi1 = yi 6 hi 6 Mi Mi1 yi yi1 hi1 , i = 1, , n = hi1 6

294

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

bi = 6

yi+1 yi yi yi1 hi hi1

Si (x) = i + i (x xi ) + i (x xi )2 + i (x xi )3 , x [xi , xi+1 ], (i = 0, 1, , n 1) Donde,

La siguiente funci on permite obtener los coecientes y el resultado de interpolar un conjunto de puntos mediante splines c ubicos, function [c,yi]=spcubic(x,y,xi) %uso [c,yi]=spcubic(x,y,xi) %Esta funci on interpola los puntos contenidos en los vectores columna x e y %empleando parae ello splines c ubicos naturales. devuelve los coeficientes %de los polinomios en una matriz de dimension (n-1)*4. Cada fila contiene %un splin desde So a Sn-1 los coeficiente est an guardados el la fila en %orden depotencia creciente: ejemplo c(i,1)+c(i,2)*x+c(i,3)*x^2+c(i,4)*x^3 %ademas devuelve los valores interpolados yi correspondientes a puntos xi %contenidos en el intervalo definido por los valores de x %obtenemos la longitud de los datos... l=length(x); %obtencion de los coeficientes M %Construimos el vector de diferencias h y un vector de diferencias %Dy=y(i+1)-y(i) Que nos ser a muy util a la hora de calcular el vector de %t erminos independientes del sistema for i=1:l-1 h(i)=x(i+1)-x(i); Dy(i)=y(i+1)-y(i); end %Construimos la matriz del sistema. (Lo ideal seria definirla como una

Bo

rr

ad o

r,j

ua

n. ji m en ez @

i = yi Mi+1 hi Mi hi yi+1 yi i = hi 3 6 Mi i = 2 Mi+1 Mi i = 6 hi

.u cm .es

Tenemos un sistema de ecuaciones en el que la matriz de coecientes es tridigonal y adem as diagonal dominante, por lo que podr amos emplear cualquiera de los m etodos vistos en cap tulo 6. Una vez resuelto el sistema y obtenidos los valores de Mi , obtenemos los valors de Ai y Bi a Partir de las ecuaciones obtenidas m as arriba. Por u ltimo, la forma habitual de denir el polinomio de grado 3 Si , empleado para interpolar los valores del intervalo [xi , xi+1 ], mediante splines c ubicos se dene como,

POR INTERVALOS. 7.4. INTERPOLACION %matriz sparse pero en fin no sabeis, porque sois todav a peque~ nos, etc...) CSP(l-2,l-2)=2*(h(l-2)+h(l-1)); b(l-2,1)=6*(Dy(l-1)/h(l-1)-Dy(l-2)/h(l-2)); for i=1:l-3 CSP(i,i)=2*(h(i)+h(i+1)); CSP(i,i+1)=h(i+1); CSP(i+1,i)=h(i+1); b(i,1)=6*(Dy(i+1)/h(i+1)-Dy(i)/h(i)); end %calculamos los coeficientes M, M=CSP\b;

295

%A~ nadimos el primer y el ultimo valor como ceros (Splines naturales) M=[0;M;0]; %calulamos los coeficientes A, for i=1:l-1 A(i)=Dy(i)/h(i)-(M(i+1)-M(i))*h(i)/6; end %Calculamos los coeficientes B, for i=1:l-1 B(i)=y(i)-M(i)*h(i)^2/6; end %Podemos ahora calcular el valor que toma el polinomio para los puntos %que se desea interpolar %miramos cuantos puntos tenemos l2=length(xi); for i=1:l2 %miramos en que intervalo esta el punto xi(i) j=1; while xi(i)>x(j) j=j+1; end if j>l-1 j=l-1; %aunque estamos extrapolando elseif j<2 j=2; %estamos calculando el primer punto o estamos tanbien %extrapolando end

Bo

rr

end %calcumos los coeficientes c del spline en forma normal %la primera columna, son los valores de i, c=zeros(l-1,4);

ad o

yi(i)=-M(j-1)*(xi(i)-x(j))^3/(6*h(j-1))+... M(j)*(xi(i)-x(j-1))^3/(6*h(j-1))+A(j-1)*(xi(i)-x(j-1))+B(j-1);

r,j

ua

n. ji m en ez @

.u cm .es

296

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

La gura, 7.5 muestra el resultado de interpolar mediante un spline c ubico, los datos contenidos en la gura 7.3. Es f acil observar c omo ahora los polinomios de interpolaci on dan como resultado una curva suave en los datos interpolados y en la que adem as las curvas son tambi en suaves, sin presentar variaciones extra nas, para los puntos contenidos en cada intervalo entre dos datos.

350 300 250 200 150 100 50 0 50 datos interp. splines cbicos

ua

n. ji m en ez @
4 5 x 6 7 8 9 10

Figura 7.5: Interpolaci on mediante spline c ubico de los datos de la gura 7.3

7.4.2.

Bo

Para realizar una interpolaci on por intervalos mediante cualquiera de los procedimientos descritos, Matlab incorpora la funci on propia interp1. Esta funci on admite como variables de entrada dos vectores con los valores de las coordenadas x e y de los datos que se desea interpolar y un tercer vector x1 con los puntos para los que se desea calcular el valor de la interpolaci on. Adem as, admite como variable de entrada una cadena de caracteres que indica el m etodo con el que se quiere realizar la interpolaci on. Dicha variable puede tomar los valores:

rr

1. nearest. Interpola el intervalo empleando el valor yi correspondiente al valor xi m as cercano al punto que se quiere interpolar. El resultado es una interpolaci on a escalones. 2. linear realiza una interpolaci on lineal entre los puntos del conjunto de datos que se desea interpolar.

ad o

Funciones propias de Matlab para interpolaci on por intervalos

r,j

.u cm .es

for i=1:l-1 c(i,1)=y(i); c(i,2)=Dy(i)/h(i)-M(i)*h(i)/3-M(i+1)*h(i)/6; c(i,3)=M(i)/2; c(i,4)=(M(i+1)-M(i))/(6*h(i)); end

7.5. AJUSTE POLINOMICO POR EL METODO DE M INIMOS CUADRADOS 3. spline. Interpola empleando splines c ubicos naturales.

297

4. cubic o pchip Emplea polinomios de Hermite c ubicos. Es un m etodo similar al de los Splines que no describiremos en estos apuntes.

7.5.

Bo

Los m etodos de interpolaci on que hemos descrito en las secciones anteriores pretenden encontrar un polinomio o una funci on denida a partir de polinomios que pase por un conjunto de datos. En el caso del ajuste por m nimos cuadrados, lo que se pretende es buscar el polinomio, de un grado dado, que mejor se aproxime a un conjunto de datos. Supongamos que tenemos un conjunto de m datos, x y x0 y0 x1 y1 xm ym

rr

Queremos construir un polinomio p(x) de grado n m n + 1 de modo que los valores que toma el polinomio para los datos p(xi ) sean lo m as cercanos posibles a los correspondientes valores yi .

ad o

Ajuste polin omico por el m etodo de m nimos cuadrados

r,j

>> x=[1:2:16] x = 1 3 5 7 9 >> y=[1 3 4 2 -1 4 -5 3] y = 1 3 4 2 -1 >> y1=interp1(x,y,x1,spline) y1 = 3.4110 0.7575 >> x=[1:2:16] x = 1 3 5 7 9 >> y=[1 3 4 2 -1 4 -5 3] y = 1 3 4 2 -1 >> y1=interp1(x,y,x1,nearest) y1 = 3 2 >> y1=interp1(x,y,x1,linear) y1 = 3.2500 1.2500 >> y1=interp1(x,y,x1,spline) y1 = 3.4110 0.7575

11

13

15

-5

ua

n. ji m en ez @
11 13 15 4 -5 3

.u cm .es

La funci on devuelve como salida los valores interpolados correspondientes a los puntos de x1. El siguiente c odigo muestra el modo de usar el comando interp1. Para probarlo se han creado dos vectores x e y que contienen el conjunto de datos que se emplear a para calcular la interpolaci on. Adem as, se ha creado otro vector x1 que contiene los puntos para los que se quiere calcular el resultado de la interpolaci on.

298

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

En primer lugar, necesitamos claricar que entendemos por lo mas cercano posible. Una posibilidad, es medir la diferencia, yi p(xi ) para cada par de datos del conjunto. Sin enbargo ,es m as 2 frecuente emplear el cuadrado de dicha diferencia, (yi p(xi )) . Esta cantidad tiene, entre otras ventajas, el que toma valor positivo con indendencia de que la diferencia sea positiva o negativa. Podemos tomar las diferencias obtenidas por el polinomio para todos los pares de puntos,
m

(yi p(xi ))
i=1

Los datos se multiplican por valores de grandes y los poco ables por valores peque nos. Para ver c omo obtener los coecientes de un polinomio de m nimos cuadrados, empezaremos con el caso m as sencillo; un polinomio de grado 0. En este caso, el polinomio es una costante, denida por su t ermino independiente p(x) = a0 . El objetivo a minimizar ser a entonces,
m

El valor m nimo de esta funci on debe cumplir que su derivada primera g (a0 ) = 0 y que su derivada segunda g (a0 ) 0,

r,j

ua

ad o

g (a0 ) = 2
i=1 m

g (a0 ) = 2
i=1

El resultado obtenido para el valor de a0 es una media, ponderada con los pesos wi de los datos. Si hacemos wi = 1wi obtendr amos ex actamente la media de los datos. Este resultado resulta bastante razonable. Aproximar un conjunto de valores por un polinomio de grado cero, es tanto como suponer que la variable y pemanece constante para cualquier valor de x. Las diferencias observadas deber an deberse entonces a errores aleatorios experimentales, y la mejor estima del valo de y ser a precisamente el valor medio de los valores disponibles. La gura 7.6 muestra el resultado de calcular el polinomio de m nimos cuadrados de grado cero para un conjunto de datos. EL siguiente paso en dicultad ser a tratar de aproximar un conjunto de datos por un polinomio de grado 1, es decir, por una linea recta, p(x) = a0 + a1 x. En este caso, la suma de diferecias al cuadrado toma la forma,

Bo

rr

n. ji m en ez @
m

como una medida de la distancia del polinomio a los datos. De este modo, el polinomio lo mas cercano posible a los datos ser a aquel que minimice la suma de diferencias al cuadrado que acabamos de denir. De ah el n ombre del m etodo. En muchos casos, los datos a los que se pretende ajustar un polinomio por m nimos cuadrados son datos experimentales. En funci on del entorno experimental y del m etodo en que se han adquirido los datos, puede resultar que algunos resulten m as ables que otros. En este caso, ser a deseable hacer que el polinomio se aproxime m as a los datos m as ables. Una forma de hacerlo es a nadir unos pesos, i , a las diferencias al cuadrado en funci on de la conanza que nos merece cada dato, i (yi p(xi ))
2

i=1

g (a0 ) =

i (yi a0 )

i=1

i (yi a0 ) = 0 a0 = i g (a0 ) 0

m i=1

i yi m i=1 i

.u cm .es

7.5. AJUSTE POLINOMICO POR EL METODO DE M INIMOS CUADRADOS

299

4 datos a0=3.014 3.5

2.5

1.5

0.5

0.1

n. ji m en ez @
0.2 0.3 0.4 0.5 x 0.6 0.7

s
0.8 0.9 1

Figura 7.6: Polinomio de m nimos cuadrados de grado 0

g (a0 , a1 ) =

i (yi a0 a1 xi )

i=1

En este caso, tenemos dos coecientes sobre los que calcular el m nimo. Este se obtiene cuando las derivadas parciales de respecto a ambos coecientes son iguales a cero.

ua

r,j

g = 2 i (yi a0 a1 xi ) = 0 a0 i=1 g = 2 i xi (yi a0 a1 xi ) = 0 a1 i=1


m

rr

ad o

Si reordenamos las ecuaciones anteriores,


m m m

i
i=1 m

a0 + a0 +

i xi
i=1 m

a1 =
i=1

i yi
m

Bo

i x i
i=1

i x2 i
i=1

a1 =
i=1

i xi yi

Obtenemos un sistema de dos ecuaciones lineales cuyas inc ognitas son precisamente los coecientes de la recta de m nimos cuadrados. Podemos ahora generalizar el resultado para un polinomio de grado n, p(x) = a0 + a1 x + a2 x2 + + an xn . En este caso, la funci on

.u cm .es
(7.1)

300

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

g (a0 , a1 , , an ) =
i=1

(a0 + a1 xi + + an xn i yi )

De nuevo para, obtener los coecientes del polinomio igualamos las derivadas parciales a cero, g (a0 , a1 , , an ) =0 aj
m

n i xj i (a0 + a1 xi + + an xi yy ) = 0, j = 0, 1 , n i=1

Donde hemos denido sj y cj como,

El siguiente c odigo permite obtener el polinomo de m nimos cuadrados que aproxima un conjunto de n datos, function a=mc(x,y,n,w) %uso: a=mc(x,y,n,w). Esta funci on permite obtener los coeficientes del %polinomio de m nimos cuadrados que ajusta un conjunto de datos. Las %variables de entrada son: x, vector con la componente x de los datos a %ajustar. y, vector con la componente y de los datos a ajustar. n grado del %polinomio de interpolaci on. w vectos de pesos asociados a los datos. si no %se sumininstra se toman todos los pesos como 1. Saidas: vector columna con %los coeficientes del polinomio=> a(1)+a(2)*x+a(3)*x^2+a(n+1)*x^n %comprobamos en primer lugar que tenemos datos suficientes, m=length(x); if m<n+1 error(no hay datos sufiecientes para calcular el polinomio pedido) end %Si no se ha suministrado vector de pesos construimos uno formado por unos, w=ones(m,1); %Montamos un bucle para crear los elementos s de la matriz de coeficientes, for j=1:2*n+1

Bo

rr

ad o

r,j

ua

n. ji m en ez @
m

sn

sn+1

s2n

an

cn

sj = cj =

i xj i

i=1 m

i xj i yi

i=1

De nuevo, si reordenamos las expresiones anteriores, llegamos a un sistema de n + 1 ecuaciones lineales, cuyas incognitas son los coecientes del polinomio de m nimos cuadrados, c0 s0 s1 sn a0 s1 s s a 2 n+1 1 c1 . = . . . . . .. . . . . . . .

.u cm .es

7.5. AJUSTE POLINOMICO POR EL METODO DE M INIMOS CUADRADOS s(j)=0; for i=1:m s(j)=s(j)+w(i)*x(i)^(j-1); end end

301

%y un segundo bucle para crear los t erminos independientes... for j=1:n+1 c(j,1)=0; for i=1:m c(j,1)=c(j,1)+w(i)*x(i)^(j-1)*y(i) end end

%solo nos queda resolver el sistema... Empleamos la division por la %izquierda de Matlab a=A\c;

7.5.1.

M nimos cuadrados en Matlab.

Bo

Matlab suministra dos maneras distintas de ajustar un polinomio a unos datos por minimos cuadrados. La primera es mediante el uso del comando polyfit. Este comando adminte como entradas un vector de coordenadas x y otro de coordenadas y de los datos que se quieren aproximar, y una tercera variable con el grado del polinomio. COmo resultado devuelve un vector con los coecientes del polinomio de m nimos cuadrados. Ordenados en orden de potencias decrecientes a(1)*x^ n+a(2)*x^ (n-1)+...+a(n+1). La siguiente secuencia de comandos crea un par de vectores y muestra como manejar el comando, >> x=[1:10] x = 1 2 3 4 5 6 >> y=[-1 0 3 4 5.2 6 10 12 13 15.5]; >> a=polyfit(x,y,3) a = Columns 1 through 2

rr

ad o

r,j

ua

Una u ltima observaci on importante es que si intentamos calcular el polinomio de m nimos cuadrados de grado m 1 que aproxima un conjunto de m datos, lo que obtendremos ser a el polinomio de interpolaci on. En general, cuanto mayor sea el grado del polinomio m as posibilidades hay de que la matriz de sistema empleado para obtener los coecientes del polinomio est e mal condicionada.

n. ji m en ez @
7 8 9

% a partir de los valores de s, construimos la matriz del sistema, for i=1:n+1 for j=1:n+1 A(i,j)=s(i+j-1) end end

s
10

.u cm .es

302

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION 4.114219114219120e-02 -2.413333333333330e+00

7.5.2.

Supongamos que tenemos un conjunto de datos obtenidos como resultado de un experimento. En muchos casos la nalidad de un ajuste por m nimos cuadrados, es encontrar una ley que nos permita relacionar los datos de la variable independiente con la variable dependiente. Por ejemplo si aplicamos distintas fuerzas a muelle y medimos la elongaci on sufrida por el muelle, esperamos obtener, en primera aproximaci on una relaci on cuadr atica: x2 F . (Ley de Hook). Sin embargo, los resultados de un experimento no se ajustan nunca ex actamente a una ley debido a errores aleatorios que no es posible corregir. Cuando realizamos un ajuste por m nimos cuadrados, podemos emplear cualquier polinomio desde grado 0 hasta grado m 1. Desde el punto de vista del error cometido con respecto a los datos disponibles el mejor polinomio ser a prec samente el de grado m 1 que da error error cero para todos los datos por tratarse del polinomo de interpolaci on. Sin embargo, si los datos son

Bo

rr

ad o

Adem as del comando polyfit Matlab permite ajustar polinomio por m nimos cuadrados a un conjunto de datos a trav es de la ventana gr aca de Matlab. Para ello, es suciente representar los datos con el comando plot(x,y). Una vez que Matlab muestra la ventana gr aca con los datos representados, se selecciona en el men u desplegable tools la opci on Basic Fitting. Matlab abre una segunda ventana que permite seleccionar el polinomio de minimos cuadrados que se desea ajustar a los datos, as como otras opciones que permiten obtener los coecientes del polinomio y analizar la bondad del ajuste a partir de los residuos (ver secci on siguiente). La guras 7.7, muestra un ejemplo de uso de la ventana gr aca de Matlab para obtener un ajuste por m nimos cuadrados

An alisis de la bondad de un ajuste por m nimos cuadrados.

r,j

ua

n. ji m en ez @
5.067132867132886e-01 2.403729603729592e-01 1.349137529137529e+00 7.210256410256388e-01 5.286713286713862e-02

7.770007770008220e-05 Columns 3 through 4 1.377428127428127e+00 >> yhat=polyval(a,x) yhat = Columns 1 through 2 -9.946853146853121e-01 Columns 3 through 4 2.091328671328673e+00 Columns 5 through 6 5.512074592074594e+00 Columns 7 through 8 9.271282051282054e+00 Columns 9 through 10 1.337268065268066e+01 >> error=abs(yhat-y) error = Columns 1 through 2 5.314685314687928e-03 Columns 3 through 4 9.086713286713270e-01 Columns 5 through 6 3.120745920745938e-01 Columns 7 through 8 7.287179487179465e-01 Columns 9 through 10 3.726806526806570e-01

5.067132867132886e-01 3.759627039627041e+00 7.349137529137529e+00 1.127897435897436e+01 1.555286713286714e+01

.u cm .es

7.5. AJUSTE POLINOMICO POR EL METODO DE M INIMOS CUADRADOS

303

Bo

rr

ad o

r,j

ua

n. ji m en ez @

experimentales estamos incluyendo los errores experimentales en el ajuste. Por ello, para datos experimentales y suponiendo que los datos solo contienen errores aleatorios, el mejor ajuste lo dar a el polinomio de menor grado para el cual las diferencias entre los datos y el polinomio yi p(xi ) se distribuyan aleatoriamente. Esta diferencias reciben habitualmente el nombre de residuos. Entre las herramientas que suministran la ventanas gr acas de Matlab para el ajuste por m nimos cuadrados hay una que calcula y representa los residuos. La gura 7.8 muestra un ejemplo de de ajuste por minimos cuadrados empleando cada vez un polinomio de mayor grado. En la gura 7.8(a) se observa claramente que el ajusto no es bueno, la recta de minimos cuadrados no es capaz de adaptarse a la forma que presentan los datos. Los residuos muestran claramente esta tendencia: no est an distribuidos de forma aleatoria. En la gura 7.8(b), la p arabola aproxima mucho mejor el conjunto de datos, a simple vista parece un buen ajuste. Sin embargo, los residuos presenta una forma funcional clara que recuerda claramente la forma de un polinomio de tercer grado. En la gura 7.8(c), los residuos est an distribuidos de forma aleatoria. Si comparamos estos resultados con los de la gura 7.8(d) vemos que en este u ltimo caso los residuos son m as peque nos, pero conservan esencialmente la misma distribuci on aleatoria que en la gura anterior. La aproximaci on de los datos empleando un polinomio de cuarto grado no a nade informaci on sobre la forma de la funci on que siguen los datos, y ha empezado a incluir en el ajuste los errores de los datos.

.u cm .es

304

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

(a) Menu desplegable para abrir ventana auxiliar

Bo

rr

Figura 7.7: Ejemplo de uso de la ventana gr aca de Matlab para realizar un ajuste por m nimos cuadrados

ad o

r,j

(b) ventana auxiliar para realizar el ajuste y analizar resultados

ua

n. ji m en ez @

.u cm .es

7.5. AJUSTE POLINOMICO POR EL METODO DE M INIMOS CUADRADOS

305

300 200 100 datos linear

300 datos quadratic

200

100 0 100 1 60 40 2 0 20 0 20 40 60 1 2 3 4 5 2 3 4 5 6 residuals 7 8 9 10 0 4

s
3 4 5 6 residuals 3 4 5 6 datos 4th degree 3 4 5 6 residuals 3 4 5 6

n. ji m en ez @
2 4 6 7 8 9 10 1 2 300 200 100 7 8 9 10 0 1 1 2 0.5 0 0.5 1 6 7 8 9 10 1 2

(a) Recta de m nimos cuadrados y residuos obtenidos


300 datos cubic

(b) Parabola de m nimos cuadrados y residuos obtenidos

200

100

0 1 0.5 2 3 4

5 6 residuals

0.5 1

r,j

ua

ad o

(c) polinomio de tercer grado de m nimos cuadrados y residuos obtenidos

(d) polinomio de cuarto grado de m nimos cuadrados y residuos obtenidos

Bo

rr

Figura 7.8: Comparaci on entre los residuos obtenidos para los ajustes de m nimos cuadrados de un conjunto de datos empleando polinomios de grados 1 a 4.

.u cm .es
7 8 9 10 7 8 9 10 7 8 9 10 7 8 9 10

306

Y AJUSTE DE FUNCIONES CAP ITULO 7. INTERPOLACION

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 8

Diferenciacion e Integraci on num erica

ad o

Como punto de partida, supondremos que tenemos un conjunto de puntos {xi , yi }, x y x0 y0 x1 y1 xn yn

Bo

rr

Que pertenecen a una funci on y = f (x) que podemos o no conocer anal ticamente. El objetinvo de la difrenciaci on num erica es estimar el valor de la derivada f (x) de la funci on xi conocidos. En general existen dos formas de aproximar la derivada: 1. Derivando el polinomio de interpolaci on. De este modo, obtenemos un nuevo polinomio que aproxima la derivada. f (x) Pn (x) f (x) Pn (x) 2. Estimando la derivada como una f ormula de diferencias nitas obtenida a partir de la aproximaci on del polinomio de Taylor. 307

r,j

8.1.

Diferenciaci on num erica.

ua

La difenciaci on, y sobre todo la integraci on son operaciones habituales en c alculo num erico. En muchos caso obtener la expresi on anal tica de la derivada o la integral de una funci on puede ser muy complicado o incluso imposible. Adem as en ocasiones no disponemos de una expresi on anal tica para la funci on que necesitamos integrar o derivar sino tan solo de de un conjunto de valores num ericos de la misma. Este es el caso, por ejemplo, cuando estamos trabajando con datos experimentales. Si solo disponemos de valores num ericos, entonces solo podemos calcular la integral o la derivada num ericamente. Los sistemas f sicos se describen generalmente mediante ecuaciones diferenciales. La mayor a de las ecuaciones diferenciales no poseen una soluci on anal tica, siendo posible unicam ente obtener soluciones num ericas. En t ermino generales la diferenciaci on num erica consiste en aproximar el valor que toma la derivada de una funci on en un punto. La integraci on num erica aproxima el valor que toma la integral de una funci on en un intervalo.

n. ji m en ez @

.u cm .es

308

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION Si partimos de la denici on de derivada, f (x0 ) = l m f (x0 + h) f (x0 ) f (x + h) f (x) h h

h0

f (x) f (x0 ) + f (x0 ) (x x0 ) f (x0 )

f ( x) f ( x0 ) x x0

El m etodo consiste en derivar el polinomio Pn (x) de interpolaci on obtenido por alguno de los m etodos estudiados en el cap tulo 7 y evaluar el polinomio derivada Pn (x) en el punto deseado. Un ejemplo particularmente sencillo, para la expresi on del polinomio derivada se obtienen en el caso de datos equidistantes interpolados mediante el polinomio de Newton-Gregory, (x x1 ) (x x0 ) 2 (x xn1 ) (x x1 ) (x x0 ) n x x0 y 0 + y0 + + y0 h 2 h2 n! hn

pn (x) = y0 +

Si lo derivamos, obtenemos un nuevo polinomio,

pn (x) =

Este polinomio es especialmente simple de evaluar en el punto x0 ,


h h h h

Bo

Es interesante remarcar como en la expresi on anterior, el valor de la derivada se va haciendo m as preciso a medida que vamos a nadiendo diferencias de orden superior. Si solo conoci eramos dos datos, (x0 , y0 ) y (x1 , y1 ). Solo podr amos calcular la diferencia dividida de primer orden. En esta caso nuestro c alculo aproximado de la derivada de x0 ser a, p1 (x0 ) = 1 y0 h

rr

ad o

y0 2 y0 n y0 pn (x0 ) = + ( x x ) + + [(x0 x1 ) (x1 x2 ) (xn xn1 )] 0 1 h 2 h2 n! hn 1 2 y0 3 y0 n y0 pn (x0 ) = y 0 + + + (1)n1 h 2 3 n

r,j

n y0 n! hn

n1

k=0

ua

2 y0 y0 + [(x x1 ) + (x x0 )] + h 2 h2 3 y0 [(x x1 )(x x2 ) + (x x0 )(x x1 ) + (x x0 )(x x2 )] + + + 3! h3 (x x0 )(x x1 ) (x xn1 ) x xk

n. ji m en ez @

8.1.1.

Diferenciaci on num erica basada en el polinomio de interpolaci on.

Si hacemos x x0 = h, ambas expresiones coinciden. En general, los algoritmos de diferenciaci on num erica son inestables. Los errores iniciales que puedan contener los datos debido a factores experimentales o al redondeo del ordenador, aumentan en el proceso de diferenciaci on. Por eso no se pueden calcular derivadas de orden alto y, los resultados obtenidos de la diferenciaci on num erica deben tomarse siempre extremando la precauci on.

.u cm .es

Podemos asociar esta aproximaci on con el polinomio de Taylor de primer orden de la funci on f (x),

NUMERICA. 8.1. DIFERENCIACION

309

Si conocemos tres datos, podr amos calcular 2 y0 y a nadir un segundo t ermino a nuestra estima de la derivada, 1 2 y 0 p2 (x0 ) = y0 h 2

Empleando los dos primeros puntos,

Empleando los tres primeros puntos,

y (0, 0) = p1 2 (0,0) = Empleando los cuatro primeros puntos,

n. ji m en ez @
y (0, 0) = p1 1 (0,0) = 1 0,2 0,203 0,017 2 1 0,2 0,203 1 0,2 0,203
h0

1 0,203 = 1,015 0,2

r,j

Empleando los cinco puntos disponibles

ua

y (0, 0) = p1 3 (0,0) =

0,017 0,024 + 2 3

8.1.2.

Bo

rr

Como se explic o en la introducci on, la idea es emplear el desarrollo de Taylor para aproximar la derivada de una funci on en punto. Si empezamos el ejemplo m as sencillo de aproximar la derivada, suprimiendo de su denici on el paso al l mite, f (xk ) = l m f (xk + h) f (xk ) f (xk + h) f (xk ) h h

La expresi on obtenida, se conoce con el nombre de formula de diferenciaci on adelanta de dos puntos. El error cometido debido a la elecci on de un valor de f h nito, se conoce con el nombre de error de truncamiento. Es evidente que desde un punto de vista puramente matem atico, la aproximaci on es mejor cuanto menor es h. Sin embargo, desde un punto de vista num erico esto no

ad o

y (0, 0) = p1 3 (0,0) =

0,017 0,024 0,020 + 2 3 4

Diferenciaci on num erica basada en diferencias nitas

s
= 0,9725 = 1,0125 = 0,9875

xi 0,0 0,2 0,4 0,6 0,8

yi 0,000 0,203 0,423 0,684 1,030

yi 0,203 0,220 0,261 0,346

2 yi 0,017 0,041 0,085

3 y i 0,024 0,044

4 y i 0,020

.u cm .es

y as sucesivamente, mejorando cada vez m as la precisi on. Veamos como ejemplo el c alculo la derivada en el punto x0 = 0,0, a partir de la siguiente tabla de datos,

310

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

es as . A medida que hacemos m as peque no el valor de h, aumenta el error de redondeo debido a la aritm etica nita del computador. Por tanto, el error cometido es la suma de ambos errores,
e. de truncamiento

f (x + h) f (x) f (x) = + h

C h

1 h

, C >> D

e. de redondeo

El valor optimo de h es aquel que hace m nima la suma del error de redondeo y el error de truncamiento. La gura 8.1 muestra de modo esquem atico como domina un error u otro seg un hacemos crecer o decrecer el valor de h en torno a su valor optimo.

Figura 8.1: Variaci on del error cometido al aproximar la derivada de una funci on empleando una f ormula de diferenciaci on de dos puntos. Como vimos en la introducci on a esta secci on, partiendo de el desarrollo de Taylor de una funci on es posible obtener f ormulas de diferenciaci on num erica y poder estimar el error cometido. As por ejemplo, a partir del polinomio de Taylor de primer orden, f (x + h) = f (x) + hf (x) +

ad o

El error que se comete debido a la aproximaci on, es proporcional al tama no del intervalo empleado h La constante de proporcionalidad depende de la derivada segunda de la funci on, f (z ) en alg un punto indeterminado z x, x + h). Para indicar esta relaci on lineal entre el error cometido y el valor de h, se dice que el error es del orden de h y se representa como O(h).

r,j

ua

h2 f (x + h) f (x) h f (z ) f (x) = f (z ), x < z < x + h 2 h 2

rr

f (x) =

Bo

Podemos mejorar la aproximaci on, caculando el valor de polinomio de Taylor de tercer orden para dos puntos equidistantes situados a la izquierda y la derecha del punto x, restando dichas expresiones y despejando la derivada primera del resultado, h2 f (x + h) = f (x) + hf (x) + f (x) + 2 h2 f (x h) = f (x) hf (x) + f (x) 2 h3 f (z ) f (x + h) f (x h) h2 3! f ( x ) = f (z ) 2h 6 h3 f (z ) 3!

n. ji m en ez @
Valor ptimo h

error

Dominan los errores de truncamieto

f (x + h) f (x) + O(h) h

Dominan los errores de redondeo

.u cm .es

NUMERICA. 8.1. DIFERENCIACION

311

f(x)

f(x)

(f(x0+h)f(x0h)}/2h (f(x0+h)f(x0)}/h

f(x) f(x)

x0

x0+h

s
x0h x0

(a) Diferencia de dos puntos adelantada

Figura 8.2: Comparaci on entre las aproximaciones a la derivada de una funci on obgtenidas mediante las diferencias de dos puntos adelantada y centrada En esta caso, el error es proporcional al cuadrado de h, por tanto, f (x0 ) = f (x1 ) f (x1 ) + O(h2 ) 2h

rr

ad o

Donde hemos hemos hecho x x0 , x + h x1 y x h x1 . Esta aproximaci on recibe el nombre de diferencia de dos puntos centrada. La gura 8.2(a) muestra una comparaci on entre la derivada real de una funci on y su aproximaci on mediante una diferencia adelanta de dos puntos. La gura 8.2(b) muestra la misma comparaci on empleando esta vez la aproximaci on de dos punto centrada. En este ejemplo es f acil ver como la aproximaci on centrada da un mejor resultado. No hay olvidar que la bondad del resultados, para un valor de h dado, depende tambi en del valor de las derivadas de la funci on, por lo que no es posible asegurar que el resultado de la diferencia centrada sea siempre mejor. Empleando el desarrollo de Taylor y tre puntos podemos aproximar la derivada por la diferencia de tres puntos adelantada,

Bo

En este caso e error es tambi en de orden h2 pero vale el doble que para la diferencia de dos puntos centrada.

r,j

4 f (x1 ) = f (x0 ) + hf (x0 ) +

ua

h2 h3 f (x0 ) + f (z )) 2 3! 4h3 2 f (x2 ) = f (x0 ) + 2hf (x0 ) + 2h 2f (x0 ) + f (z )) 3 f (x2 ) + 4f (x1 ) 3f (x0 ) h2 f ( x) = f (z ) 2h 3

n. ji m en ez @

(b) Diferencia de dos puntos centrada

.u cm .es
x0+h

312

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

A partir del desarrollo de Taylor y mediante el uso del n umero de puntos adecuado, es posible obtener aproximaciones a la derivada primera y a las sucesivas derivadas de una funci on, procediendo de modo an alogo a como acaba de mostrarse para el caso de las direrencias de dos y tres puntos. La tabla 8.1 muestra algunas de las f ormulas de derivaci on mediante diferencias nitas m as (j ) (j ) empleadas. Para simplicar la notaci on, en todos los casos se ha tomado yi = f (xi ), yi = f (xi ). F ormulas primera derivada y0 = y0 = y0 = y0 =
y1 y0 h

F ormulas segunda derivada y0 =


y2 2y1 +y0 h2

+ O(h) + O(h2 ) + O(h2 ) + O(h4 )

+ O(h)

y1 y1 2h

y0 = y0 = y0 =

y1 2y0 +y1 h2

y2 +4y1 3y0 2h

y3 +y2 5y1 +2y0 h2

+ O(h2 )

y2 +8y1 8y1 +y2 12h

y2 +16y1 30y0 +16y1 y2 12h2

y0 = y0 =

y3 3y2 +3y1 y0 h3

n. ji m en ez @
+ O(h)
iv y0 = y4 4y3 +6y2 4y1 +y0 h4

F ormulas tercera derivada

F ormulas cuarta derivada

y2 2y1 +2yx1 y2 2h3

+ O(h2 )

iv y0 =

y2 4y1 +6y0 4y1 +y2 h4

Tabla 8.1: F ormulas de derivaci on basadas en diferencias nitas

8.2.

Integracion num erica.

r,j

Bo

rr

Hay sin embargo muchos casos en los cuales se desconoce la funci on F (x) y otros en los que ni siquiera se conoce la expresi on de la funci on f (x), como por ejemplo, cuando solo se dispone de una tabla de valores {xi , yi = f (xi )} para representar la funci on. En estos caso se puede aproximar la integral denida de la funci on f (x) en un intervalo [a, b], a partir de los puntos disponibles, mediante lo que se conoce con el nombre de una f ormula de cuadratura,
b n

ad o

ua

Dada una funci on arbitrario f (x) es en muchos casos posible obtener de modo anal tico su primitiva F (x) de modo que f (x) = F (x) En estos casos es posible obtener la integral denida de f (x) en un intervalo [a, b] directamente a partir de su primitiva,
b

I (f ) =
a

f (x)dx = F (x)|b a = F (b) F (a)

I (f ) =
a

f (x)dx
i=0

Ai f (xi )

Una t ecnica habitual de obtener los coecientes Ai , es hacerlo de modo impl cito a partir de la integraci on de los polinomios de interpolaci on,
b b

I (f ) =
a

f (x)dx
a

Pn (x)dx

s
+ O(h) + O(h2 )

.u cm .es
+ O(h4 )

8.2. INTEGRACION NUMERICA.

313

Para ello, se identican los extremos del intervalo de integraci on con el primer y el u ltimo de los dados disponibles, [a, b] [x0 , xn ]. As por ejemplo, a partir de los polinomios de lagrange, denidos en la secci on 7.2.2,
n

p(x) =
j =0

lj (x) yj

Podemos obtener los coecientes Ai como,


b b xn

I (f ) =
a

f (x)dx
a

Pn (x)dx =
x0

lj (x)yj (x) dx Aj =
j =0

xn

xn

I (y ) =
x0

ydx
x0

y0 +

Las f ormulas de Newton-Cotes se asocian con el grado del polinomo de interpolaci on empleado en su obtenci on: Para n = 1, se obtiene la regla del trapecio,
xn

Para n = 2, se optiene la regla de Simpson


xn

ua

r,j

ad o

Para n = 3, se obtiene la regla de 3/8 de Simpson


xn

Bo

rr

No se suelen emplear polinomios de interpolaci on mayor debido a los errores de redondeo y a las oscilaciones locales que dichos polinomios presentan.

8.2.1.

La f ormula del trapecio.

La f ormula del trapecio emplea tan solo dos puntos para obtener la integral de la funci on en el intervalo denido por ellos.
xn xn

n. ji m en ez @
I (y ) = ydx
x0

La familia de m etodos de integraci on, conocidas como f ormulas de Newton-Cotes, puede obtenerse a partir del polinomio de interpolaci on de Newton-Gregory descrito en la secci on 7.3.1. Supongamos que tenemos la la funci on a integrar denida a partir de un conjunto de puntos equiespaciados a lo largo de intervalo de integraci on {(xi , yi )}0,n . Podemos aproximar la integral como, x x0 ( x x0 ) 2 ( x x 0 ) ( x x n1 n y 0 + y0 + + y0 h 2!h2 n!hn

h (y0 + y1 ) 2

I (y ) =
x0

ydx

h (y0 + 4y1 + y2 ) 3

I (y ) =
x0

ydx

3h (y0 + 3y1 + 3y2 + y3 ) 8

I (y ) =
x0

ydx
x0

y0 +

x x0 y0 dx h

= y0 x +

y 0 ( x x 0 ) 2 h 2

.u cm .es
xn

lj (x)dx

x0

x1

=
x0

h (y0 + y1 ) 2

314

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

La gura 8.3 muestra gr acamente el resultado de aproximar la integral denida de una funci on y = f (x) mediante la f ormula del trapecio. Gr acamente la intergral coincide con el area del trapecio formado por los puntos (x0 , 0), (x0 , y0 ), (x1 , y1 ) y (x1 , 0). De ah su nombre y la expresi on mat ematica obtenida,

y=f(x)

y_1 P1

y_0

Figura 8.3: Interpretaci on gr aca de la f ormula del trapecio.

Bo

rr

Formula extendida (o compuesta) del trapecio. La gura 8.3 permite observar la diferencia entre el area calculada y el area comprendida entre la curva real y el eje x. Como se ha aproximado la curva en el intervalo de integraci on por un l nea recta (polinomio de grado 1 p1 ), El error ser a tanto mayor cuando mayor sea el intervalo de integraci on y/o la variaci on de la funci on en dicho intervalo. Una soluci on a este problema, si se conoce la expresi on anal tica de la funci on que se desea integrar o se conocen sucientes puntos es subdividir el intervalo de integraci on en intevalos m as peque nos y aplicar a cada uno de ellos la f ormula de trapecio,

ad o

r,j

xn

n1

ua

xi+1

I (y ) =

ydx
x0 i=0 xi

y (x)dx =
i=0

La gura 8.4, muestra el resultado de aplicar la f ormula extendida del trapecio a la misma funci on de la gura 8.3. En este caso, se ha dividido el intervalo de integraci on en cuatro subintervalos. Es inmediato observar a partir de la gura, que la aproximaci on mejorar prograsivamente si se aumenta el n umero de subintervalos y se reduce el tama no de los mismos.

n. ji m en ez @
x_0 x_1 x

n1

h h (yi + yi+1 ) = (y0 + 2y1 + 2y2 + + 2yn1 + yn ) 2 2

.u cm .es

h (y0 + y1 ) 2 que coincide con el area del trapecio mostrado en la gura. I (y ) =

8.3. LAS FORMULAS DE SIMPSON.

315

y=f(x)

y4 y2 y1, y3

y0

Figura 8.4: Interpretaci on gr aca de la f ormula extendida del trapecio.

8.3.

Las f ormulas de Simpson.

ad o

F ormula de Simpsom 1/3. La f ormula de Simpson, o Simpsom 1/3, emplea un polinomio de interpolaci on de Newton-Gregory de grado dos para obtener la aproximaci on a la integral,
x2 x2

r,j

ua

Se conocen con el nombre de f ormulas integrales de Simpson, a las aproximaciones a la integral denida obtenida a partir de los polinomios interpoladores de Newton-Gregory de grado dos (Simpsom 1/3) y de grado tres (Simpsom 3/8) . En el primer caso, es preciso conocer tres valores equiespaciados de la funci on en el intervalo de integraci on y en el segundo es preciso conocer cuatro puntos.

rr

I (y )

P2 (x)dx =
x0

x0

La gura 8.5, muestra gr acamente el resultado de aplicar el m etodo de Simpsom a la misma funci on de los ejemplos anteriores. De nuevo, la bondad de la aproximaci on depende de lo que var e la funci on en el intervalo. La diferencia fundamental con el m etodo del trapecio es que ahora el area calculada esta l mitada por el segmento de par abola denido por la el polinomio de interpolaci on empleado. F ormula de Simpsom 3/8. En este caso, se emplea un polinomio de Newton-Gregory de grado 3 para obtener la aproximaci on a la integral,

Bo

n. ji m en ez @
x0 x1 x2 x x3 x4

y0 +

x x0 (x x0 ) (x x1 ) 2 h y0 + y0 dx = (y0 + 4y1 + y2 ) h 2h2 3

.u cm .es

316

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

y=f(x) p2(x) y_3 y_2

y_1

x_0

x_1

x_2

Figura 8.5: Interpretaci on gr aca de la f ormula 1/3 de Simpsom.

x2

I (y )
x0 x2

P2 (x)dx = y0 +
x0

(x x0 ) (x x1 ) 2 (x x0 ) (x x1 ) (x x2 ) 3 x x0 y 0 + y0 + y0 dx = h 2h2 3!h3

3h (y0 + 3y1 + 3y2 + y3 ) = 8

Bo

rr

La gura 8.6 muestra el resultado de aplicar la f ormula de Simpsom 3/8 a la misma funci on de los ejemplo anteriores. En este caso, la integral ser a exacta porque la funci on de ejemplo elegida es un polinomio de tercer grado y coincide ex actamente con el polinomo de interpolaci on construido por obtener la integral. Al igual que en el caso del m etodo del trapecio, lo normal es no aplicar los m etodos de Simpsom a todo el intervalo de integraci on, sino divirlo en subintervalos m as peque nos y aplicar el m etodo sobbre dichos subintevalos. El resultado se conoce como m etodos extendidos de Simpsom. Al igual que sucede con la f ormula del trapecio, los m etodos extendidos de Simpsom mejoran la aproximaci on obtenida para la integral tanto m as cuanto m as peque no es el tama no de los subintervalos empleados. As la f ormula extendida de Simpsom 1/3 toma la forma,

ad o

r,j

n2

ua

xi+2

I (y )
i=0 xi

h = (y0 + 4y1 + 2y2 + 4y3 + 2y4 + + 2yn2 + 4yn1 + yn ) 3

Donde se ha dividido eel intervalo de integraci on en n subintervalos, la f ormula de Simpsom se ha calculado para cada dos subintevalos y se han sumado los resultados. Por u ltimo para la f ormula extendida de Simpsom 3/8 se puede emplear la expresi on,

n. ji m en ez @
n2

P2 (x)dx =
i=0

h (yi + yi+1 + yi+2 3

.u cm .es

8.3. LAS FORMULAS DE SIMPSON.

317

y=f(x) 2,5 p3(x) y4 y3 y2

y1

Figura 8.6: Interpretaci on gr aca de la f ormula 3/8 de Simpsom.

n2

xi+2 xi

I (y )
i=0

P3 (x)dx =

function int=integra(fun,met,inter,dib) %implementa los metodos del trapecio, etc... %Uso: int=integra(fun,inter,dib) %fun, nombre de la funci on que se desea intergrar, debe ir entre comillas %met, m etodo que se desea emplear para calcular la integral. los nombres %validos para los metodos son: trapecio, simpsom y simpsom38 %inter, es un vector de dos elementos que contiene lo extremos de intervalo %de integracion [a,b] %dib, si se da un valor a esta variable de entrada, dibuja la funci on en el %intervalo de integraci on y la integral obtenida. Si se omite no dibuja %nada. %int, valor de la integral obtenida. %Este programa no divide el intervalo de integraci on en subintervalos...

Bo

rr

ad o

En este caso tambi en se divide el intervalo en n subintervalos pero ahora se ha aplicado la regla de Simpsom 3/8 a cada tres subintevalos. A continuaci on se incluye un c odigo que permite permite aproximar la integral denida de una funci on en un intervalo por cualquiera de los tres m etodos descritos: Trapecio, Simpsom o Simpsom 3/8,

r,j

ua

3h = (y0 + 3y1 + 3y2 + 2y3 + 3y4 + 3y5 + 2y6 + + 2yn3 + 3yn2 + 3yn1 + yn ) 8

n. ji m en ez @
x0 x1 x2 x3

n2

i=0

3h (yi + 3yi+1 + 3yi+2 + yi+3 ) 8

.u cm .es

318

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

%para calcular la integral empleando subintervalos usar la funci on trocea, if strcmp(met,trapecio) f0=feval(fun,inter(1)); f1=feval(fun,inter(2)); h=inter(2)-inter(1); int=h*(f0+f1)/2; if nargin==4 x=inter(1):(inter(2)-inter(1))/100:inter(2); yfuncion=feval(fun,x); ypolinomio=f0+(x-inter(1))*(f1-f0)/h; plot(x,yfuncion,x,ypolinomio,r) end elseif strcmp(met,simpsom) pmedio=inter(1)+(inter(2)-inter(1))/2; f0=feval(fun,inter(1)); f1=feval(fun,pmedio); f2=feval(fun,inter(2)); h=(inter(2)-inter(1))./2; int=h*(f0+4*f1+f2)/3; if nargin==4 x=inter(1):(inter(2)-inter(1))/100:inter(2); yfuncion=feval(fun,x); ypolinomio=f0+(x-inter(1)).*(f1-f0)/h+(x-inter(1)).*(x-pmedio).*(f2-2*f1+f0)./(2*h^2); plot(x,yfuncion,x,ypolinomio,r) end elseif strcmp(met,simpsom38) inter=inter(1):(inter(2)-inter(1))/3:inter(2);

Bo

f=feval(fun,inter); h=(inter(4)-inter(1))/3; int=3*h*(f(1)+3*f(2)+3*f(3)+f(4))/8; if nargin==4 x=inter(1):(inter(4)-inter(1))/100:inter(4); yfuncion=feval(fun,x); ypolinomio=f(1)+(x-inter(1)).*(f(2)-f(1))/h+(x-inter(1)).*(x-inter(2)).*(f(3)-2*f(2)+f(1))./( +(x-inter(1)).*(x-inter(2)).*(x-inter(3)).*(f(4)-3*f(3)+3*f(2)-f(1))./(6*h^3); plot(x,yfuncion,x,ypolinomio,r) hold on fill([x(1) x x(length(x))],[0 ypolinomio 0],r) end else int=metodo desconocido, los metodos conocidos son trapecio, simpsom y simpsom38 end Este programa aplica directamente el m etodo deseado sobre el intervalo de integraci on. Para obtener los m etodos extendidos, podemos emplear un segundo programa que divida el intervalo de integraci on inicial en el n umero de subintervalos que deseemos, aplique el programa anterior a cada subintervalo, y, por u ltimo, sume todo los resultados para obtener el valor de la integral en el intervalo deseado. El siguiente programa, muestra un ejemplo de como hacerlo,

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

8.4. PROBLEMAS DE VALOR INICIAL EN ECUACIONES DIFERENCIALES function total=trocea(fun,met,inter,div,dib) %esta funcion lo unico que hace es trocear un intervalo en el numero de %tramos indicados por div, y llamar a la funcion integra para que integre %en cada intervalo. %USO: total=trocea(fun,met,inter,div,dib) % las variables de emtrada son la mismas que las de integra, salvo div que % representa el numero de subintervalos en que se desea dividir el % intervalo de integraci on. tramos=inter(1):(inter(2)-inter(1))/div:inter(2); total=0; if nargin==5 hold on end for i=1:size(tramos,2)-1 int=integra(fun,met,[tramos(i) tramos(i+1)],dib); total=total+int; end hold off

319

Por u ltimo indicar que Matlab posee un comando propio para calcular la integral denida de una funci on, el comando quad Este comando admite como variables de entrada el nombre de una funci on, y dos valores que representan los l mites de integraci on. Como variable de salida devuelve el valor de la integral denida en el intervalo introducido. Por ejemplo, >> i=quad(sin,0,pi) i = 2.0000

8.4.

Problemas de valor inicial en ecuaciones diferenciales

Bo

d2 x =F dt2 Si la fuerza es constante, o conocemos expl citamente como var a con el tiempo, podemos integrar la ecuaci on anterior para obtener la derivada primera de la posici on con respecto al tiempo la velocidad de una forma directa, m m d2 x dx = F v (t) = = dt2 dt F (t) dt + v (0) m

rr

Donde suponemos conocido el valor v (0) de la velocidad del cuerpo en el instante inicial. Si volvemos a integrar ahora la expresi on obtenida para la velocidad, obtendr amos la posici on en funci on del tiempo,

ad o

Las leyes de la f sica est an escritas en forma de ecuaciones diferenciales. Una ecuaci on diferencial establece una relaci on matem atica entre una variable y sus derivadas respecto a otra u otras variables de las que depende. El ejemplo m as sencillo lo encontramos en las ecuaciones de la din amica en una sola dimensi on que relacionan la derivada segunda de la posici on con respecto al tiempo de un cuerpo, con la fuerza que act ua sobre el mismo.

r,j

ua

n. ji m en ez @

.u cm .es

320

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

v (t) =

dx = dt

F (t) dt + v (0) x(t) = m

F (t) dt + v (0) dt + x(0) m

8.4.1.

Bo

El m etodo de Euler, puede obtenerse a partir del desarrollo de Taylor de la funci on x, entorno al valor conocido (a, xa ). La idea es empezar en el valor conocido e ir obteniendo iterativamente el resto de los valores x1 , hasta llegar al extremos b del intervalo en que queremos conocer el valor de la funci on x. En general podemos expresar la relaci on entre dos valores sucesivos a partir del desarrollo de Taylor como,

rr

ad o

El m etodo de Euler.

r,j

Donde x(t0 ) representa un valor inicial conocido de la funci on x(t). En muchos casos, las ecuaciones diferenciales que describen los fen omenos f sicos nos admiten una soluci on anal tica, es decir no permiten obtener una funci on para x(t). En estos caso, es posible obtener soluciones num ericas empleando un computador. En este caso, el problema de condiciones iniciales se reduce a encontrar un aproximaci on y discretizada de la funci on x(t) El desarrollo de t ecnicas de integraci on num erica de ecuaciones diferenciales constituye uno de los campos de trabajo m as importantes de los m etodos de computaci on cient ca. Aqu nos limitaremos a ver los m as sencillos. Esencialmente, los m etodos que vamos a describir se basan en discretizar el dominio donde se quiere obtener conocer el valor de la funci on x(t). As por ejemplo si se quiere conocer la el valor que toma la funci on en el intervalo t [a, b] Se divide el intervalo en n subintervalos cada uno de tama no hi . Los m etodos que vamos a estudiar nos proporcionan una aproximaci on de la funci on x(t), x0 , x2 xn en los n + 1 puntos x0 , x1 , , xn , donde x0 = a, xn = b, y xi+1 xi = hi . El valor de hi recibe el nombre de paso de integraci on. Adem as se supone conocido el valor que toma la funci on x(t) en el extremo inicial a, x(a) = xa .

ua

x(ti+1 ) = y (ti ) + (ti+1 ti )x (ti ) +

Como se trata de un problema de condiciones iniciales, conocemos la derivada primera de la funci on x(t), expl citamente,x (t) = f (x(t), t). Por tanto podemos sustituir las derivadas de x por la funci on f y sus derivadas,

n. ji m en ez @
x (t) dx = f (x(t), t), x(t0 ) dt

(ti+1 ti (ti+1 ti (n) x (ti ) + + x (ti ) + 2 n!

d2 x dx = kx + F (t) dt dt En este caso, la expresi on obtenida constituye una ecuaci on diferencial ordinaria y ya no es tan sencillo obtener una expresi on anal tica para x(t). Para obtener dicha expresi on anal tica, es preciso emplear m etodos de resoluci on de ecuaciones diferenciales. El problema del oscilador arm onico, pertenece a una familia de problemas conocida como problemas de la valores iniciales. En general, un problema de valores iniciales de primer orden consiste en obtener la funci on x(t), que satisface la ecuaci on, m

.u cm .es

Donde suponemos conocida la posici on inicial x(0). Quiz a el sistema f sico idealizado m as conocido y estudiado es el del oscilador arm onico. En este caso, el sistema est a sometido a una fuerza que depende de la posici on y , si existe disipaci on, a una fuerza que depende de la velocidad,

8.4. PROBLEMAS DE VALOR INICIAL EN ECUACIONES DIFERENCIALES

321

x(ti+1 ) = x(ti ) + (ti+1 ti )f (ti , xi ) +

(ti+1 ti (ti+1 ti (n1) f (ti , xi ) + + f (ti , xi ) + 2 n!

xi+1 = xi + h f (ti , xi )

A partir de un valor inicial, x0 es posible obtener valores sucesivos mediante un algoritmo iterativo simple, x0 = x(a) x1 = x0 + hf (a, x0 ) x2 = x0 + hf (a + h, x1 ) . . .

El siguiente c odigo implementa el m etodo de Euler para resolver un problema de condiciones iniciales de primer orden a partir de una funci on f (t) y un valor inicial x0 . %inicial o valor inicial de la variable independiente (t). %b, instante de tiempo final o valor final de la variable independiente %h paso de integraci on %podemos por elemental prudencia, comprobar que b>a %lo elegante no es pasar el paso como he hecho aqui, sino calcularlo en %funcion de cuantos puntos de la solucion queremos en el intervalo... if a>=b y=el intervalo debe ser creciente, para evitarse lios; return end y=ya; paso=1; t(paso)=a; while t(paso)<=b t(paso+1)=t(paso)+h; y(paso+1)=y(paso)+h*feval(fun,t(paso),y(paso)); paso=paso+1; end %dibuja la solucion, plot(t,y) Un ejemplo sencillo de problema de condiciones iniciales de primer orden, nos los suministra la ecuaci on diferencial de la carga y descarga de un condensador el ectrico. La gura 8.7, muestra un circuito el ectrico elemental formado por una resistencia R en serie con un condensador C . La intensidad el ectrica que atraviesa un condensador depende de de su capacidad, y de la variaci on con respecto al tiempo del voltaje entre sus extremos, I=c dVo dt

Bo

rr

ad o

r,j

ua

n. ji m en ez @
xi+1 = xi + hf (a + ih, xi )

.u cm .es

Donde xi x(ti ). Si truncamos el polinomio de Taylor, qued andonos solo con el t ermino de primer grado, y hacemos que el paso de integraci on sea jo, hi h = cte obtenemos el m etodo de Euler,

322

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

Por otro lado, la intensidad que recorre el circuito es com un para la resistencia y el condensador y el voltaje Suministrado, tiene que ser la suma de las ca das de voltaje en la resistencia y en el condensador, Vi = Vo + VR . Sustituyendo y despejando, Vi = Vo + VR Vi = Vo + I R Vi = Vo + R C Si reordenamos el resultado, dV0 dt

rr

ad o

Vi Vo RC adem as necesitamos conocer un valor inicial Vo (0) para el voltaje en el condensador. Si suponemos que el condensador se encuentra inicialmente descargado, entonces Vo (0) = 0. Para este problema se conoce la soluci on anal tica. El voltaje del condensador en funci on del tiempo viene dado por la funci on, f (t, x) V0 (t) = Vi 1 et/RC

Bo

Podemos resolver el problema de la carga del condensador, empleando el c odigo de la funci on de Euler incluido m as arriba. Lo u nico que necesitamos es denir una funci on de Matlab para representar la funci on f (x, t) de nuestro problema de valor inicial, function s=condensador(~,Vo) %t tiempo en este ejemplo la funci on no depende del tiempo por lo que esta %variable realmente no se usa... pero como el programa Euler se la pasa, %empleamos el simbolo ~ para que no de errores...

r,j

ua

Vi Vo dVo = dt RC Obtenemos una ecuaci on diferencial para el valor del voltaje en los extremos del condesador que puede tratarse como un problema de valor inicial. Para este problema, la funci on f (t, x) toma la forma,

n. ji m en ez @
VR = I R

La intensidad que atraviesa la resistencia se puede obtener a partir de la ley de Ohm,

Figura 8.7: Circuito RC

.u cm .es

8.4. PROBLEMAS DE VALOR INICIAL EN ECUACIONES DIFERENCIALES %Vo Valor del voltaje en cada iteraci on %hay que definir los parametros fijos del circuito... C=0.0001; %Capacidad del condesador en Faradios R=1000; %resitencia en Ohmios %el voltaje de entrada podr a Vi podria ser una funci on del tiempo... Aqu %vamos a considerar que es constante... Vi=10; %Voltaje suministrado al circuito en Voltios %Aqui cosntruimos la funcion que representa el circuito RC, s=(Vi-Vo)/R/C;

323

10 9 8 7 Vo (Voltios) 6 5 4 3 2 1 0

ad o

r,j

ua

n. ji m en ez @
0.2 0.4 0.6 t (segundos) 0.8

Solucin analtica h = 0.01 s h=0.05

s
1

La gura 8.8 compara gr acamente los resultados obtenido si empleamos la funci on euler(condensador,0,0,1 descrita m as arriba, para obtener el resultado de aplicar al circuito un voltaje de entrada constante Vi = 10V durante un segundo, empleando dos pasos de integraci on distintos h = 0,05s y h = 0,01s. Adem as, se ha a nadido a la gr aca el resultado anal tico.

Bo

rr

Figura 8.8: Comparacion entre los resultados obtenidos mediante el m etodo de Euler para dos pasos de integraci on h = 0,05 y h = 0,001 y la soluci on anal tica para el voltaje Vo de un condensador durante su carga. En primer lugar, es interesante observar como el voltaje V0 crece hasta alcanzar el valor Vi = 10 V del voltaje suministrado al circuito. El tiempo que tarda el condensador en alcanzar dicho voltaje y quedar completamente cargado depende de su capacidad y de la resistencia presente en el circuito. Como era de esperar, al hacer menor el paso de integraci on la soluci on se num erica se aproxima m as a la soluci on anal tica. Sin embargo, como pasaba en el caso de los m etodos de integraci on de funciones, hay un valor de h optimo. Si disminuimos el paso de integraci on por debajo de ese

.u cm .es
1.2

324

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

valor, los errores de redondeo empiezan a dominar haciendo que la soluci on empeore.

8.4.2.

M etodos de Runge-Kutta

x(ti+1 ) = x(ti ) + h f (ti , xi ) +

A partir de este resultado, es f acil comprender que resulte complicado obtener m etodos de resoluci on basados en el desarrollo de Taylor. De hecho, se vuelven cada vez m as complicados seg un vamos empleando polinomios de Taylor de mayor grado. Desde un punto de vista pr actico, lo que se hace es buscar aproximaciones a los t erminos sucesivos del desarrollo de Taylor, para evitar tener que calcularlos expl citamente. Estas aproximaciones se basan a su vez, en el desarrollo de Taylor para funciones de dos variables. Los m etodos de integraci on resultantes, se conocen con el nombre gen erico de m etodos de Runge-Kutta. Veamos c omo se har a para el caso que acabamos de mostrar, del polinomio de Taylor de segundo grado. En primer lugar obtenemos el desarrollo del polinomio de Taylor de primer grado, en dos variables de la funci on f (x, y , en un entorno del punto ti , xi , f (t, x) = f (ti , yi ) + (t ti ) f (xi , yi ) f (ti , xi ) + ( x xi ) t x

rr

Es decir,

ad o

r,j

Si ahora comparamos este resultado con la ecuaci on anterior, podr amos tratar de identicar entre s los t erminos que acompa nan las derivadas parciales, h h t = ti + 2 2 h h x xi = f (ti , xi ) x = xi + f (ti , xi ) 2 2 t ti =

Bo

f (ti , xi ) +

h 2

f (ti , xi ) f (ti , xi ) + f (ti , xi ) t x

ua

Si ahora sustituimos este resultado en nuestra expresi on del polinomio de Taylor de se segundo grado de la funci on x(t), h h , xi + f (ti , xi )) 2 2 Donde xi x(ti ). Esta aproximaci on da lugar al primero y m as sencillo de los m etodos de RungeKutta, conocido como m etodo del punto medio. El nombre es debido a que la funci on f se eval ua x(ti+1 ) = x(ti ) + h f (ti +

n. ji m en ez @
= f (ti +

h 2

f (ti , xi ) f (ti , xi ) + f (ti , xi ) t x

h h , xi + f (ti , xi )) 2 2

.u cm .es

Si intentamos emplear polinomios de Taylor de grado superior, al empleado en el m etodo de Euler, nos encontramos con la dicultad de obtener las derivadas sucesivas, con respecto al tiempo, de la funci on f . As , si quisi eramos emplear el polinomio de Taylor de segundo grado, para la funci on x, tendr amos, h2 x(ti+1 ) = x(ti ) + h f (ti , xi ) + f (ti , yi ) 2 Pero, f (t, x) f (t, x) + f (t, x) f (t, x) = t x Sacando factor com un a h, obtenemos,

8.4. PROBLEMAS DE VALOR INICIAL EN ECUACIONES DIFERENCIALES

325

en un punto a mitad de camino entre ti y ti+1 = ti + h. El c alculo de la soluci on de un problema de valor inicial mediante este m etodo, se puede expresar de un modo an alogo al del m etodo de Euler, x0 = x(a)

. . . xi+1 = xi + h f (ti + h h , xi + f (ti , yi )) 2 2

La siguiente funci on de Matlab inplementa el m etodo del punto medio,

Bo

rr

El resto de los m etodos de Runge-Kutta, los dejaremos para cuando se ais m as mayores... Pero que conste que es lo m as interesante de los m etodos num ericos.

ad o

function y=pmedio(fun,ya,a,b,h) %metodo de rungekutta de segundo orden mas conocido como del punto medio %uso: y=pmedio(fun,ya,a,b,h) % variables de entrada: fun, nombre entre comillas de la funci on que define % el problema de valor inicial que se desea resolver. ya, valor inicial. a, % instante de tiempo inicial o valor inicial de la variable independiente. % b valor de tiempo final o valor final de la variable independiente. h, % paso de integracion %podemos por elemental prudencia, comprobar que b>a %lo elegante no es pasar el paso como he hecho aqui, sino calcularlo en %funcion de cuantos puntos de la solucion queremos en el intervalo... if a>=b y=el intervalo debe ser creciente, para evitarse lios return end y=ya; paso=1; t(paso)=a; while t(paso)<=b t(paso+1)=t(paso)+h; y(paso+1)=y(paso)+h*feval(fun,t(paso)+h/2,y(paso)+h*feval(fun,t(paso),y(paso))/2); paso=paso+1; end %pintamos la solucion, plot(t,y)

r,j

ua

n. ji m en ez @

.u cm .es

x1 = x0 + h f (a +

h h , x0 + f (a, y0 )) 2 2

326

NUMERICA CAP ITULO 8. DIFERENCIACION E INTEGRACION

Bo

rr

ad o

r,j

ua

n. ji m en ez @

.u cm .es

Cap tulo 9

Tratamiento estad stico de datos


9.1. 9.2. 9.3. 9.4. 9.5. N umeros aleatorios

Probabilidad y distribuciones de probabilidad El teorema de l mite central

Incertidumbre en las medidas experimentales An alisis estadistico de datos con Matlab

TO BE CONTINUED...

Bo

rr

ad o

r,j

ua

n. ji m en ez @
327

.u cm .es

prompt, 25 Adici on en binario, 127 ALU, 18 Base 10, 20 Base 2, 20 bit, 20 Bit de signo, 126 Byte, 20

N umeros desnormalizados, 133 Mantisa, 130 normalizada, 131 Matlab, 25 entorno de programci on, 25 IDE, 25 ventana de Commandos, 25 NaN, 132 Not a Number, 132 Notaci on cient ca, 125, 130 Ordenador, 16

ua

C alculo num erico, 15 Compilador, 17 Complemento a dos, 126 Sustracci on, 127 Computador, 16 Computador hardware, 16 arquitectura, 17 Conversi on binario a decimal, 21 decimal a binario, n umeros no entero, 22 decimal a binario. n umeros enteros, 21 CPU, 18 Datos, an alisis, 15

IEEE 754 N umero desnormalizado m as pr oximo a cero en doble precisi on, 134 N umero desnormalizado m as pr oximo a cero en simple precisi on, 133 N umero m as grande representable en doble precisi on, 134 n umero m as grande representable en simple precisi on, 132 328

Bo

rr

Est andar IEEE 754, 131 Doble precisi on, 134 Simple precisi on, 131 Exponente Representaci on en exceso, 131

ad o

r,j

n. ji m en ez @
Programaci on aplicaciones, 18 lenguajes, 18 Sistema operativo, 17 Splines, 292 Truncamiento, 125 Variable, 26 nombre, 26 tipo, 27 Von Neumann, 18

Representaci on num erica, 126 complemento a dos, 126 en punto jo, 128 en punto otante, 130

.u cm .es

Indice alfab etico

GNU Free Documentation License


Copyright

2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.


<http://fsf.org/>

Version 1.3, 3 November 2008

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The Document, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as you. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A Modied Version of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A Secondary Section is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Documents overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary 329

Bo

rr

ad o

r,j

The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the eective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modications made by others. This License is a kind of copyleft, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

ua

n. ji m en ez @
Preamble

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

.u cm .es

Bo

Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The Invariant Sections are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not t the above denition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The Cover Texts are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A Transparent copy of the Document means a machine-readable copy, represented in a format whose specication is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent le format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modication by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not Transparent is called Opaque. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modication. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The Title Page means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, Title Page means the text near the most prominent appearance of the works title, preceding the beginning of the body of the text. The publisher means any person or entity that distributes copies of the Document to the public. A section Entitled XYZ means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specic section name mentioned below, such as Acknowledgements, Dedications, Endorsements, or History.) To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ according to this denition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no eect on the meaning of this License.

rr

ad o

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the 330

r,j

ua

2. VERBATIM COPYING

n. ji m en ez @

.u cm .es

reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

Bo

rr

ad o

You may copy and distribute a Modied Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modied Version under precisely this License, with the Modied Version lling the role of the Document, thus licensing distribution and modication of the Modied Version to whoever possesses a copy of it. In addition, you must do these things in the Modied Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together with at least ve of the principal authors of the Document (all of its principal authors, if it has fewer than ve), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modied Version, as the publisher. 331

r,j

ua

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Documents license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to t legibly, you should put the rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

n. ji m en ez @
4. MODIFICATIONS

.u cm .es

D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modications adjacent to the other copyright notices.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Documents license notice. H. Include an unaltered copy of this License.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the History section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled Acknowledgements or Dedications, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled Endorsements. Such a section may not be included in the Modied Version.

O. Preserve any Warranty Disclaimers. If the Modied Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modied Versions license notice. These titles must be distinct from any other section titles. You may add a section Entitled Endorsements, provided it contains nothing but endorsements of your Modied Version by various partiesfor example, statements of peer review or that the text has been approved by an organization as the authoritative denition of a standard. You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on

Bo

rr

ad o

r,j

N. Do not retitle any existing section to be Entitled Endorsements or to conict in title with any Invariant Section.

ua

n. ji m en ez @
332

I. Preserve the section Entitled History, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modied Version as given on the Title Page. If there is no section Entitled History in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modied Version as stated in the previous sentence.

.u cm .es

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modied Version under the terms of this License, in the form shown in the Addendum below.

behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modied Version.

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an aggregate if the copyright resulting from the compilation is not used to limit the legal rights of the compilations users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Documents Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

Bo

rr

ad o

7. AGGREGATION WITH INDEPENDENT WORKS

r,j

ua

n. ji m en ez @
8. TRANSLATION
333

You may combine the Document with other documents released under this License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodied, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but dierent contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled History in the various original documents, forming one section Entitled History; likewise combine any sections Entitled Acknowledgements, and any sections Entitled Dedications. You must delete all sections Entitled Endorsements.

.u cm .es

5. COMBINING DOCUMENTS

9. TERMINATION

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document species that a particular numbered version of this License or any later version applies to it, you have the option of following the terms and conditions either of that specied version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document species that a proxy can decide which future versions of this License can be used, that proxys public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

Bo

rr

ad o

Massive Multiauthor Collaboration Site (or MMC Site) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A Massive 334

r,j

ua

11. RELICENSING

n. ji m en ez @

You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and nally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder noties you of the violation by some reasonable means, this is the rst time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

.u cm .es

Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled Acknowledgements, Dedications, or History, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

ADDENDUM: How to use this License for your documents


To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the with . . . Texts. line with this:

Bo

rr

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

ad o

r,j

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

ua

n. ji m en ez @
335

.u cm .es

Multiauthor Collaboration (or MMC) contained in the site means any set of copyrightable works thus published on the MMC site. CC-BY-SA means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-prot corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. Incorporate means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is eligible for relicensing if it is licensed under this License, and if all works that were rst published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

También podría gustarte