Top Banner
27

TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Dec 25, 2015

Download

Documents

Scientific Programming With Python 4th Edition.pdf
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf
Page 2: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

1 3

Hans Petter Langtangen Una cartilla en Programación Científica conPythonCuarta edicióntextosde la ciencia computacional y la ingeniería

Editorial Board TJBarth M.Griebel DEKeyes RMNieminen

Page 3: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

D.Roose T.Schlick

6

Page 4: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf
Page 5: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

6 Textos en Ciencias de la Computación e Ingeniería

Editores Timothy J. Michael Barth Griebel David E. Keyes Risto Nieminen Dirk M. Roose Tamar Schlick

Page 6: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Hans Petter Langtangen

Page 7: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Una cartilla en Programación Científica con elPythonCuarta edición

Page 8: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Laboratorio de Investigación deHans Petter Langtangen Simula Lysaker, Noruega Fornebu

Page 9: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

en licencia del

Departamentode Informática de la Universidad de Oslo, Noruega

ISSN 1611-0994 Textos en Ciencias de la Computación e Ingeniería ISBN 978-3-642-54958-8 ISBN 978-3-642-54959-5 (eBook) DOI 10.1007 / 978-3-642-54959-5 Springer Heidelberg Nueva York Dordrecht Londres

Biblioteca del Congreso Número de Control: 2014945465

Mathematics Subject Classification (2000): 26-01, 34A05, 34A30, 34A34, 39-01, 40-01, 65D15, 65D25, 65D30, 68-01, 68N01, 68N19, 68N30, 70-01, 92D25 , 97-04, 97U50

© Springer-Verlag Berlin Heidelberg 2009, 2011, 2012, 2014 Esta obra está sujeta a derechos de autor. Todos los derechos están reservados por el editor, si la totalidad o parte del material se refiere, en concreto los derechos de traducción, reimpresión, la reutilización de las ilustraciones, la recitación, la radiodifusión, la reproducción en microfilm o en cualquier otra forma física, y el almacenamiento de transmisión o información y recuperación, adaptación electrónica, software, o por la metodología similar o no conocido actualmente o desarrollado en el futuro. Están exentas de esta reserva legal son breves extractos en relación con los exámenes o análisis académico o materiales suministrados específicamente con el propósito de ser introducido y ejecutado en un sistema informático, para su uso exclusivo por parte del comprador de la obra. La duplicación de esta publicación o partes de los mismos sólo se permite bajo las disposiciones de la Ley de Propiedad Intelectual de la ubicación del Editor, en su versión actual, y el permiso para su uso siempre debe ser obtenido de Springer. Siones permiso para su uso se pueden obtener a través de Rightslink al Copyright Clearance Center. Violaciónes deben ser procesados bajo la respectiva Ley de Propiedad Intelectual. El uso de nombres descriptivos generales, nombres registrados, marcas comerciales, marcas de servicio, etc. en esta publicación no implica, incluso en ausencia de una declaración específica, que estos nombres están exentos de las leyes y reglamentos de protección pertinentes y, por tanto, libres para uso general usar. Mientras que el asesoramiento y la información en este libro se cree que son verdaderos y exactos a la fecha de publicación, ni los autores ni los editores ni el editor puede aceptar ninguna responsabilidad legal por cualquier error u omisión que se pueden hacer. El editor ofrece ninguna garantía, expresa o implícita, con respecto a los materiales contenidos en este documento.

Impreso en papel sin ácido

Springer es parte de Springer Science + Business Media (www.springer.com)

Page 10: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf
Page 11: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

PrefacioEl objetivo de este libro es enseñar a la computadora programación utilizando ejemplos de las matemáticas y las ciencias naturales. Hemos optado por utilizar el lenguaje de programación Python, ya que combina el poder expresivo con una sintaxis muy limpia, simple y compacto. Python es fácil de aprender y muy adecuado para una introducción a la programación de computadoras. Python también es bastante similar a MATLAB y un buen lenguaje para hacer de cálculo matemático. Es fácil de combinar Python con lenguajes compilados, como Fortran, C y C ++, que sean idiomas para cálculos científicos ampliamente utilizado.

Los ejemplos de este libro integran la programación con aplicaciones a las matemáticas, la física, la biología y las finanzas. Se espera que el lector tenga conocimiento de base de cálculo de una variable como se enseña en programas intensivos Matemáticas- en las escuelas secundarias. Sin duda, es una ventaja para tomar un curso de cálculo universitario en paralelo, que contiene preferentemente aspectos clásicos y numéricos de cálculo. Aunque no es estrictamente necesario, una formación en física de secundaria hace que muchos de los ejemplos más significativos.

Muchos libros de programación introductorias son bastante compacto y se centran en la lista funcionalidad de un lenguaje de programación. Sin embargo, aprender a programar es aprender a pensar como un programador. Este libro tiene su foco principal en el proceso de pensamiento, o equivalente: la programación como una técnica de resolución de problemas. Es por eso que la mayoría de las páginas están dedicadas al estudio de casos en la programación, donde definimos un problema y explicar cómo crear el programa correspondiente. Nuevas construcciones y estilos de programación (lo que podríamos llamar la teoría) también se introducen generalmente a través de ejemplos. Se presta especial atención a la verificación de los programas y para la búsqueda de errores. Estos temas son muy exigentes para el software matemático, porque los inevitables errores numéricos de aproximación son posiblemente mezcladas con errores de programación.

v

Page 12: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Prefaciovi

Page 13: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Mediante el estudio de los muchos ejemplos en el libro, espero que los lectores aprenderán cómo pensar derecho y por lo tanto escribo programas en un más rápido y de manera más fiable. Recuerde, nadie puede aprender a programar con sólo leer - uno tiene que resolver una gran cantidad de ejercicios prácticos. El libro es, por tanto, lleno de ejercicios de varios tipos:. Modificaciones de los ejemplos existentes, completamente nuevos problemas, o la depuración de programas impartidos

Para trabajar con este libro, le recomiendo usar Python versión 2.7. Por capítulos 5-9 y apéndices AE necesita los paquetes NumPy y matplotlib, preferiblemente también los paquetes IPython y SciTools, y para el Apéndice G Cython se requiere. Otros paquetes utilizados ocasionalmente en el texto son la nariz y SymPy. Sección H.1 tiene más información sobre cómo puede obtener acceso a Python y los paquetes mencionadoshttp:.

Hay una página web asociado con este libro, // Hplgit. github.com/scipro-primer, que contiene todos los programas de ejemplo del libro, así como información sobre la instalación del software en diversas plataformas. Python versión 2 o 3? Un problema común entre los programadores de Python es elegir entre la versión 2 o 3, que en el momento de escribir esto significa elegir entre la versión 2.7 y 3.4. La recomendación general es ir para Python 3, porque esta es la versión que se va a desarrollar en el futuro. Sin embargo, todavía hay un problema que mucho software matemático útil en Python aún no ha sido portado a Python 3. Por lo tanto, la computación científica con Python aún continúa en su mayoría con la versión 2. Una estrategia ampliamente utilizada para los desarrolladores de software que quieren escribir código Python que trabaja con ambas versiones, es el desarrollo de la versión 2.7, que está muy cerca de lo que se encuentra la versión 3.4, y luego usar la herramienta de traducción 2to3 para traducir automáticamente de Python 2 a Python 3.

Al utilizar v2.7, usted debe emplear la más nueva sintaxis y módulos que conforman las diferencias entre Python 2 y 3 muy pequeño. Esta estrategia se adoptó en el presente libro. Sólo se esperan dos diferencias entre las versiones 2 y 3 para ser significativo para los programas en el libro: a / b para enteros ayb implica flotador división Python 3 y división de enteros en Python 2. Además, print 'Hola' en Python 2 mosto convertirse en una llamada a la función de impresión ("Hola") en Python 3. Ninguna de estas diferencias debe conducir a problemas molestos cuando los lectores futuros estudian ejemplos v2.7 del libro, pero el programa en Python 3. De todos modos, corriendo 2to3 en el ejemplo archivos genera el correspondiente código Python 3. Contenidos. Capítulo 1 introduce variables, objetos, módulos, y formato de texto a través de ejemplos relativos a la evaluación de fórmulas matemáticas. El capítulo 2 presenta la programación con tiempo y para bucles, así como listas, incluidas las listas anidadas. El siguiente capítulo trata con otros dos conceptos fundamentales en la programación: funciones y pruebas if-else. Lectura adicional con éxito de las demandas de libros que se digieren los capítulos 1-3.

Page 14: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Prefacio vii

Page 15: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Cómo leer los datos en los programas y hacer frente a los errores de entrada son los temas del capítulo 4. El capítulo 5 introduce matrices y computación array (incluyendo vectorización) y cómo esto se utiliza para el trazado y = f (x) curvas y haciendo animación de curvas. Muchos de los ejemplos en los primeros cinco capítulos están fuertemente relacionados. Por lo general, las fórmulas del primer capítulo se utilizan para producir tablas de números en el segundo capítulo. Entonces las fórmulas se encapsulan en funciones en el tercer capítulo. En el próximo capítulo, la entrada a las funciones se obtienen de la línea de comandos o desde un diálogo de preguntas y respuestas con el usuario, y se añaden controles de validez de la entrada. Las fórmulas se muestran a continuación en forma de gráficos en el capítulo 5. Después de haber estudiado los capítulos 1.5, el lector debe tener suficiente conocimiento de programación para resolver problemas matemáticos por lo que muchos se refieren como la programación de "estilo MATLAB".

Capítulo 6 explica cómo trabajar diccionarios y cadenas, especialmente para la interpretación de los datos de texto en los archivos y el almacenamiento de la información extraída en estructuras de datos flexibles. Programación de clases, incluyendo los tipos definidos por el usuario para cálculos matemáticos (con operadores sobrecargados), se introduce en el capítulo 7. El capítulo 8 trata de números aleatorios y computación estadística con aplicaciones a juegos y paseos aleatorios. Programación, en el sentido de las jerarquías de clase y herencia orientada a objetos, es el tema del capítulo 9. Los ejemplos claves aquí tratan con herramientas de construcción para la diferenciación numérica y la integración, así como gráficos.

Apéndice A presenta la modelación matemática, utilizando secuencias y ecuaciones en diferencias . Solamente los conceptos de programación de los capítulos 1-5 se utilizan en este apéndice, con el objetivo de consolidar los conocimientos básicos de programación y aplicarlo a problemas matemáticos. Algunos temas matemáticos importantes se introducen a través de ecuaciones en diferencias de una manera sencilla: el método de Newton, de la serie de Taylor, funciones inversas, Sistemas Dinámicos y denumérica..

ofertas Apéndice B con funciones sobre una malla, la diferenciación numérica, y la integración Una simple introducción a las ecuaciones diferenciales ordinarias y su tratamiento numérico se proporciona en el Apéndice C Apéndice D muestra cómo un proyecto completo en la física se puede resolver mediante la modelización matemática, métodos numéricos, y elementos de programación de los capítulos 1-5. Este proyecto es un buen ejemplo en la resolución de problemas en la ciencia computacional, donde es necesaria la integración de la física, las matemáticas, los dígitos, y la informática.

Cómo crear software para resolver ecuaciones diferenciales ordinarias, utilizando tanto la función y basados en la programación orientada a objetos, es el tema del Apéndice E. El material en este apéndice reúne a muchas partes del libro en el contexto de las aplicaciones físicas.

Apéndice F se dedica al arte de la depuración, y en la solución de un problema de hecho en general. La aceleración de cálculos numéricos en Python por

Page 16: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Prefacio viii

Page 17: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

migrar código de C a través Cython se ejemplifica en el Apéndice G ,. Por último, el Apéndice H se ocupa de diversos temas técnicos más avanzados.

La mayoría de los ejemplos y ejercicios de este libro son bastante cortos. Sin embargo, muchos de los ejercicios están relacionados, y juntos forman los proyectos más grandes, por ejemplo, en la serie de Fourier (3,15, 4,20, 4,21, 5,39, 5,40), la integración numérica (3.6, 3.7, 5.47, 5.48, A.12), Taylor funciones inversas de la serie (3.31, 5.30, 5.37, A.14, A.15, 7,23), funciones a trozos constantes (3.23 a 3.27, 5.32, 5.45, 5.46, 7.19 a 7.21), (E.17-E.20), la caída de objetos (E.8, E.9, E.38, E.39), crecimiento de la población oscilatoria (A.19, A.21, A.22, A.23), el modelado de enfermedades epidémicas (E.41-E 0,48), timización opción y finanzas (A.24, 8,39, 8,40), estadística y probabilidad (4,23, 4,24, 8,21, 8,22), los juegos de azar (08.08 a 08.13), paseo aleatorio y física estadística (8,30-8,37) , el análisis de datos ruidoso (8,41-8,43), métodos numéricos (5.23 a 5.25, 7.8, 7.9, A.9, 7,22, 9.15 a 9.17, E.30-E.37), la construcción de una calculadora cálculo (7,33, 9,18, 9,19 ), y la creación de un conjunto de herramientas para la simulación de vibración sistemas de ingeniería (E.50-E.55).

Capítulos 1.9 junto con los Apéndices A y E tienen desde 2007 formaron el núcleo de un primer curso de licenciatura semestre de introducción a la programación científica de la Universidad de Oslo (INF1100, 10 créditos ECTS).

Los cambios de la tercera a la cuarta edición. Un gran número de los ejercicios se han reformulado y reorganizado. Por lo general, los ejercicios más largos se dividen en sub-puntos

a), b), c), etc., diferentes tipo de ayuda es eliminado en párrafos separados marcados con Hint, y la información que pone el ejercicio en un contexto más amplio se coloca en el extremo bajo

las Observaciones Dirección. Bastantes algunos ejercicios relacionados se han fusionado. Otro cambio importante es el enfoque aplicado en la prueba y verificación. Ya tan pronto como funciones se introducen en el Capítulo 3, comenzamos verify- ing las implementaciones a

través de funciones de prueba por escrito de acuerdo con los convenios en el marco de pruebas de la nariz. Esto se continuó durante todo el libro y, especialmente, incorporado en los ejercicios reformulados. Exámenes impugna en programas contienen errores de aproximación

desconocidos, por lo que las estrategias para la búsqueda de problemas de prueba apropiados también se han convertido en una parte integral de la cuarta edición.

Muchos capítulos se refieren ahora a la Python tutor en línea para visualizar el flujo del programa. Esta es una espléndida herramienta para el aprendizaje de lo que sucede con las variables y ejecución de sentencias en pequeños programas. El paquete SymPy para la computación simbólica es una herramienta poderosa en la programación científica y ya introducido en el capítulo 1. Las secciones en el Capítulo 4 se han reorganizado, y la información básica sobre la lectura y escritura de archivos fue trasladado desde el capítulo 6 del capítulo 4. La cuarta edición características claramente tres partes bien diferenciadas: conceptos básicos de programación en los capítulos 1-5, los conceptos de programación más avanzados en los capítulos 6-9, y la programación para la solución de problemas científicos en el Apéndice AEimportancia.

Secciones 4.9 y 4.10.2 se han reescrito para enfatizar la de funciones de prueba. La información sobre cómo hacer animaciones y

Page 18: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

Prefacio ix

Page 19: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

videosen las secciones 5.3.4 y 5.3.5 se ha sometido a una revisión sustancial. Sección 6.1.7 ha sido completamente reescrito para reflejar mejor la forma de trabajar con los datos asociados a fechas.

Apéndice E se ha vuelto a trabajar para que la programación basada en la función y la programación orientada a objetos aparecen en secciones separadas. Esto permite leer el apéndice y la resolución de ecuaciones diferenciales ordinarias sin el conocimiento de las clases y herencia. Gran parte del texto en el Apéndice E se ha reescrito y ampliado, los ejercicios son revisadas sustancialmente, y se han añadido varios ejercicios nuevos.

Sección H.1 es nuevo y se describen las diversas opciones para obtener acceso a Python y sus paquetes para cálculos científicos. En este tema se incluye, por ejemplo, la instalación de software en las computadoras portátiles personales y escribir cuadernos en servicios en la nube.

Además de los cambios mencionados, un gran número de cambios más pequeños, mejores explicaciones, y corrección de errores ortográficos se han in- corporado en la nueva edición. Estoy muy agradecido a todos los lectores, instructores y estudiantes que han enviado mensajes de correo electrónico con correcciones o sugerencias de mejora.

El cambio más grande tal vez para mí era pasar todo el manuscrito de LAT

E

X para Doconce1. Este movimiento permite un sición mucho más flexible nente de temas para diversos fines, y el apoyo a la producción en diferentes formatos como LAT

E

X, HTML, Esfinge, Markdown, cuadernos IPython y MediaWiki. Los capítulos se han hecho más independiente mediante la repetición de conocimientos clave, que se abre para lectura significativa de sólo partes del libro, incluso en las partes más avanzadas.

Agradecimientos. Este libro nació de estimular las conversaciones con mi colega cercano Aslak Tveito, y comenzó a escribir lo que es ahora el Apéndice B y C. El proyecto libro entero y el curso universitario asociado fueron críticamente dependiente de papel entusiasta de Aslak en 2007. El apoyo continuo de Aslak respecto a mis proyectos de libros es muy apreciado y contribuye en gran medida a mi gran motivación. Otro factor clave en los primeros días fue Ilmar Wilbers. Hizo grandes esfuerzos con la asistencia el proyecto del libro y el establecimiento de la INF1100 curso universitario. Siento que sin Ilmar y sus soluciones a numerosos problemas técnicos no se habría completado la primera edición del libro. Johannes H. Anillo también merece un reconocimiento especial para el desarrollo de la herramienta de gráficos Easyviz y por su cuidadoso mantenimiento y soporte de software asociado con el libro sobre los años.

Profesor Loyce Adams estudió todo el libro, resolvió todos los ejercicios, encontró numerosos errores, y muchas mejoras sugeridas. Sus contribuciones son tan apreciados. Más recientemente, Helmut Büch trabajó muy cuidadosamente a través de todos los detalles en los capítulos 1-6, probó el software, encontró muchos errores tipográficos, y las preguntas más importantes que llevaron a

1 https://github.com/hplgit/doconce

Page 20: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf
Page 21: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

x Prefacio

Page 22: TranslatedcopyofA Primer on Scientific Programming With Python 4th Edition.pdf

lotesde mejoras significativas . Estoy muy agradecido por todos sus esfuerzos y por su entusiasmo durante los preparativos de la cuarta edición.

Un agradecimiento especial a Geir Kjetil Sandve por ser el autor principal de los ejemplos de bioinformática computacionales en los puntos 3.3, 6.5, 8.3.4 y 9.5, con contribuciones de Sveinung Gundersen, Ksenia Khelik, Halfdan Rydbeck, y Kai Trengereid.

Varias personas han contribuido con sus sugerencias para mejorar el texto, los ejercicios, y el software asociado. Lo haré en particular mención Ingrid Eide, Ståle Zerener Haugnæss, Kristian Hiorth, Arve Knudsen, Tobias Vidarssønn Langhoff, Martin Vonheim Larsen, Kine Veronica Lund, Solveig Masvie, Håkon Møller, Rebekka Morken, Mathias Nedrebø, Marit Sandstad, Helene Norheim Semmerud, Lars Storjord, Fredrik Heffer Valdmanis y Torkil Vederhus. Hakon Adler se reconoce en gran medida por su cuidadosa lectura de diversos primeras versiones del manuscrito. Muchas gracias a los profesores Fred Espen Bent, Ørnulf Borgan, Geir Dahl, Knut Morken, y Geir Pedersen para la formulación de varios ejercicios interesantes de diversos campos de aplicación. También aprecio la imagen del libro hecha por mi buen amigo Jan Olav Langseth.

Este libro y el curso asociada son partes de una reforma integral y exitoso en la Universidad de Oslo, llamados Computación en la Educación la Ciencia. El objetivo de la reforma es la integración de la programación de computadoras y simulación en todos los cursos de licenciatura en ciencias naturales donde se utilizan cas modelos matemá-. El presente libro sienta las bases para el problema computarizada moderna técnica de resolución que se aplicará en los cursos posteriores. Ha sido muy inspirador para trabajar en estrecha colaboración con las fuerzas impulsoras detrás de esta reforma, especialmente los profesores Morten Hjorth-Jensen, Anders Malthe-Sorenssen, Knut Morken y Arnt Inge Vistnes.

La excelente asistencia del sistema de Springer, en particular, Martin Peters, Thanh-Ha Thi Le, Ruth Allewelt, Peggy Glauch-Ruge, Nadja Kroke, Thomas Schmidt, Patrick Waltemate y Donatas Akmanavicius, es muy apreciada, y se aseguró una producción rápida y sin problemas de todas las ediciones de este libro.

Oslo, marzo de 2014 Hans Petter Langtangen