1.0 introduccion

4
1. Introducción Autores:José María Herrera Fernández, Luis Miguel Sánchez Brea Contenidos de este capítulo: Precedentes ¿Por qué Python? Python vs. Matlab Python en el ámbito científico 1.1. Precedentes El manejo de aplicaciones informáticas, actualmente generalizado, no conlleva realmente el dominio de las nuevas tecnologías informáticas. La programación y simulación se ha convertido en una tarea necesaria en la sociedad y en el ámbito científicotécnico, y por supuesto en el ámbito académico. Sin embargo, la gran mayoría de los alumnos que llegan a los primeros cursos universitarios no tienen ninguna experiencia en programación. Incluso en cursos superiores, un porcentaje demasiado alto no han ido más allá de los ejercicios propuestos en las asignaturas obligatorías de cálculo numérico. Dentro de la asignatura “Óptica” del grado en Física de la Universidad Complutense de Madrid, Luis Miguel Sánchez Brea y José María Herrera Fernández (profesor de la asignatura y alumnotutor respectivamente) incorporaron en el curso 2011 2012 una serie de seminarios de “Computación científica de fenómenos ópticos basados en el lenguaje de programación Python. Los seminarios se enfocaron como apoyo al aprendizaje de Óptica utilizando la programación como medio de resolución de ejercicios en Óptica y fueron la semilla para este proyecto docente donde pretendemos presentar ejemplos sencillos y de fácil comprensión del uso de Python como herramienta en diferentes ámbitos. 1.2. ¿Por qué Python? Python es un lenguaje de programación moderno, de alto nivel, ideal para pequeñas aplicaciones así como para proyectos de gran envergadura. El código de Python es similar al pseudocódigo utilizado para esquematizar la programación. Permite realizar todo lo necesario para una programación completa: diseño orientado a objetos, unidades de testeo, generación de documentación en el código, sencilla interacción con el sistema operativo, etc. Es compatible con la programación basada en objetos, así como la estructurada y por eventos. Tiene un excelente conjunto de librerías para extender su funcionalidad, incluyendo librerías científicas que permiten realizar numerosas tareas de tratamiento de datos, visualización, cálculo numérico y simbólico y otras aplicaciones específicas. Además, existe una comunidad muy grande de usuarios que, debido a la filosofía “open source”, son mucho más proclives a compartir su código. A la hora de empezar a trabajar en computación lo primero que nos sorprende es la gran cantidad de lenguajes de programación, por lo que se debe realizar una selección cuidadosa. Una lista de los lenguajes de programación más utilizados se puede encontrar en la Figura 1 . TABLA DE CONTENIDOS Autores Qué es nuevo Licencia Descargas Referencias 1. Introducción 2. Puesta en Marcha 3. Lenguajes de Programación 4. Módulos Científicos 5. Ecuaciones de Maxwell en el vacío 6. Polarización 7. Interacción radiaciónmateria 8. Índice de refracción: modelo microscóp 9. Ecuaciones de Fresnel 10. Pulsos de luz 11. Interferencias 12. Módulos de Óptica 13. Difracción en campo cercano 14. Difracción en campo lejano 15. Redes de Difracción 16. Procesado óptico de la información BÚSQUEDA Ir a Introduzca los términos de búsqueda o un nombre módulo, clase o función. Computación científica con Python para módulos de evaluación continua en asignaturas de ciencias aplicadas ANTERIOR | SIGUIENTE

Upload: richard-ore-cayetano

Post on 18-Aug-2015

4 views

Category:

Documents


0 download

DESCRIPTION

python

TRANSCRIPT

1.IntroduccinAutores:JosMaraHerreraFernndez,LuisMiguelSnchezBreaContenidosdeestecaptulo:PrecedentesPorquPython?Pythonvs.MatlabPythonenelmbitocientfico1.1.PrecedentesEl manejo de aplicaciones informticas, actualmente generalizado, no conlleva realmente el dominio de las nuevastecnologasinformticas.Laprogramacinysimulacinsehaconvertidoenunatareanecesariaenlasociedadyenelmbito cientficotcnico, y por supuesto en el mbito acadmico. Sin embargo, la gran mayora de los alumnos quellegan a los primeros cursos universitarios no tienen ninguna experiencia en programacin. Incluso en cursossuperiores,unporcentajedemasiadoaltonohanidomsalldelosejerciciospropuestosenlasasignaturasobligatorasdeclculonumrico.DentrodelaasignaturapticadelgradoenFsicadelaUniversidadComplutensedeMadrid,LuisMiguelSnchezBrea y Jos Mara Herrera Fernndez (profesor de la asignatura y alumnotutor respectivamente) incorporaron en elcurso20112012unaseriedeseminariosdeComputacincientficadefenmenospticosbasadosenellenguajedeprogramacin Python. Los seminarios se enfocaron como apoyo al aprendizaje de ptica utilizando la programacincomo medio de resolucin de ejercicios en ptica y fueron la semilla para este proyecto docente donde pretendemospresentarejemplossencillosydefcilcomprensindelusodePythoncomoherramientaendiferentesmbitos.1.2.PorquPython?Python es un lenguaje de programacin moderno, de alto nivel, ideal para pequeas aplicaciones as como paraproyectos de gran envergadura. El cdigo de Python es similar al pseudocdigo utilizado para esquematizar laprogramacin.Permiterealizartodolonecesarioparaunaprogramacincompleta:diseoorientadoaobjetos,unidadesdetesteo,generacindedocumentacinenelcdigo,sencillainteraccinconelsistemaoperativo,etc.Escompatibleconlaprogramacinbasadaenobjetos,ascomolaestructuradayporeventos.Tieneunexcelenteconjuntodelibreraspara extender su funcionalidad, incluyendo libreras cientficas que permiten realizar numerosas tareas de tratamientodedatos,visualizacin,clculonumricoysimblicoyotrasaplicacionesespecficas.Adems,existeunacomunidadmuygrandedeusuariosque,debidoalafilosofaopensource,sonmuchomsproclivesacompartirsucdigo.A la hora de empezar a trabajar en computacin lo primero que nos sorprende es la gran cantidad de lenguajes deprogramacin, por lo que se debe realizar una seleccin cuidadosa. Una lista de los lenguajes de programacin msutilizadossepuedeencontrarenlaFigura1.TABLA DE CONTENI DOSAutoresQuesnuevoLicenciaDescargasReferencias1.Introduccin2.PuestaenMarcha3.LenguajesdeProgramacin4.MdulosCientficos5.EcuacionesdeMaxwellenelvaco6.Polarizacin7.Interaccinradiacinmateria8.ndicederefraccin:modelomicroscpico9.EcuacionesdeFresnel10.Pulsosdeluz11.Interferencias12.Mdulosdeptica13.Difraccinencampocercano14.Difraccinencampolejano15.RedesdeDifraccin16.ProcesadopticodelainformacinBSQUEDA IraIntroduzcalostrminosdebsquedaounnombredemdulo,claseofuncin.Computacin cientfica con Python para mdulos de evaluacin continuaen asignaturas de ciencias aplicadasANTERI OR|SI GUI ENTEFigura1.Lenguajesdeprogramacinmsutilizadosenelmundo.PythonsemantieneestablecomotercerlenguajedeprogramacindespusdelafamiliadeCydeJava.AdemscomparndoconunlenguajedembitocientficocomoMATLAB,suposicinesnotablementesuperior(4,3%deusofrentea0,6%).Fuente:TIOBEProgrammingCommunityIndexforNovember2013,http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.Porunladoexistenlenguajesdeusomuyextendido.ActualmenteJavaesellenguajemsutilizado,puesseutilizaparaaplicacionescorporativas.ElsegundolenguajeesCensusdiferentesversiones,unestndarenlaprogramacindurantemuchsimos aos. La mayor parte de las ms famosas aplicaciones de escritorio estn escritas en C++. Estos doslenguajes dominan el negocio de la programacin. PHP domina en la red. Mientras Java lo utilizan las grandesorganizaciones,PHPloutilizanempresasmspequeaseindividuosparacrearaplicacioneswebdinmicas.Porotrolado,haynumerospaquetesnumricoscomoMatlab,MathematicayMaplequeseutilizanencentrosdeinvestigacin.LagranmayoradelosalumnosquelleganalosprimeroscursosdeFsicanohanprogramadonadaocasinada.Esporelloquehemoselegidounlenguajedeprogramacinlomssencilloycompletoposible.Pythonnosofreceunagransencillez de programacin, una gran cantidad de libreras en las que basar nuestros programas y una importantecomunidaddeusuariosydesarrolladoresquelosoportan.Tambintienelaventajadeseropensource,porlononosvamosatenerqueasumirningncostedebidoaderechosdeautor.Otraventajaesserunsistemamultiplataforma,asquepodremosprogramarencualquiersistemaoperativocomoWindows,LinuxoMacOs.VeamosresumidasalgunasdelasventajasdellenguajedeprogramacinPython.Python es un lenguaje de programacin de alto nivel que permite una rpida implementacin de aplicacionescon muy poco cdigo. Es ideal para prototipado rpido, pero tambien permite el desarrollo de grandesaplicaciones.ElcdigodePythoneslegible,muysimilaralpseudocdigoutilizadoparaesquematizarlaprogramacin.Pythonesunlenguajeinterpretadoporunamquinavirtual,nocompilado,porloqueesmultiplataforma.Python permite realizar todo lo necesario para una programacin de cdigo moderna: diseo orientado aobjetos, unidades de testeo, generacin de documentacin en el cdigo, sencilla interaccin con el sistemaoperativo,etc.Tieneestructurasdedatosdealtonivel,comolaslistas,tuplasydiccionariosPermite la programacin basada en objetos, aunque tambien soporta la programacin funcional y laprogramacinestructurada.Esunlenguajedinmico,pudiendoseaadirnuevasfuncionesyclasesaunobjetoexistente,inclusoentiempodeejecucin.ExistenlibrerascientficasescritasenPhythonmadurasycongrancapacidad.Permite extender trivialmente su aplicabilidad con mdulos escritos en C, C++ y Fortran, de los que existennumerosaslibrerascientficas.Alserlosprocedimientosmsrpidosyeficientesparadesarrollodealgoritmosmatemticos (aunque a veces mucho ms complicados para otras tareas), se pueden programar las partes mssensiblesenCyrealizarelrestodelaaplicacinenPythonTiene un enorme conjunto de libreras para extender su funcionalidad: para acceseo a base de datos, paraalmacenamientodedatos,paraprocesamientodeimgenes,desonido,paraprogramacinconGUIs(Interfacesgrficasdeusuario,ventanas),yotrasmuchisimasms.Permiteelaccesoatodalafuncionalidaddelsistemaoperativo(sobretodoenLinux).Pythonsepuedeutilizarcomosoftwareglueparacombinardistintasaplicacionesenunasola(sobretodoelLinux).Elusodelaindentacinenlugardelosparntesispermiteunamayorlegibilidaddelcdigo.El cdigo Python se escriben en archivos .py. Estos archivos se pueden agrupar en mdulos, y se puedenimportarloselementosdelosmdulosaotrosarchivos.Para sistemas Unix, se puede utilizar cdigo para hacer el archivo autoejecutable indicando al sistema queprogramaqueelesunejecutable(nohacefaltaqueseaunarchivo.exe).utilizar(#!)Elcdigoesextraordinariamentesencillodecomprender.Existenmdulosdegrancalidadyrepositoriosdecdigodondesepuedeencontrarnumerosasaplicaciones.Enlinux,granpartedelosmdulosestnenlosrepositoriosestndar,porloquesuinstalacinestnsencillacomopulsarunbotn.Existeunacomunidadmuygrandedeusuariosydebidoalafilosofaopen,losdesarrolladoressonmuchomsproclives a compartir su cdigo con otros. Adems no suelen existir problemas de uso del cdigo de otros,siemprequecumplaslosrequisitosdelalicenciaGLS.AlserPythonunlenguajedepropsitogeneral,elcdigoquesegenerasepuedeaprovechardelasventajasdeotrosmdulos(comocomprimirarchivos,enviardatos,automatizarprocesos,enlazarnuestrosdatosconbasesdedatos,conservidoresweb....PythonsepuedeejecutarenbastantesIDEs(editores),desdealgunosmuysencillos,comoIDLE,hastaotrostancompletoscomoSpyder,EclipseoNetBeans.Existen diversas tcnica para creas sistemas de ventanas (Tkinter, wx, QT, etc.) de una formasorprendentemente sencilla en comparacin con otros sistemas operativos. Si se nos da bien el curso,intentaremosverQT4,atravsdelaherramientadecreacindeventanasQTDesigner4.1.3.Pythonvs.MatlabMATLAB (abreviatura de MATrix LABoratory, laboratorio de matrices) es un software matemtico que ofrece unentornodedesarrollointegrado(IDE)conunlenguajedeprogramacinpropio(lenguajeM).EstdisponibleparalasplataformasUnix,WindowsyAppleMacOSX.Entresusprestacionesbsicassehallan:lamanipulacindematrices,larepresentacindedatosyfunciones,laimplementacindealgoritmos,lacreacindeinterfacesdeusuario(GUI)ylacomunicacin con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone dedos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulacinmultidominio) y GUIDE (editor de interfaces de usuario GUI). Adems, se pueden ampliar las capacidades deMATLABconlascajasdeherramientas(toolboxes)ylasdeSimulinkconlospaquetesdebloques(blocksets).Matlabtieneventajasmuyinteresantesparalaprogramacincientfica.Lassesionesinteractivaspermitenjugarconlosdatosdeunaformamuysencilla.Lasintaxisestmuybiendesarrolladaparatrabajarconvectoresymatrices.Lacapacidaddevisualizacindedatosymodificacindefigurasesexcepcionalementebuena.Existenlibreras(normalmentepropietarias)degrancalidadyexisteunacomunidadmuygrandedeusuarios.Noobstante,lamayorpartedeestasventajastambinlastienePhython.Adems,tieneunaseriededesventajasquelodesaconsejancomoprimerlenguajedeprogramacin.Enprimerlugarnoesunlenguajedeprogramacinverdaderoyaqueestmuydedicadoalclculonumrico,aunquesufuncionalidadsehaextendidoconnumerosastoolboxes(controldebasesdedatos,interaccinconelsistemaoperativo,etc...).Adicionalmente,esunlenguajepropietarioquerequieredelicenciasexcesivamentecarasparaestudiantes.Nosepuedeejecutarcdigodeformaindependiente(standalone).NOTA:Recientementesehaproporcionadouna herramienta adicional llamada MATLAB Builder bajo la seccin de herramientas ApplicationDeployment para utilizar funciones MATLAB como archivos de biblioteca que pueden ser usados conambientesdeconstruccindeaplicacin.NEToJava.Es horrible hacer un cdigo largo, pues cada funcin debe estar en un nico archivo. Esto significan miles dearchivosyhacemscomplicadoquevariosprogramadorestrabajenenelmismocdigo.TambinPythontienealgunasdesventajasrespectoaMatlab:Noestansencillomanipularlasfigurasentiemporeal.Al existir una cantidad ingente de programadores que aportan su cdigo de forma libre, a veces es dificildeterminarcualessonlosmdulosmejoresparaunaciertaaplicacin.Haymsposiblidadesdondeelegir.1.4.PythonenelmbitocientficoPython es un lenguaje de programacin de propsito general que, en un principio, no se pens para aplicacionescientficas. Con los aos, siguiendo la filosofa GNU, se han desarrollado multitud de mdulos cientficos, quepermitenrealizarnumerosastareasdetratamientodedatos,visualizacin,clculosimblicoyaplicacionescientficasespecficas.Nosotrosutilizaremosfundamentalmentelossiguientesmduloscientficos:Numpy:Generacindetiposdedatoscientficos.http://www.numpy.org/Scipy:Funcionescientficasdeusogeneral.http://www.scipy.org/Matplotlib:Grficasen2Dy3D.http://matplotlib.org/Mayavi:visualizacindedatostridimensionales.http://code.enthought.com/projects/mayavi/Visual Python: Permite realizar representaciones tridimensionales de objetos en movimiento.http://www.vpython.org/SymPy:Clculosimblico.http://sympy.org/en/index.htmlOpencv: Biblioteca libre de visin artificial en C cuyas libreras se han adaptado a Python.http://opencv.willowgarage.com/documentation/python/Meep: clculo de Diferencias finitas en el dominio del tiempo. http://abinitio.mit.edu/wiki/index.php/Meep.NOTA: Existe un enlace (binding) para Python, de forma que se puede programar dicho mdulo de unamaneramuchomssencilla,https://launchpad.net/pythonmeep.Existen asimismo otros muchos mdulos bastante maduros escritos en Python como OpenFilters para el diseo defiltros interferenciales, http://www.polymtl.ca/larfis/English_Version/OF/OF_English.htm y Empy donde seimplementa la tcnica de RCWA, http://empy.sourceforge.net. Para ms informacin el lector puede consultar elsiguienteenlacehttp://www.scipy.org/topicalsoftware.htmldondepodrencontrarotrosmodulosdeinters.ANTERIOR|SIGUIENTEMOSTRARELCDIGOCopyright2013,LuisMiguelSnchezBrea.CreadoconSphinx