Vista previa del material en texto
E Acerca de este eBook Métodos numéricos para ingeniería Franciso Javier Delgado Cepeda l Tecnológico de Monterrey presenta su primera colección de eBooks de texto para programas de nivel preparatoria, profesional y posgrado. En cada título, nuestros autores integran conocimientos y habilidades, utilizando diversas tecnologías de apoyo al aprendizaje. El objetivo principal de este sello editorial es el de divulgar el conocimiento y experiencia didáctica de los profesores del Tecnológico de Monterrey a través del uso innovador de la tecnología. Asimismo, apunta a contribuir a la creación de un modelo de publicación que integre en el formato eBook, de manera creativa, las múltiples posibilidades que ofrecen las tecnologías digitales. Con su nueva Editorial Digital, el Tecnológico de Monterrey confirma su vocación emprendedora y su compromiso con la innovación educativa y tecnológica en beneficio del aprendizaje de los estudiantes. www.ebookstec.com ebookstec@itesm.mx D.R. © Instituto Tecnológico y de Estudios Superiores de Monterrey, México 2013. mailto:ebookstec%40itesm.mx?subject= http://www.ebookstec.com Acerca del autor Francisco Javier Delgado Cepeda Profesor del Tecnológico de Monterrey, Campus Estado de México. Originario de Ciudad Mante, Tamaulipas, Francisco Javier Delgado Cepeda realizó estudios profesionales en física en la Universidad Autónoma Metropolitana, Unidad Iztapalapa. Tiene estudios de Maestría y Doctorado en física en el Centro de Investigación y Estudios Avanzados (CINVESTAV) del IPN. Realizó estancias posdoctorales en el CINVESTAV y en el International Centre for Theoretical Physics. Posee una Maestría en Administración de Instituciones Educativas en el Tecnológico de Monterrey. Su experiencia de trabajo ha girado, principalmente, alrededor del campo de la docencia en las áreas específicas de física, matemáticas e ingeniería, desde hace 24 años. Es profesor certificado en el uso de las técnicas didácticas de Aprendizaje Basado en Problemas y Aprendizaje Orientado a Proyectos. Asimismo, ha participado proyectos de investigación en las áreas del Control Cuántico y de la Innovación en Educación en Ciencias Básicas, habiendo publicado diversos artículos nacionales e internacionales en ambas áreas. Como directivo, ha ocupado los cargos de Director del Departamento de Matemáticas y de la División de Ingeniería y Arquitectura del Instituto Tecnológico y de Estudios Superiores de Monterrey, campus Estado de México. Ha sido autor de diversos proyectos y cursos en el modelo educativo del Tecnológico de Monterrey en las plataformas Learning Space y Blackboard: Matemáticas remediales, Física I, Física II, Electricidad y Magnetismo, Matemáticas para Arquitectura y Diseño, Estadística en las Organizaciones y Métodos Numéricos para ingeniería. Es editor del labor: Nexus IV. Relationships between Architecture and Mathematics. Ha obtenido los reconocimientos: Primer lugar en Innovación Educativa 1997 del sistema ITESM, Primer lugar en la categoría de ensayo por Innovación Educativa 2000 de FIMPES y Primer lugar en la mejor ponencia del 1er. Encuentro de Innovación Educativa del Tecnológico de Monterrey, Campus Ciudad de México. Ha sido reconocido por los campus Estado de México y Toluca por su trabajo como docente. Actualmente, Francisco Javier Delgado Cepeda es Profesor titular investigador dentro del grupo de Procesamiento Cuántico de la Información del Instituto Tecnológico y de Estudios Superiores de Monterrey, campus Estado de México, con un interés tanto por la investigación, la academia y la dirección de las Instituciones de Educación Superior. Para ver el video de bienvenida da clic aquí. https://www.youtube.com/watch?v=df5WGeYVyhw 00:00 / 00:00 Mapa de contenidos L Introducción os métodos numéricos constituyen una herramienta de análisis científico y tecnológico valiosa en nuestros días. El desarrollo de las computadoras ha permitido su desarrollo para resolver problemas de gran complejidad, desde la simulación de un fenómeno o dispositivo, hasta el estudio de sistemas complejos como la simulación de evolución de una galaxia o en análisis de esfuerzos y estabilidad de una aeronave. Esta propuesta es aplicable a cualquier curso introductorio en el tema. El uso de software y el empleo de visualizaciones apoyarán el proceso de aprendizaje que se combina con el aprendizaje básico de la programación a través de problemas matemáticos directamente aplicables a las ciencias y la ingeniería, así como a la propuesta de consideración y programación de métodos más específicos, así como el empleo del aprendizaje basado en problemas. Esto permitirá que el lector comprenda la relación de la disciplina con las aplicaciones en ingeniería. Se han considerado un buen número de aplicaciones, incluyendo problemas integrados a través de la horizontalidad de los métodos para resolver aplicaciones complejas. El software moderno se incluye directamente en cada método, en donde cada uno debe ser programado, como marca la práctica profesional debida. Actualmente, aún cuando se podría soslayar el aprendizaje de los métodos numéricos mediante el empleo de software especializado, la programación permite al lector comprender la complejidad y la necesidad de resolver determinados problemas mediante la simulación y la programación, aún asistida por esta. En resumen, las ventajas del presente libro de texto son las siguientes: a) Presentación y aprendizaje de los métodos numéricos en ingeniería hasta concretar su programación. b) Implementación de una herramienta moderna y vigente de cálculo, programación y visualización. c) Inclusión y promoción de escenarios y problemas transversales que requieren el empleo de los métodos numéricos para resolver problemas en Ciencia e Ingeniería. d) Implementación de técnicas didácticas que acompañan la metodología del libro: el Aprendizaje basado en Problemas y el Aprendizaje Orientado a Proyectos. e) Visualización de demostraciones y simulaciones que son apoyadas por el formato electrónico del libro. E Capítulo 1. Introducción a los métodos numéricos y su programación Introducción l estudio de fenómenos complejos en ciencia o el diseño en ingeniería, requiere en muchos casos, y antes de la verificación o construcción física de los mismos, un estudio teórico de ellos. A pesar de que el estudio clásico de las ciencias básicas y ciencias de la ingeniería enfatiza, en una primera aproximación, el estudio matemático y analítico de los problemas, en realidad, la complejidad de la mayoría de ellos implica técnicas diferentes a las analíticas que constituyen el cuerpo clásico de las matemáticas. La mayoría de la gente asocia el trabajo científico y tecnológico a su cuantificación numérica. Esto implica que todo fenómeno físico o construcción tecnológica tiene un comportamiento predecible y por ello puede ser cuantificado y simulado sin tener que realizarse. Ese es el sentido numérico de la ciencia y la viabilidad predictiva de la tecnología. Sin embargo, aún cuando esto es parte del conocimiento general, rara vez se comprenden las vías por las que esta cuantificación pueda lograrse. Quien haya llevado un curso de ciencia, particularmente física o introducción a las ciencias de la ingeniería (circuitos eléctricos, estática o dinámica) se encuentra con dos panoramas: los problemas “realistas” no suelen resolverse o bien, estas disciplinas resultan “aplicadas” cuando en lugar de analizar la teoría se adopta la visión del laboratorio o el taller. Parece entonces haber dos mundos que no se conectan, la teoría y la práctica. En gran medida esto ocurre porque los métodos matemáticos que se aprenden conceptualmente y que soportan la ciencia no permiten siempre resolver analíticamente las ecuaciones teóricas hasta un nivel predictivo o descriptivo. Esto es, la teoría está conformada por ecuaciones de comportamiento no resueltas en términos analíticos y, según se asegura, detrás de ellas está la descripción de los fenómenos. ¿Cómo puede entonces asegurarseque esto es así? El análisis numérico es una vía de solución alterna que permite conectar la teoría y la práctica al nivel que se quiera de medición y cálculo pero en una forma diferente a como normalmente se enseña la operación analítica de los conceptos. Las computadoras, hoy en día, juegan un papel decisivo en esto, pues la complejidad de los cálculos supera al poder humano de cómputo. La historia marca la década de los años cuarenta durante el siglo XX como el nacimiento de los métodos numéricos modernos, al conjuntarse tres elementos esenciales: el desarrollo de las computadoras electrónicas programables, el desarrollo del análisis matemático moderno y la disponibilidad y necesidad de problemas complejos en ciencia y tecnología. Aspectos como la mecánica de fluidos, el estudio de las propiedades electromagnéticas de los materiales y el análisis de sistemas mecánicos complejos dependieron fuertemente de estos desarrollos. Para saber más Una supercomputadora tiene un alto poder de cómputo y estabilidad. Empleadas para tareas intensivas de cálculo como el cálculo de procesos cuánticos, análisis de resultados de física de partículas, predicción del clima, efectos del cambio climático, cinética molecular, simulaciones aeronáuticas o automotrices en viento y procesos dentro de reactores de fusión y fisión. Las primeras fueron introducidas en la década de los sesenta, diseñadas por Seymour Cray en la compañía Control Data Corporation, hasta que Cray constituyó su propia empresa, Cray Research. Desde entonces el mercado de super-cómputo ha crecido exponencialmente. Más información aquí. El artículo de Von Newmann y Goldstine (1947) sobre inversión de matrices de orden superior estableció la posibilidad de emplear las computadoras para realizar cálculos numéricos complejos en tiempos razonables que hasta entonces no eran asequibles al ser humano. Diversos problemas que de manera conjunta aparecen en el análisis físico y tecnológico tenían las mismas características: • La solución de grandes sistemas de ecuaciones lineales que representaban sistemas complejos • La solución de sistemas de ecuaciones no lineales http://www.cray.com/Products/Products.aspx • Los problemas de optimización de un gran número de variables y restricciones • El problema del ajuste de funciones a un conjunto de puntos experimentales • La teoría de aproximaciones, mediante la cual se busca cómo aproximar un valor de una función compleja (como sin(x), ln(x), ex, etc.) a otra que se base en el empleo de operaciones básicas (la suma, resta, multiplicación y división) • El desarrollo del análisis de Fourier de señales complejas • La integración y derivación automática de funciones complejas por parte de los sistemas de cómputo • La solución de ecuaciones diferenciales ordinarias y parciales, así como de ecuaciones integrales Estos problemas aparecen de manera conjunta al analizar los sistemas físicos de fenómenos y aplicaciones complejas y el advenimiento de las computadoras programables propulsaron el desarrollo de las técnicas numéricas para hacerlo. Cada vez se planteaban problemas más complejos con un mayor número de variables, lo que competía rápidamente con la creciente capacidad de cómputo existente y la necesidad de resultados cada vez más precisos. Un ejemplo puede bastar para explicar esto. El diseño automotriz normalmente requiere de normas de calidad y predictibilidad estrictas en el movimiento hasta el orden de milímetros, pero el desarrollo de la industria aeronáutica hizo necesario que dentro de sus estándares se estableciera un nivel de predictibilidad micrométrico, en tanto que la ciencia nuclear hizo que estos valores se redujeran hasta en seis órdenes de magnitud más. Aún con las computadoras más poderosas, se hizo necesario que los complicados procesos de cálculo fueran lentos, así que precisión y rapidez comenzaron a librar una batalla muy fina para combinarse adecuadamente en las computadoras disponibles, sin comprometer la exactitud. El análisis de estabilidad de los resultados y métodos numéricos desarrollados se hizo cada vez más tan importante como el desarrollo de los métodos numéricos en sí mismos. Para saber más El impacto y simulación de la propagación de un terremoto ha sido un trabajo destacable para las computadoras CRAY por parte de la UNAM, como la propia compañía que las produce anuncia orgullosamente en su portal. Se puede estudiar la historia de los métodos numéricos estadísticamente y se encontrará que en todos los campos descritos antes, alrededor del 90% de ellos han sido desarrollados en los últimos 70 años. Si bien gran parte de los métodos numéricos estudiados en este libro no corresponden a los desarrollados a partir de 1940, el 10% restante sí surgieron como curiosidades matemáticas con baja aplicabilidad por no disponer en su momento de una plataforma de implementación como los son las computadoras. Pero son actualmente suficientes para resolver la mayoría de los problemas genéricos de simulación. Los métodos numéricos desarrollados en estos últimos 70 años son aplicables cada uno a problemas altamente específicos. Los albores del desarrollo de los métodos numéricos apenas pueden rastrearse en la historia, y están referidos a los tiempos anteriores a nuestra era con las civilizaciones egipcia y árabe que resolvieron problemas que sólo después pudieron resolverse analíticamente mediante el álgebra (un caso particular es la solución de ecuaciones de segundo grado antes de que se conociera una fórmula para resolverla) y que no perdieron vigencia por sentar las bases de desarrollos para resolver problemas que hoy se saben algebraicamente irresolubles. El comprender el uso de los métodos numéricos hoy requiere de disponer de las tres habilidades asociadas con los elementos antes mencionados. Por un lado la habilidad para comprender cómo un procedimiento numérico representa un concepto matemático que además permite manipularlo alternativamente a los métodos analíticos conocidos que poseen grandes limitantes para hacerlo; la habilidad y conocimiento de implementar estos métodos mediante la programación de una computadora programable; y finalmente, la habilidad de comprender y visualizar un problema físico o tecnológico mediante estos métodos a través de los conceptos matemáticos de análisis aprendidos analíticamente. Este libro pretende introducir al estudiante hacia estos tres aspectos. Este enfoque y su importancia pueden estar llenos de escepticismo. Por un lado quien no ha empleado los métodos numéricos para resolver un problema complejo tendrá hasta ahora dos caminos ya conocidos a los que costará trabajo renunciar: por un lado el enfoque analítico que permite resolver, mediante el análisis matemático, un problema simple sin demasiadas complicaciones como se hace en la mayoría de los cursos teóricos de ciencia e introducción a la ingeniería y por otro lado, el camino de desarrollo experimental o tecnológico, que permite diseñar un proceso o prototipo sin grandes elementos de cálculo previo. Es posible permanecer ahí por comodidad y sin grandes sobresaltos, pero el camino a la ciencia y tecnología modernas ni plantea problemas sencillos que regularmente se puedan resolver analíticamente, ni permite el dispendio ni imprecisión de un desarrollo experimental aproximado basado en el ensayo y error. Nadie construye un avión sin haberlo simulado previamente, ni un acelerador de partículas sin haber reproducido numéricamente su implementación y construcción. Para saber más El desarrollo del poder de cómputo ha desarrollado el estudio de métodos numéricos, su eficiencia y complejidad. Al dar clic aquí verás el sistema de cómputo JAGUAR, instalado en el laboratorio nacional de Oak Ridge, una de las computadoras más rápidas y robustas del mundo. Así, el desarrollo matemático de técnicas numéricas alternas a las analíticas, constituye el cuerpo de estudio de los métodos numéricos y la cuantificación de su eficiencia, al análisis numérico. De este modo, para cada elementode conocimiento matemático, se han desarrollado técnicas alternas que enfocan los problemas desde una perspectiva meramente numérica, las cuales buscan aproximarse al nivel predictivo que poseen los métodos analíticos. Si bien podríamos basar el estudio de estas técnicas en un enfoque descriptivo de las mismas y complementariamente en un enfoque analítico sobre su comportamiento, la realidad de la práctica profesional implica también el aprendizaje de su implementación sobre plataformas tecnológicas más o menos desarrolladas y basadas en la programación. La razón es simple, una creciente necesidad de precisión se alcanza típicamente con un alto número de aplicaciones de cada método, lo que escala el número de operaciones asociadas y la complejidad de desarrollarlas por técnicas elementales de cálculo. Es así como el empleo de autómatas computacionales se vuelve necesario e imprescindible. De este modo, esta obra tiene tres orientaciones. La primera es realizar una introducción a los métodos numéricos de problemas típicos y básicos, sobre todo aquellos asociados con el álgebra y el cálculo, los cuales son elementos básicos en muchas de las aplicaciones analíticas de la ciencia y la tecnología. La segunda se refiere a lograr transmitir no sólo la comprensión de los métodos numéricos, sino la forma en que estos se implementan a través de lenguajes de programación y el dominio de algunos elementos de este proceso. Finalmente, la posibilidad de emplear software especializado, que si bien simplifica el grado de dominio de los métodos numéricos, deja aún la construcción del análisis numérico de un problema. Por estas razones, este libro evoluciona a partir de la comprensión básica de algunos métodos sencillos y su enfoque recursivo, mediante el empleo de Excel como herramienta primaria, para posteriormente enfatizar la aplicabilidad de un primer lenguaje de presentación y culminar con una perspectiva dual en que el Método numérico es implementado sobre una plataforma robusta que soporta la visualización o bien mediante comandos predefinidos que se emplean en conjunto para el análisis. El tema está orientado en primera instancia al aprendizaje de la programación en un lenguajes como C++ y Python, afín al integrado en Mathematica, pero haciendo un breve énfasis en Excel con la finalidad de que los lectores inicialmente comprendan la metodología detrás de los métodos numéricos clásicos. El empleo de la herramienta Mathematica tiene como intención doble, la disposición de herramientas para la visualización y la simulación, que serán de utilidad en los proyectos integradores del libro y, por otro lado, la solución de escenarios en la metodología de Aprendizaje Basado en Problemas, los cuales serán integrados en cada capítulo http://computing.ornl.gov/ E del libro. Adicionalmente, el empleo de Mathematica permite aprender los comandos del software moderno para simulación y cálculo matemático, los cuales en la vida diaria pueden sintetizar la aplicación futura de los conceptos del libro, pero sin pasar por alto la necesidad de la programación para visualizar y realizar cálculos en ingeniería. l campo de los métodos numéricos es muy basto y busca comprender procedimientos alternos para resolver problemas matemáticos simples, pero que no pueden resolverse analíticamente. Por ejemplo, la solución de una ecuación, el cálculo de una integral, la solución de un problema de optimización o la solución de una ecuación diferencial. Aún más, hay una gran variedad de métodos numéricos específicos para cada tipo de problema, que atienden no sólo a su eficiencia relativa, sino al tipo específico de elementos matemáticos que intervienen. Otro aspecto adicional es el tipo particular de problema a resolver, ya que integrar diferentes métodos numéricos en una secuencia determinada, requiere de insumos o los genera en una forma específica que restringe su uso. Un problema clásico y probablemente conocido por el lector se ilustra en la Figura 1.1, corresponde a un oscilador de constante de restitución y longitud sin deformación, sujeto a una resistencia lineal a la velocidad con el medio con coeficiente y una fuerza armónica externa sin( ). Este problema es normalmente estudiado en los cursos de ecuaciones diferenciales o en un curso de vibraciones. La descripción del movimiento de un oscilador sujeto a fuerzas armónicas externas y resistencia, es un problema clásico que analíticamente no admite soluciones ante variaciones hacia modelos más realistas. La solución posee una amplitud máxima estacionaria que depende de la frecuencia de la fuerza armónica externa, . La ecuación que describe el movimiento es: cuya solución por métodos analíticos (coeficientes indeterminados y variación de parámetros, por ejemplo) es: donde A es una amplitud, y son fases asociadas las condiciones iniciales de posición y velocidad. Similarmente: £ La solución exhibe un término transitorio que se anula para tiempos grandes y un término armónico estacionario, que posee un máximo que puede calcularse por métodos analíticos habituales para γ y es útil para analizar la resonancia del sistema, el cual es: para: Hay varios procedimientos analíticos que se llevan a cabo aquí. El primero de ellos y que está implícito en varias partes del análisis es la posibilidad de resolver o despejar en una ecuación cualquiera de sus parámetros. Posteriormente, el obtener la solución analítica de una ecuación diferencial y finalmente el poder resolver un problema de máximos y mínimos mediante las técnicas habituales del cálculo diferencial. Una variación del modelo matemático para la fuerza armónica , puede hacer inviable la aplicación de dichas técnicas analíticas, las cuales deberán sustituirse por técnicas numéricas. Aprender cómo combinarlas para resolver problemas de análisis completos es parte del objetivo de este libro. Para saber más La resonancia es un fenómeno o conjunto de fenómenos relacionados con movimientos periódicos o cuasi-periódicos en que se genera reforzamiento de la oscilación al someter el sistema a perturbaciones externas de una frecuencia determinada que se relaciona con las frecuencias naturales del propio sistema. Este fenómeno puede ocurrir mecánicamente, acústicamente, electrónicamente o incluso a nivel molecular o atómico. El estudio de las frecuencias de resonancia es un tema de interés en el estudio de estabilidad de los sistemas. En un auto por ejemplo, el sistema de amortiguamiento puede estar mal diseñado al inducir resonancia sobre el auto cuando a velocidades típicas éste atraviesa por imperfecciones en el pavimento, por ejemplo unos vibradores o un camino de terracería. Gran parte de los métodos numéricos presentados aquí corresponden a métodos clásicos iterativos. En ellos se busca la repetición de un proceso dirigido, lo cual mejora la exactitud del resultado. Existe todo un campo de estudio relacionado con esto en matemáticas, la teoría de la estabilidad, bajo la cual se sustenta la implementación de métodos teóricamente convergentes a la solución esperada sobre sistemas de cómputo imperfectos, que poseen precisión limitada y errores de redondeo. Esta característica es la que permite obtener resultados equiparables con los métodos analíticos hasta cualquier precisión requerida como ilustra la Figura 1.2 en donde se esquematiza el proceso numérico unitario, que considera datos de entrada, que sirven como insumo del método numérico propiamente dicho, el cual incluye un criterio para decidir la salida del proceso iterativo a través de la entrega de un resultado mediante datos de salida. Aunque este proceso, debe entenderse en la práctica profesional, dentro de una secuencia de cálculo, dentro de la descripción de los métodos se hará referencia a procesos numéricos unitarios, dejando la integración a algunas aplicaciones propuestas en la sección correspondiente. Esquema de operación de un método numérico en la resolución de un problema. El proceso numérico unitario se encuentra encerrado en el recuadro punteado.A lo largo de la descripción de los métodos numéricos específicos, se empleará esta terminología en relación de procesos numéricos unitarios, datos de entrada y datos de salida, lo cual favorecerá la comprensión, identificación y construcción de algunos elementos presentes en los mismos. Debe tenerse en mente que todo método numérico no busca sólo la entrega de un resultado o salida, sino que a la par cuida la exactitud de dichos resultados, a un nivel paralelo al proceso descrito en la Figura 1.2, por lo que la descripción de los mismos será incluida paralelamente. Para saber más A diferencia de los métodos analíticos directos en donde las soluciones se obtienen en forma cerrada y funcional, los métodos iterativos, particularmente los de las matemáticas computacionales, persiguen resolver un problema (una D ecuación o sistema de ecuaciones) mediante aproximaciones sucesivas, empezando de una estimación inicial. Estos métodos de utilidad para resolver problemas complejos con gran número de variables, en los cuales es imposible obtener una solución cerrada o en la que esta tendría un alto costo temporal o computacional. ado el interés de implementar tecnológicamente los métodos numéricos que se estudiarán, al final de cada método estudiado se presentará su implementación en diferentes plataformas. De esta manera el lector podrá automatizar y comprender el método en cuestión, tanto como la manera de trabajar. En esta sección se describirán diferentes herramientas con las que se trabajará y la intención de hacerlo. Excel es una herramienta de fácil disponibilidad, aunque no se apega del todo al esquema de aplicación en el sentido de los lenguajes de programación. Sin embargo, es una herramienta que permitirá al lector introducirse a la comprensión primaria del cálculo numérico visualizando el proceso y sus elementos intermedios, así como la implementación sencilla, aunque no del todo práctica dado el manejo de un gran número de datos y celdas. Su inclusión en los métodos introductorios atiende más a una cuestión didáctica sobre la comprensión de la forma interna de trabajo de éstos, que a una promoción de su uso. En una aplicación directa de Excel se emplearán columnas para guardar un tipo particular de variable, ya sean de entrada, intermedias o de salida, y cada paso iterativo del método se representará en cada renglón, como ejemplifica la Figura 1.3 con el método de bisección para resolver ecuaciones no lineales de una variable. Ejemplificación del método de bisección en Excel. No está en el alcance de este libro mostrar al lector el empleo de Excel, y se presupone un conocimiento intermedio del mismo para las implementaciones de algunos métodos iniciales en los que este paquete será usado para una implementación didáctica de los mismos. No se requerirán conceptos adicionales a la referencia de celdas, el uso de funciones matemáticas y lógicas, así como la construcción de gráficos. La implementación real de un método numérico se hace mediante el uso de lenguajes de programación, como Fortran y C++, que son los lenguajes técnicos más difundidos. Se pueden considerar otros como Java y Python, cuyo desarrollo actual los posiciona como lenguajes sencillos. Mucho del software comercial que se emplea en ingeniería comprende programas como Mathematica y Matlab, que incluye ya comandos de aplicaciones numéricas y simbólicas. A lo largo de este libro emplearemos ambas rutas, primero el del lenguaje de programación, para posteriormente emigrar a la programación propia dentro del software comercial y finalmente al conocimiento de comandos existentes en relación a técnicas numéricas. Este último enfoque no pretende desincentivar la programación, ya que aún con el empleo de comandos de este tipo de software, la realidad es que en muchas ocasiones, sobre todo cuando se resuelven problemas complejos, es preferible construir una programación propia que puede ser controlada por el usuario o bien alternar entre programación propia y el empleo de dichos comandos. Existen diversas formas para programar. Algunas más similares a la forma secuencial de realizar cálculos y operaciones por un ser humano y otras más óptimas para un lenguaje de computadora y más eficientes al manipular simultáneamente los elementos de cálculo. La programación estructurada sigue el primer enfoque, haciendo más clara la comprensión de una estructura de comandos de programación pues refleja la realización de un cálculo a la vez, como lo haría un ser humano. En este tipo de programación, la gran mayoría de las tareas pueden realizarse mediante un conjunto reducido de comandos para secuenciar, iterar y seleccionar información. Con estas estructuras se pueden construir o programar módulos, segmentos o subrutinas que ejecuten tareas específicas y que puedan interactuar para realizar tareas más complejas (Dahl, Dijkstra & Hoare, 1972). Para saber más La programación estructurada es un enfoque para escribir programas de cómputo empleando únicamente tres estructuras: secuencia, selección e iteración; siendo innecesaria la transferencia incondicional. Alternativamente, la programación funcional es una programación que se basa en el uso de funciones aplicadas a valores, sin manejar datos intermediarios o de estado. Enfatiza así, la aplicación de funciones, en contraste con la programación imperativa, que genera cambios de estado. Aunque el proceso no sigue las pautas de la programación estructurada y por ello no reproduce las acciones de cálculo clásicas, una vez que se comprende la filosofía de programación, ésta resulta mucho más esbelta y óptima. Para ilustrar esquemáticamente estos conceptos, la Figura 1.4 muestra esta concepción para el primero de los métodos numéricos que se estudiará, el método de bisección. Este método se emplea para determinar el valor aproximado donde una función f(x) se anula, y consiste en dar dos valores aproximados que limiten a cada lado a la raíz, con lo que se calcula su valor medio y posteriormente este valor se sustituye por alguno de los valores iniciales de manera que sigan cumpliendo con acotar a la raíz. Esquematización del método de bisección, desde el punto de vista de la programación estructurada y las definiciones equivalentes de una programación funcional. El proceso se repite varias veces para mejorar la acotación de la raíz o dar un valor mejor a través del punto medio de ambas cotas. Esta descripción corresponde a una programación estructurada donde a través de un proceso iterativo se va obteniendo la aproximación mediante la repetición del método n veces. En forma alternativa, si se definen dos funciones: g que básicamente constituye la regla de sustitución de (a,b) por nuevos valores (a’,b’) y h que constituye la aplicación repetitiva de una función sobre una variable, n veces. Así, h(g(f,a,b),n) constituye la aplicación funcional del algoritmo. Posteriormente se analizará detalladamente esta comparación con la programación hecha sobre Mathematica al estudiar su sintaxis. Ambos tipos de programación serán incluidos en el desarrollo de los métodos, principalmente en forma inicial, aunque gran parte de estos son, en primera instancia, mejor comprendidos bajo la programación estructurada. En esta sección será presentada una introducción sobre la forma en que se empleará Python y Mathematica en este libro, así como una revisión superficial de la sintaxis. No se pretende agotar, por supuesto, el tema de la sintaxis, las librerías complementarias y otros aspectos de construcción de ambas herramientas, para lo cual se recomienda la revisión de bibliografía complementaria. Python es un lenguaje de programación libre, moderno y sencillo, posee cierta orientación científica al permitir programación funcional y el manejo de números complejos. En los años recientes se ha ubicado como un candidato para el aprendizaje de un primer lenguaje de programación. La razón de incluirlo aquí es sensibilizar al lector sobre el trabajo básico de programación sin recurrir a software especializado,no obstante que la visualización de los resultados no es fácilmente disponible a través de software de graficación libre para este lenguaje. Su inclusión en este libro se centra entonces en mostrar un ambiente de programación real pero básico, sobre el que se pretende obtener resultados numéricos, sin un procesamiento posterior. PARA SABER MÁS Python es un lenguaje de programación de alto nivel que se basa en una sintaxis muy limpia de código legible. Es multiparadigma pues soporta orientación a objetos, programación imperativa y programación funcional. Python puede obtenerse libremente del sitio de su distribuidor [1], el cual puede descargarse e instalarse sin muchas dificultades. Es preferible descargar algunas de las versiones 2.x (particularmente la 2.4 a 2.7), las cuales son más estables y se conforman de una sintaxis consistente. La versión 3.1 ha implementado diversos cambios y muchas librerías necesarias están aún en desarrollo, por lo que si el lector pretende emplearla puede encontrar incompatibilidades con las construidas para las versiones 2.x. Aquí se hará referencia en todo momento a la versión 2.5, pero en general lo dicho es aplicable a las versiones 2.4 a 2.7. Al instalarse, se puede trabajar ya sea desde una interfaz construida para el sistema operativo DOS o bien una interfaz más atractiva para Windows denominada IDLE (Python GUI), que al abrirse presenta una vista como la mostrada en la Figura 1.6, denominada Shell y que para fines de programación de módulos permite abrir nuevas ventanas similares cuya ejecución se realiza y visualiza en la pantalla Shell. En este libro se trabajará a partir de esta última. Shell de Python y una ventana con un módulo de programas que incluye los métodos numéricos de bisección, Newton-Raphson y punto fijo. En el Shell se muestra la ejecución de la función f(x) y de la búsqueda de una de sus raíces mediante el método de Newton-Raphson. En Python es posible ejecutar comandos desde el Shell, o bien construir programas en una de las ventanas de la interfaz y ejecutarlas en el Menú, bajo Run y Run Module, lo cual incluye en los comandos actuales los que aparezcan definidos en ese momento. La programación en Python requiere del lector cierta preparación previa, por lo que se recomienda la lectura de un texto introductorio (Budd, 2009; Gaddis, 2009) para comprender su funcionamiento básico. En lo sucesivo se asumirá que el lector tiene cierto dominio sobre el uso de Python para comprender la sintaxis de comandos básicos y aquí sólo se presentarán aspectos fundamentales para los fines de este libro. Los comandos básicos para realizar operaciones son: correspondientes a la suma, resta, multiplicación, división y exponenciación respectivamente. La inclusión de funciones y constantes matemáticas puede hacerse desde el Shell ejecutando el comando import math, con lo que algunas constantes y funciones pueden ahora ser usadas: math.sin, math.cos, math.tan, math.sqrt, math.pi, etc. Para considerar algunos comandos de programación estructurada similares a los que se emplearán en , se han preparado algunos ejemplos paralelos para presentar los comandos de selección: if, y de iteración: while y for, exactamente los que allá serán considerados. Para ayuda del lector se ha preparado el archivo Python 1.1 incluyéndolos. Un ejemplo de la ejecución de esta sintaxis y de estos comandos, puede apreciarse en la Figura 1.6. Será entonces recomendable que el lector vuelva y programe el método de bisección que aparece en la figura 1.5. http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/python_1_1.py Shell de Python y una ventana con un módulo de programas que muestra el empleo de algunos elementos de sintaxis y comandos de programación estructurada. En el Shell se muestra la ejecución de las funciones definidas en la ventana, una vez que desde esta se han ejecutado en la opción Run y Run Module en el Menú. Obsérvese el reinicio del Shell al hacer esto. El lector debe probar estas funciones desde el archivo Python 1.1 y posteriormente construir ejemplos propios. es un paquete de cómputo simbólico, que también permite el manejo numérico y que implementa también técnicas y comandos de programación. Su inclusión en este libro es de acompañamiento, ya que una vez que el alumno pueda implementar algunos métodos numéricos en Excel y pueda programarlos en Python, la meta es realizar la programación en , ya que le permitirá en forma más simple visualizar los resultados a través de los comandos y elementos gráficos que contiene. Actualmente está disponible la versión 8, pero para las aplicaciones consideradas, cualquier versión a partir de la 6.0 será útil. está constituido por tres programas básicos, y en la versión más reciente algunos más han sido añadidos. El Notebook es el programa interfaz con el usuario, el Kernel es el programa que realiza los cálculos y ejecución de comandos, en tanto que el Mathlink regula la interacción entre ellos y del Kernel para con otras aplicaciones externas desde las que se podría acceder con Mathematica. La operación de Mathematica es a través de celdas de comandos, desde las que se pueden ejecutar comandos y realizar cálculos, que son procesados por el Kernel mediante las teclas <Shift+Enter>. PARA SABER MÁS Mathematica es un paquete computacional de cálculo simbólico, escrito en lenguaje C++ orientado a objetos, lo que le permite realizar manipulaciones simbólicas. Es soportado por diversos sistemas de hardware: PC’s, Macintosh, Sistemas Unix. Su desarrollo inicia en los setentas, conocido como SMP y desarrollado por Stephen Wolfram y lanzado comercialmente en 1988 como Mathematica. La Figura 1.7 muestra un Notebook con algunos comandos aislados, que incluyen la definición de un pequeño programa o definición de un nuevo comando para calcular la raíz de una función mediante el método de bisección, por comparación con la Figura 1.6 para Python. Es deseable, para la lectura del material, que el lector tenga un conocimiento básico, al menos al nivel de ejecución, de comandos por celdas, aunque dado el nivel de uso del paquete, se dedicará una sección para presentar la sintaxis necesaria. Notebook de Mathematica mostrando algunos cálculos por celda y la definición de un programa para el método de bisección y su ejecución para encontrar numéricamente una de sus raíces. Se hará ahora un breve recorrido por algunos elementos de sintaxis de Mathematica, para lo que se ha preparado el Notebook 1.1 conteniendo las secciones y ejemplos descritos. Es necesario que el usuario disponga de una versión de Mathematica adecuada para ejecutarlo. Los ejemplos se despliegan dando doble click a las celdas de la derecha. Es recomendable que el lector se familiarice con el menú del Notebook, el cual en primera instancia es similar a un procesador de textos, para las opciones File, Edit e Insert, con los que se puede abrir, salvar e imprimir documentos. Igualmente es posible insertar elementos o importarlos. Mathematica funciona a partir de celdas, las cuales se generan del lado derecho al oprimir la tecla <Enter> sobre la pantalla del Notebook. Dentro de ella pueden escribirse ahora comandos de cálculo y operaciones como las que veremos. El usuario puede definir diferentes estilos de celda (para fines de susceptibilidad de interacción con el Kernel) desde las opciones Format y Cell, puede también escogerse el tipo de letra, tamaño y colores, dar formatos definidos al Notebook y a los encabezados. La opción permite manipular los gráficos de diferentes formas. En el usuario puede diferir, interrumpir o cerrar la operación del Kernel, cuyo dominio puede ser importante en caso de generar comandos o programas que http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb contengan errores que al ejecutarse puedan ciclar la máquina. En la opción el usuario encontrará algunas opciones para escribir algunos comandos matemáticos en su notación habitual. Aquí no se promoverá el uso delas paletas de edición en virtud de que se mantiene una proximidad a la forma de trabajo con los lenguajes de programación, pero es claro que para cálculos directos estas son de gran utilidad para no tener impedimento por desconocimiento de la sintaxis. En la opción el usuario podrá abrir y administrar varios notebooks a la vez, los cuales en una sesión dada comparten el uso del Kernel. En la opción el usuario dispone de un centro de documentación y un libro virtual, el cual por mucho es recomendable en relación a otros textos, es importante que el lector se familiarice con ellos. Una vez que el lector se haya identificado y familiarizado con la apertura de celdas y su escritura en ellas, puede considerar los ejemplos del Notebook 1.1 y/o crear ejemplos propios. Debe recordarse que una vez escrito el comando a evaluar en la celda, la interacción con el Kernel es a través de la combinación de teclas <Shift+Enter>. Varios comandos pueden ser incluidos en una celda, los cuales serán ejecutados secuencialmente en ese orden. El primer paso es tener familiaridad con los símbolos de operación aritmética: +, -, * ó <Space>, / y ^, correspondientes a la suma, resta, multiplicación, división y exponenciación respectivamente. Nótese que para la multiplicación existirán diversas opciones, tanto * como <Space> la indican, lo que implica también que en la sintaxis de no son necesarios los espacios. Aún más, para la multiplicación de un número por una variable alfabética, no es necesario ninguno de estos símbolos, en virtud de que los nombres permitidos para variables jamás pueden iniciar con números. Desde aquí puede apreciarse la existencia de variables que como Pi y E (para y e respectivamente) retornan valores idénticos, o que las operaciones regresarán resultados racionales, en virtud de la conformación de como paquete de cómputo simbólico. El uso del comando N puede ayudar a transformar estos resultados en números de punto flotante o decimales, cuando estos son englobados por éste. El uso de enteros y números de punto flotante en los cálculos hace que pueda verse forzado a trabajar en forma numérica. Ya se vio en el párrafo previo algunas diferencias entre la operación simbólica y numérica de . El usuario debe cuidar y considerar esto al trabajar con métodos numéricos, pues puede construir programas que operen bajo algunos de estos preceptos. Si lo que interesa al usuario es sólo el resultado numérico, una operación simbólica inadvertida podría hacer que demore demasiado en el cálculo, pues buscará entregar un resultado analítico. En las primeras aplicaciones de los métodos a estudiar se profundizará en este aspecto. En el Notebook 1.1 se incluyen algunos otros ejemplos de estas diferencias. . La escritura de funciones y comandos predefinidos en es relativamente intuitiva. Para las funciones matemáticas comunes se emplean los comandos habituales iniciando siempre con mayúscula: Sin, Cos, Tan, Sec, Csc, Cot, ArcSin, ArcCos, ArcTan, Sinh, Cosh, Tanh, Exp, Log, etc. Los argumentos se escriben a continuación entre corchetes, [ ], y su uso está http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb restringido a ello. En este último caso, para Log, un argumento hace referencia a la función logaritmo natural, en tanto que dos lo hacen a cualquier otra función logarítmica, siendo el primero la base del logaritmo en cuestión y el segundo el argumento propiamente dicho, separados por coma. Otras funciones no tan habituales normalmente emplean su nombre completo en inglés: Sqrt, Mean, Integrate , StandardDeviation, etc. Hay pocas excepciones a esta regla, como la derivada, D. En caso de palabras compuestas ambas inician con mayúscula. Lo mismo ocurre con comandos propios de : Plot, ListPlot, Manipulate , Module, etc. La sintaxis de estos y otros comandos puede ser revisada en el centro de documentación bajo la opción . . Existen diferentes tipos de símbolos para indicar delimitación. El primero ha sido ya estudiado y corresponde a los corchetes, [ ], reservados para indicar argumentos estrictamente después de un comando de o alguno otro definido por el usuario. En caso de contener varios argumentos el símbolo de separación es la coma: , . Los paréntesis, ( ), se emplean para jerarquizar operaciones, por ejemplo, la suma o resta que ante la exponenciación o el producto poseen menor jerarquía. Las llaves, { }, indican la construcción de una lista o intervalo. El empleo de dobles corchetes, [[ ]], indica la extracción específica de un elemento de una lista, separando por comas los diferentes niveles de la misma en caso de ser necesario. Para este ejemplo se ha empleado el símbolo = para asignar una lista, una variable que facilita su referencia. Este símbolo se estudiará a continuación. Finalmente, los símbolos (* y *), se emplean para delimitar comentarios dentro del Notebook, los cuales son inocuos al interactuar con el Kernel. . Los símbolos = y := corresponden a la asignación de valores a variables, que representan “nombres cortos” para los elementos que albergan. El primero de ellos hace una asignación inmediata, en tanto que el segundo lo hace de forma diferida al momento de emplearlo, lo cual permite una actualización permanente del valor que contiene. Esto es de utilidad en la programación, pues permite omitir líneas de programación destinadas a actualizar variables de estado. El símbolo == se emplea como elemento de igualdad en un sentido matemático, por ejemplo, al construir una ecuación determinada. . Cuando se desea definir una función o comando propio en se emplea el signo de asignación (= ó :=), anteponiendo como variable el nombre dado (no necesariamente debe iniciar con mayúscula como para los comandos del paquete) y sus variables deseadas (las necesarias y las cuales se emplean como referencia y posteriormente pueden cambiarse o sustituirse), empleando el guión bajo después de cada una de ellas (lo que indica que se está definiendo una función o comando). . Existen una gran variedad de gráficos que se pueden construir en . Buscar agotar su descripción está fuera del alcance del libro, aunque estos elementos constituyen fuentes de representación en muchos de los métodos numéricos que se estudiarán o de problemas potenciales que se analicen con procedimientos numéricos. Se describen a través del Notebook 1.1 los gráficos siguientes. El primer tipo de gráfico se ha analizado ya en otros ejemplos y corresponde al de una función de una variable en donde se señala ésta y el intervalo de graficación, Plot. En general esta será la sintaxis básica de los comandos de graficación, pero los comandos poseen argumentos como se muestra en el Notebook 1.1. Se pueden graficar varias funciones a la vez mediante el empleo de listas de funciones. El segundo tipo es el de una función de 2 variables que sigue una pauta similar a la anterior, Plot3D. Un tercer tipo corresponde a una gráfica construida a partir de puntos mediante el comando ListPlot (nótese que se emplea el comando Table para generar la lista de datos, este comando se tratará posteriormente con profundidad), ya sea que se quiera que estos se unan o no mediante una línea. El comando ParametricPlot permite graficar una función vectorial cuando se especifica en una pareja dos funciones para y escritas en términos de un tercer parámetro. Generalizaciones a tres dimensiones pueden hacerse mediante el comando ParametricPlot3D donde se especifican , y a través de un parámetro para conformar una línea, o de dos parámetros para generar una superficie. . Ya se ha visto como construir una lista de diferentes niveles. Sin embargo, es conveniente poder hacerlo mediante comandos automáticos como se hizo en el ejemplo previo para ListPlot. Un comando útil es el comando Table , que permite generar una lista de tamaño y estructura uniforme si se dispone de una fórmula para ella. Su sintaxis es simple, se colocacomo primer argumento el tipo de elemento a incluir en la lista a través de su descripción analítica, la cual de pende de uno o más parámetros, posteriormente se especifica el rango de cada parámetro indicando el inicio, fin e incremento del mismo. Por cada parámetro considerado se generará un nivel en la lista. Algunos comandos como Join, Append y Prepend permiten unir y agregar elementos a las listas ya construidas. El comando Flatten permite reducir niveles de las listas al eliminar paréntesis internos al nivel deseado. Se incentiva al lector a probar e investigar el uso y sintaxis de otros comandos de manipulación de listas como Reverse , Partition, Transpose y Drop. Esta familia de comandos es de interés en virtud de que los problemas en métodos numéricos almacenan convenientemente sus resultados en variables con estructuras de listas y su manipulación es importante. . Los comandos elementales de programación que consideraremos aquí corresponden a un tipo de programación estructurada. El usuario puede consultar los ejemplos en el Notebook 1.1, los incluidos en el centro de documentación o rápidamente dentro de un notebook cualquiera. También pueden consultar la sintaxis de cualquier comando anteponiendo el símbolo ? a cualquier comando predefinido para obtener una retroalimentación directa en una celda al oprimir <Shift+Enter>. If, es un comando que permite seleccionar entre dos opciones booleanas complementarias, dejando una alternativa para el caso indefinido en cuanto a valor de verdad, su http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb sintaxis es: Alternativamente, Which es una generalización de selección que permite evaluar diferentes condiciones complementarias a la vez y ejecutar acciones correspondientes: Debe observarse que se mencionan “acciones” en plural, la razón es que si bien el espacio corresponde a una variable, en varias de ellas pueden separarse por el símbolo ; y serán consideradas como una sola. En este mismo sentido el símbolo ; permite secuenciar acciones a la vez que inhibe las salidas de los comandos incluidos. Por ello mismo cuando un comando en una celda se ejecuta con ; al final, ninguna salida será obtenida. En relación a los comandos de iteración, el más general es While, el cual posee la sintaxis: de este modo si la resulta verdadera, las ejecución de las se repite hasta que la resulte falsa y su ejecución termine. Igualmente For, es un comando más estructurado pero menos general, pues el número de repeticiones está en general determinado por un contador interno (aunque en su interior el valor del mismo puede alterarse y generar repeticiones no predeterminadas del todo). Su sintaxis es: el símbolo < puede ser sustituido por >, <= ó >= si se requiere. Igualmente i=i+ puede ser sustituido por: i=i- , para disminuir el valor del contador i, y también por i+= y i-= respectivamente. Otras alternativas son: i++ ó i-- respectivamente, que corresponden al caso en que =1. Finalmente Module es un comando que permite secuenciar y englobar acciones para construir un programa o subrutina, el cual puede ser asignado a un nombre de variable o función corto con argumentos mediante la definición de una función, su sintaxis es: En la lista de variables locales se colocan aquellas variables internas que quieren ser eliminadas al término de la ejecución de Module. Algunas operaciones lógicas serán necesarias, en particular And y Or. Estos comandos poseen una forma funcional como todos los comandos de : And[ ] y Or[ ]. Alternativamente puede emplearse: 1 && 2 &&… y 1 || 2 ||…, respectivamente. a) Programación estructurada en Mathematica del método de bisección, y b) programación funcional del mismo método. En el primer caso se define una instrucción con variables de entrada que emplea variables de estado para buscar mejores aproximaciones a la raíz de la función f(x), en tanto, en la segunda se define una función para el proceso básico y una función de aplicación sucesiva de esta sobre los parámetros de entrada: f, a y b. Con estas especificaciones, ahora puede hacerse una proposición para el método de bisección tratado. La figura 1.8 muestra comparativamente la programación en de los dos enfoques de programación, estructurada y funcional para el método de bisección. El primer enfoque emplea comandos secuenciados, de iteración y selección, repitiendo el proceso como lo haría una persona. El comando SetPrecision se explicará después. En el segundo caso, nótese la simplicidad una vez que se identifican las funciones relevantes del problema como indica la Figura 1.4. Como ahí se dijo, ( ( , , ), ) constituye la aplicación funcional del algoritmo. En añadidura a los Nootebooks que acompañan al texto, se incluirán algunos elementos interactivos denominados Demostraciones, para lo que se recomienda al lector descargar el Player 7 de [2], para poder visualizarlos, en caso de no tener una versión de adecuada. El Player permite visualizar los Notebooks (sin ejecutar comandos) y manipular las Demostraciones. A Los tres elementos básicos a considerar encualquier método numérico, la eficiencia del mismo, la exactitud numérica de la representación computacional y los errores derivados en el proceso, ya sea por truncamiento o redondeo. l trabajar con métodos numéricos hay diversas limitantes para lograr el objetivo planteado de alcanzar un resultado hasta un exactitud planteada. Dichos factores introducen errores y limitaciones en el cálculo y deben ser considerados. Por un lado, la introducción de datos imprecisos induce , los cuales difícilmente pueden superarse a menos que tengan una pauta definida y que quien dispone de ellos lo sepa. En este texto no se considerarán este tipo de errores. Su estudio pertenece al análisis experimental, más que al análisis numérico. La presencia de diferentes errores es trasladada a diferentes etapas del análisis y es denominada . Este tipo de error puede cuantificarse a través del análisis numérico si cada método tiene una estimación de su propio error siguiendo técnicas analíticas sobre el método numérico en sí o bien aproximaciones numéricas a este. A lo largo de la descripción de los métodos consideraremos ambos análisis. La propagación a lo largo de un estudio puede determinarse mediante técnicas estadísticas o experimentales si los errores son porcentualmente pequeños. Ahora, ¿cuáles son los errores propios de un método numérico? Por un lado, dado que se emplean computadoras para realizar y automatizar estos métodos, se habla de un cuando dentro de los cálculos se emplean representaciones numéricas de funciones analíticas que pueden tener una representación limitada o que debe ser controlada para alcanzar precisiones crecientes. Tanto como Python poseen controles sobre ambos aspectos, aunque pondremos énfasis particular en el caso del primero por ser la herramienta meta en este libro. En forma análoga, un es aquel introducido por tener que disponer de representaciones de precisión finita en los cálculos y su imperfección para aproximar el último dígito de la representación de un número. Una forma de entender estos últimos puede verse a través de la realización de algunos cálculos elementales como la suma o la multiplicación de un par de números conocidos sólo hasta cierta precisión, indicada por los puntos suspensivos: en donde se realiza la suma y multiplicación de dos números con precisión dada, no necesariamente igual, mostrando así que la precisión resultante depende de la de los números de entrada y es en el mejor de los casos marcada en la posición de la línea punteada. Si bien es posible deducir reglas para la precisión heredada de cada operación numérica realizada, dar seguimiento de ello en procesos numéricos con millones de operaciones resulta inviable. Baste decir que en general, la imprecisión de la representación de los números induce errores crecientes, por loque la búsqueda iterativa de los métodos por mejores resultados compite todo el tiempo con esta limitación. Por lo tanto, para obtener una exactitud numérica determinada en un procedimiento de cálculo requerirá un manejo de dígitos más exactos que la meta para limitar este comportamiento. No obstante, el manejo de números de alta precisión es computacionalmente más caro. Adicionalmente, otra limitante es la de los métodos. En ocasiones algunos métodos deben tener un alto número de iteraciones para obtener apenas unos cuántos dígitos más de exactitud numérica, lo cual resulta indeseable. Un área del análisis numérico es la complejidad, que cuantifica en términos del número de iteraciones el orden del número de operaciones a realizar, el cual se asume proporcional al tiempo de ejecución y por tanto a la . Es así como esta terna: errores, precisión y exactitud están estrechamente ligados en la implementación y estudio de los métodos numéricos (Figura 1.9). Para fines de cuantificación de errores consideraremos dos medidas. Por un lado, el de una aproximación numérica x se define como: Este error corresponde a la aproximación de la ésima iteración. Sin embargo, este error si bien puede indicar la cifra decimal hasta la que es correcta , no indica del todo el nivel real del error en relación al valor a estimar, . Para ello se define el : el cual indica en términos porcentuales, 100 %, el grado de exactitud. Uno puede percatarse que estas estimaciones no son útiles si no se conoce el valor x a aproximar numéricamente, lo cual en aplicaciones reales no ocurre. Sin embargo, dadas las características iterativas de los métodos numéricos, una forma de aproximar es mediante una mejor aproximación del mismo método, , o posterior en la fórmula para . El cálculo de estos errores dentro de los métodos numéricos a estudiar será de vital importancia para cuantificar su exactitud. Un resultado que será de vital importancia para la cuantificación teórica de los errores de diversos métodos será el teorema de Taylor, un resultado importante del cálculo diferencial. Este teorema establece que para toda función f(x) con derivadas continuas y bien definidas en un intervalo [a, b], y dados dos números, x y xr en este intervalo, existe un número c entre ellos tal que: Este teorema también será útil expresado en la forma: Este último término es conocido normalmente como el , ya que permite visualizar una cota para la diferencia entre el valor de una función en un punto y su respectiva aproximación en serie de potencias truncada hasta orden . Si el valor de (n+1)( ) en [ , ] está acotado entonces siempre existe tal que: En lo sucesivo se verá tanto que el desarrollo en serie de potencias de una función será un elemento recurrente de algunos métodos numéricos y por ello la restricción de que las funciones involucradas y sus derivadas sean continuas en intervalos que contengan a la solución buscada. Otro aspecto importante es el que en varios métodos numéricos se consideran aproximaciones de orden diverso a una expresión funcional, por lo que la variación entre los A valores exactos y los aproximados poseen en los cálculos errores que se pueden cuantificar como: donde es el orden de la aproximación. Al emplear estas aproximaciones los errores serán proporcionales a este orden de magnitud pues son los términos remanentes del cálculo. Se empleará este resultado en diferentes partes del libro para estimar el error de la aproximación en términos de la variación del parámetro del que depende. Un resultado particular es el , que se puede escribir como: Para saber más El matemático británico Brook Taylor enunció en 1712 este teorema, aunque existe una disputa en relación a si James Gregory lo había descubierto años antes, en 1671. El teorema aproxima polinomialmente a cualquier función continua y diferenciable en una vecindad dada. Su valor es múltiple, quizá es uno de los teoremas con mayor aplicación hoy en día, pues permite tener procedimientos de cálculo de funciones en las computadoras y estimar y acotar el error de los métodos numéricos, además de brindar una vía para establecer métodos de aproximación iterativa. lo largo del libro y en cada capítulo, se incluirá la presente sección para presentar algunos métodos numéricos alternos que serán descritos brevemente, los cuales pueden ser de utilidad para desarrollar proyectos de programación alternos. Del mismo modo, se presentarán escenarios de Aprendizaje Basado en Problemas (ABP) que pueden ser empleados dentro de un curso semestral para inducir un tópico para desarrollar cada tema en caso que esta se adopte como técnica didáctica. Del mismo modo, se presentarán algunas aplicaciones que pueden permitir extenderse más allá del tema, pero manteniéndolo como punto central, y que constituyen elementos valiosos para constituir proyectos de desarrollo dentro del curso. Los siguientes escenarios están dirigidos a sustituir la discusión de comandos y realizarse para el aprendizaje de los comandos de Aprendiendo a sumar, restar y multiplicar con Mathematica. Considere el siguiente proyecto de programación. Se trata de construir un programa que permita ayudar a los niños de educación primaria a practicar la suma, la resta y la multiplicación mental. Para ello es recomendable dividir en tres módulos el problema, los cuales deben ser llamados desde un programa central que decida la operación a practicar. Las especificaciones son las siguientes: • El programa no debe contener parámetros iniciales. • El módulo central deberá preguntar si se desea practicar la suma, la resta o la multiplicación. Adicionalmente deberá solicitar dos números para establecer un rango de los números que aparecerán por parejas para realizar las preguntas. Adicionalmente deberá solicitar el número de puntos al que el niño deberá llegar para terminar la práctica, así como el tiempo en segundos que se le dará para responder. • Si el niño responde mal deberá descontar un punto del total. Si se tarda más de la tolerancia se deberá responder correctamente para continuar sin recibir puntos. Si se contesta bien recibe un punto. • El programa deberá emitir sonidos dependiendo del tipo de respuesta dada (correcta, correcta fuera de tiempo, incorrecta). Deberá ejecutar una melodía o sonidos en tanto no se agota el tiempo de tolerancia. • Al término deberá dar una estadística sobre el total de preguntas, el número de correctas, correctas fuera de tiempo e incorrectas. • Deberá imprimir o mencionar frases de bienvenida o despedida. Se sugiere consultar los comandos: Speak, Sound, EmitSound, Input y AbsoluteTiming, los cuales ayudarán a introducir elementos de control de tiempo de respuesta y sonidos que ayudarán en el proceso de aprendizaje. La recomendación es construir un módulo para cada tipo de operación, aunque entre ellos realmente haya gran número de similitudes. Estos módulos deberán ser llamados desde un programa de entrada y administración central. Para saber más Los programas de aprendizaje para niños se han vuelto muy populares pues permiten aplicar cierta práctica repetitiva pero con parámetros variables, al mismo tiempo que evaluar el desempeño. Adicionalmente se puede instruir al programa para que detecte las deficiencias y refuerce aquellos aspectos necesarios para corregirlas. Diversas simulaciones son realizadas para comprender mejor un problema. La figura muestra una simulación de la vasoconstricción generada por los depósitos de placas de colesterol en las venas, aumentando la velocidad de flujo y elevando la presión arterial. Esta simulación puede encontrarse en el sitio de demostraciones con Mathematica al dar clic aquí. Se desea realizar una simulación del comportamiento de una esfera rebotando dentro de una caja rectangular. Para ello puede emplear las ecuaciones de movimiento para actualizar las posiciones y velocidades en cada dirección, en la medida que el intervalo entre cuadros de la simulación, D , sea pequeño. La programación debe contener parámetrossegún las especificaciones: • Un parámetro deben ser las posiciones y velocidades iniciales en el formato: {{x ,y ,z },{v ,v ,v }}. • Un parámetro deben ser las dimensiones de la caja en el formato: {{x ,x },{y ,y },{y ,y }}. • La simulación debe considerar las interacciones de gravedad y resistencia con el medio. • El tiempo de simulación, , debe ser un parámetro inicial del programa. Otros parámetros son: la gravedad, , el coeficiente de resistencia con el medio (en un modelo lineal para la velocidad), , así como el radio de la esfera. Estos deben introducirse en la forma: { , , , }. Es recomendable leer la sección de Comandos implementados en Mathematica para la realización de este escenario. El empleo de los comandos de programación descritos en la sección es imprescindible. En una primera instancia el lector puede omitir el empleo del comando Module , por construir un listado de gráficos y animarlos desde la opción que aparece bajo en Rendering en las opciones del Menú. http://demonstrations.wolfram.com/ E Representación de la simulación de una pelota rebotando en una caja, sujeta a la gravedad y a resistencia con el medio, así como el comportamiento de su energía en función del tiempo. La extensión del problema previo de la esfera confinada en una caja en dos diferentes aspectos es un potencial proyecto del curso: • La inclusión de choques no elásticos con las paredes de la caja y la extensión de la simulación hacia el análisis de diagramas fase y gráficas de energía contra tiempo (Figura 1.10). • Un proyecto similar con aspectos comunes al anterior es el de una esfera dentro de un espacio esférico dentro del cual rebota. • La inclusión de dos pelotas de diferente tamaño y masa, así como la extensión de la simulación hacia el análisis de diagramas fase y gráficas de energía contra tiempo. El estudio de colisiones elásticas requerirá del manejo vectorial de los centros para determinar las velocidades posteriores. n la sección correspondiente bajo este nombre en cada capítulo se presentará la forma alterna del uso del software, como un producto de desarrollo para resolver problemas complejos a través de las soluciones propuestas por para los métodos estudiados. Para este capítulo es conveniente que para el desarrollo de animaciones derivadas de la simulación numérica, el lector se familiarice con el comando Manipulate de . Este comando permite realizar demostraciones análogas a las aquí incluidas. La sintaxis del comando es: Manipulate[ ] Como un ejemplo, considérese la graficación de una curva en tres dimensiones. Es posible emplear el comando ParametricPlot3D que se estudió. Vamos a considerar un tipo particular de función: Así que el comando para su graficación sería: ParametricPlot[{Cos[4t]Cos[t],Cos[4t]Sin[t],Sin[4t]Sin[8t]},{t,0,2Pi}] si se desea graficar en un ciclo completo. Sin embargo, uno puede decidir generar una animación en la que aparece la generación de la gráfica paulatinamente, esto se logra graficando hasta un valor menor a 2 , por ejemplo , esto se logra con: Manipulate[ ParametricPlot3D[{Cos[4t]Cos[t],Cos[4t]Sin[t],Sin[4t]Sin[8t]},{t,0,x}],{x,0,2Pi}] El lector observará la aparición de la demostración y puede explorar los controles de la misma. Hay dos aspectos importantes aquí, el primero se refiere a que adapta el tamaño de la ventana a la gráfica. Sin embargo, como está creciendo, esta no parece clara ni estética por lo que es recomendable incluir en el comando ParametricPlot3D la instrucción PlotRange que delimita el tamaño del escenario de la gráfica para que permanezca fijo. El segundo aspecto es omitir el error inicial que se genera por manejar como valor inicial de como cero, ya que en este caso no hay gráfica a generar. Esto se soluciona poniendo un valor ligeramente mayor, por ejemplo 0.1. Así: El comando Sphere grafica una esfera si se le indican las coordenadas del centro y el radio. Adicionalmente Graphics3D despliega el gráfico al englobar al comando anterior. Finalmente, el comando Show permite graficar dos objetos en un espacio común, por lo que el lector puede considerar el ejemplo siguiente: el resultado es mostrado en la Figura 1.11. Resultado del comando Manipulate estudiado en el texto. Conclusión del capítulo 1 Puedes consultar el video al hacer clic aquí. 00:00 / 00:00 http://bit.ly/id002cierrec1 Ejercicio integrador del capítulo 1 Haz clic aqui para realizar el ejercicio integrador http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/ei/ei1/c1.html Recursos del capítulo 1 Da un clic en cada liga para acceder al contenido. a) Preguntas de comprensión b) Ejercicios introductorios c) Ejercicios sobre programación de métodos numéricos d) Ejercicios aplicados Respuestas Notebook 1.1 Python 1.1 http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/c1_a_preg_comp.pdf http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/c1_d_ej_aplicados.pdf http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/python_1_1.py http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/c1_c_ej_prog_metodos_num.pdf http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/c1_respuestas.pdf http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/c1_b_ej_introductorios.pdf http://www.editorialdigitaltecdemonterrey.com/materialadicional/id002/cap1/notebook_1_1.nb Acerca de este eBook Acerca del autor Mapa de contenidos Introducción Conclusión del capítulo 1 Ejercicio integrador del capítulo 1