Logo Studenta
¡Este material tiene más páginas!

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

Más contenidos de este tema