Sei sulla pagina 1di 12

yoy

FACULTAD DE INGENIERIA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS

PROGRAMACION AVANZADA

ALUMNOS:

Donato Atao Huamn

Juan Carlos Palomino Miranda

DOCEMNTE:

Rubn Apaza Apaza

Andahuaylas 05 de mayo del 2017


COMPUTACIN CIENTFICA SIMULACIN Y
CIENCIA
1.1Qu es la simulacin?
La ciencia y la ingeniera han sufrido una gran transformacin en la
investigacin, as como en el desarrollo y la tecnologa. El cientfico moderno
y el ingeniero pasan cada vez ms tiempo delante de una computadora
porttil, una estacin de trabajo, o un superordenador paralelo y cada vez
menos tiempo en el laboratorio fsico o en el taller. El tnel de viento virtual
y el laboratorio virtual de biologa no son cosa del futuro, estn aqu! El
antiguo enfoque de "cortar y tratar" ha sido sustituido por "simular y
analizar" en varias reas tecnolgicas claves como aplicaciones
aeroespaciales, sntesis de nuevos materiales, diseo de nuevos frmacos,
procesamiento de chips y micro fabricacin, etc. La nueva disciplina de la
nanotecnologa se basar principalmente en clculos a gran escala y
experimentos numricos. Los mtodos de anlisis cientfico y diseo de
ingeniera estn cambiando continuamente, tanto por nuestro acercamiento
a los fenmenos que estudiamos como por la gama de aplicaciones que
abordamos. Si bien hay una gran cantidad de software disponible para ser
utilizado casi como una "caja negra", trabajar en nuevas reas de aplicacin
requiere un buen conocimiento de los fundamentos y el dominio de nuevas
herramientas eficaces.
En el enfoque cientfico clsico, el sistema fsico se simplifica y fija en una
forma que sugiere qu tipo de fenmenos y procesos pueden ser
importantes y, en consecuencia, qu experimentos se van a realizar. En
ausencia de ecuaciones gobernantes de tipo conocido, la interdependencia
dimensional entre los parmetros fsicos puede guiar los experimentos de
laboratorio en la identificacin de los principales estudios paramtricos. La
base de datos producida en el laboratorio se utiliza entonces para construir
un modelo simplificado de "ingeniera" que despus de la validacin del
ensayo de campo se utilizar en otras investigaciones, desarrollo de
productos, diseo y posiblemente conducir a nuevas aplicaciones
tecnolgicas. Este enfoque se ha utilizado casi invariablemente en todas las
disciplinas cientficas, es decir, ingeniera, fsica, qumica, biologa, etc.
El enfoque de simulacin sigue una trayectoria paralela, pero con algunas
diferencias significativas. En primer lugar, la fase del anlisis del modelo
fsico es ms elaborada: el sistema fsico se funde en una forma gobernada
por un conjunto de ecuaciones diferenciales parciales, que representan
aproximaciones continuas a modelos microscpicos. Tales aproximaciones
no son posibles para todos los sistemas, ya veces el modelo microscpico
debe ser utilizado directamente. En segundo lugar, el experimento de
laboratorio se sustituye por la simulacin, es decir, un experimento
numrico basado en un modelo discreto. Tal modelo puede representar una
aproximacin discreta de las ecuaciones diferenciales parciales continuas, o
simplemente representar una representacin estadstica del modelo
microscpico. Las aproximaciones de diferencia finita en una cuadrcula son
ejemplos del primer caso, y los mtodos de Monte Carlo son ejemplos del
segundo caso. En cualquier caso, estos algoritmos tienen que ser
convertidos a software usando un lenguaje de computadora apropiado,
depurado y ejecutado en una estacin de trabajo o un superordenador
paralelo. La salida suele ser un gran nmero de archivos de unos pocos
Megabytes a cientos de Gigabytes, siendo especialmente grande para
simulaciones de fenmenos temporalmente independientes.
Para ser til, esta base de datos numrica debe ser puesta en forma grfica
usando varias herramientas de visualizacin, que no siempre pueden ser
adecuadas para la aplicacin particular considerada. La visualizacin puede
ser especialmente til durante simulaciones donde se requiere
interactividad ya que la cuadrcula puede estar cambiando o el nmero de
molculas puede estar aumentando.
El enfoque de simulacin ya ha sido seguido por la mayora de los
investigadores en todas las disciplinas en las ltimas dcadas. La pregunta
es si se trata de una nueva ciencia, y cmo uno podra formalmente obtener
tales habilidades. Adems, constituye esto un nuevo conocimiento
fundamental o un "procedimiento mecnico", una habilidad comn que un
qumico, un bilogo o un ingeniero adquirirn fcilmente como parte de la
"formacin en el trabajo" sin una educacin formal especfica. Parece que ha
llegado el momento en que tenemos que reconsiderar las fronteras entre las
disciplinas y reformular la educacin del futuro cientfico de la simulacin,
un cientfico interdisciplinario.
Vamos a volver a examinar algunos de los requisitos que siguen los diversos
pasos en el enfoque de simulacin. La primera tarea es seleccionar la
representacin correcta del sistema fsico haciendo suposiciones
consistentes para derivar las ecuaciones gobernantes y las condiciones de
frontera asociadas. Deben cumplirse las leyes de conservacin; La condicin
de entropa no debe ser violada; El principio de la incertidumbre debe ser
honrado. La segunda tarea es desarrollar el procedimiento algortmico
correcto para discretizar el modelo de continuo o representar la dinmica
del modelo atomstico. Las opciones son muchas, pero cul es el algoritmo
ms exacto, o el ms simple, o el ms eficiente? Estos algoritmos no
pertenecen a una disciplina! Elementos finitos, desarrollados por el famoso
matemtico Courant y descubiertos por ingenieros civiles, han encontrado
su camino en todas las disciplinas de ingeniera, fsica, geologa, etc. Las
simulaciones de dinmica molecular son practicadas por qumicos, bilogos,
cientficos materiales y otros. La tercera tarea es calcular de manera
eficiente en el mundo siempre cambiante de la supercomputacin. La
eficacia de la computacin se traduce en lo realista de un problema que se
resuelve, y por lo tanto, la utilidad de los resultados pueden ser a las
aplicaciones. La cuarta tarea es evaluar la exactitud de los resultados en los
casos en que no es posible la confirmacin directa de experimentos fsicos,
como en nanotecnologa en biosistemas o en astrofsica, etc. La fiabilidad de
la respuesta numrica pronosticada es una cuestin importante en el
enfoque de simulacin como Algunas de las respuestas pueden conducir a
la nueva fsica o a la fsica falsa contenida en el modelo discreto o inducida
por el algoritmo, pero no derivada del problema fsico. Por ltimo, la
visualizacin del fenmeno simulado, en la mayora de los casos en el
espacio tridimensional y en el tiempo, mediante el empleo de grficos de
ordenador adecuados (una especialidad por s sola) completa el ciclo
completo de simulacin. El resto de los pasos seguidos son similares al
enfoque cientfico clsico.
En la ciencia clsica estamos tratando con la materia y por lo tanto con los
tomos, pero en la simulacin estamos tratando con informacin y por lo
tanto bits, por lo que es tomos versus bits! Deberamos, por lo tanto,
reconocer al cientfico de la simulacin como un cientfico separado, de la
misma manera que reconocamos hace unas dcadas al informtico como
diferente al ingeniero elctrico o al ingeniero elctrico

Figura 1.1: Definicin de la informtica cientfica como la interseccin de la


matemtica numrica, la informtica y la modelizacin.
Matemtico aplicado. El nuevo cientfico ciertamente no es un informtico,
aunque debe ser informtica en software y hardware. Ella no es un fsico,
aunque necesita un fondo de la fsica sana. Ella no es una matemtica
aplicada, aunque necesita conocimientos de anlisis matemtico y teora de
la aproximacin.
Con los avances rpidos y simultneos en el software y la tecnologa
informtica, especialmente la computacin de productos bsicos, la ciencia
de la creacin de souper, cada cientfico e ingeniero tendr en su escritorio
un avanzado kit de simulacin de herramientas que consistir en una
biblioteca de software y computadoras multiprocesador que harn Anlisis,
desarrollo de productos y diseo ms ptimo y rentable. Pero lo que los
futuros cientficos e ingenieros necesitarn, en primer lugar, es una slida
educacin interdisciplinaria.
La computacin cientfica es el corazn de la ciencia de la simulacin, y este
es el tema de este libro. El nfasis est en el equilibrio entre los elementos
clsicos y modernos de la matemtica numrica y de la informtica, pero
hemos seleccionado los temas basados en los conceptos generales de
modelado encontrados en las ciencias fsico-qumicas y biolgicas o incluso
en la economa. (Vase la figura 1.1).
1.2 Una trayectoria perfecta del acercamiento
Nuestro objetivo al escribir este libro ha sido proporcionar al estudiante, el
futuro cientfico de simulacin, un enfoque sin fisuras de algoritmos
numricos, tcnicas de programacin modernas y computacin paralela.
Muchas veces estos conceptos y herramientas se ensean en serie a travs
de diferentes cursos y diferentes libros de texto, y por lo tanto la
interconexin entre ellos no es inmediatamente evidente. La necesidad de
integrar conceptos y herramientas generalmente viene despus de que
estos cursos se concluyan, p. Durante un primer trabajo o un proyecto de
tesis, forzando as al estudiante a sintetizar lo que se percibe como tres sub
fondos independientes en uno para producir una solucin. Aunque este
proceso es indudablemente valioso, consume mucho tiempo y en muchos
casos puede no conducir a una combinacin efectiva de conceptos y
herramientas. Adems, desde el punto de vista pedaggico, el enfoque
integrado y sin fisuras puede estimular al estudiante simultneamente a
travs de los ojos de mltiples disciplinas, llevando as a una mayor
comprensin de los sujetos en la informtica cientfica.

Figura 1.2: Integracin simultnea de los conceptos mostrados en (a) en


contraste con la integracin serial clsica mostrada en (b).
Como se discuti en la seccin anterior, en el enfoque de simulacin
cientfica hay varias etapas sucesivas que conducen de:
1. El problema del mundo real a su formulacin matemtica;
2. Desde la descripcin matemtica hasta la implementacin y solucin de
la computadora, y
3. De la solucin numrica a la visualizacin y al anlisis.
En este libro nos concentramos en el estadio (2) que incluye no slo las
matemticas del lgebra lineal y la discretizacin numricas, sino tambin
la implementacin de estos conceptos en C ++ y MPI.
Existen actualmente excelentes libros de texto y monografas sobre estos
temas, pero sin el tipo de integracin que proponemos. Por ejemplo, el libro
de Golub & Ortega [45] introduce pedaggicamente todos los conceptos
bsicos paralelos, pero queda una brecha entre la formulacin paralela y su
implementacin. Del mismo modo, los libros de Trefethen & Bau [88] y
Demmel [26] proporcionan rigor y una gran comprensin de algoritmos de
lgebra lineal numrica, pero no proporcionan material suficiente sobre la
discretizacin y la implementacin. Por otra parte, los libros populares en C
++ (por ejemplo, por Stroustrup [86]) y MPI (por ejemplo, por Pacheco [73])
son referencias que ensean la programacin utilizando ejemplos
algortmicos desconectados, que es til para adquirir conocimientos de
programacin general, pero no para Computacin cientfica paralela.
Nuestro libro trata los nmeros, el paralelismo y la programacin igualmente
y simultneamente colocando al lector en un punto ventajoso entre las tres
reas, como se muestra en el esquema de la figura 1.2 (a), y en contraste
con el enfoque clsico de conectar los tres sujetos en serie Como se ilustra
en la figura 1.2 (b).
1.3 El concepto de lenguaje de programacin.
Al estudiar lenguajes de computacin, queremos estudiar una nueva forma
de interactuar con el ordenador. La mayora de la gente est familiarizada
con el uso de software comprado en su tienda de computadoras local,
software que va desde procesadores de texto y hojas de clculo hasta
juegos interactivos. Pero, te has preguntado alguna vez cmo se crean
estas cosas? Cmo usted realmente "escribe" el software? A lo largo de
este libro estaremos enseando a travs de conferencias y ejemplos cmo
crear software informtico que resuelva problemas cientficos. Nuestro
propsito no es ensearle cmo escribir juegos de computadora y similares,
pero el conocimiento adquirido aqu puede usarse para disear sus propios
esfuerzos de software.
Algunos han afirmado que la computadora es un dispositivo bastante mudo,
en el sentido de que slo entiende dos cosas - on y o ff. Como el envo de
cdigo Morse a travs de un cable telegrfico con seales de puntos y
guiones, la computadora utiliza secuencias de ceros y unos como su
lenguaje. Los ceros y unos pueden parecer ineficaces, pero no son slo los
datos utilizados, sino que las reglas se aplican a los datos que la hacen
poderosa. Este concepto, en teora, no es distinto del lenguaje humano. Si
tuviramos que presentar una coleccin de smbolos, digamos abcd ... z, e
indicarle que puede usarlos para expresar incluso los pensamientos y
emociones ms complejos de la mente y el corazn humanos, podra pensar
que estbamos locos. Slo 26 smbolos pequeos? Cmo puede ser esto?
Sabemos, sin embargo, que no son slo los smbolos los que son
importantes, sino las reglas utilizadas para combinar los smbolos. Si usted
se adhiere a las reglas definidas por el idioma ingls, entonces libros como
ste pueden ser escritos usando combinaciones simples de 26 caracteres!
Cmo es esto similar a la computadora? La computadora es un dispositivo
complejo para ejecutar instrucciones. Estas instrucciones se articulan
utilizando nuestros caracteres de dos bases, 0 y 1, junto con una coleccin
de reglas para combinarlos juntos. Esto nos lleva a nuestro primer axioma:
Axioma I: Los ordenadores son mquinas que ejecutan instrucciones. Si
alguien no est diciendo a la computadora qu hacer, no hace nada. La
mayora de la gente ha tenido alguna experiencia con las computadoras, e
inmediatamente leern esta declaracin y dirn: "Hola, he hecho que mi
computadora hiciera todo tipo de cosas que no quera!". Ah, pero lea el
axioma cuidadosamente. La clave de este axioma es el uso del trmino
alguien. La nica cosa a tener en cuenta es que algunos seres humanos, o
coleccin de seres humanos, desarrollaron un software para decirle al
ordenador qu hacer. En un nivel relativamente bajo, esta sera la gente que
escribi el sistema operativo utilizado por la computadora. En un nivel
superior, esta sera la gente que desarroll el procesador de palabras o
juego que estaba usando. En ambos casos, sin embargo, alguien determin
cmo la computadora actuara y reaccionara a su entrada. Le deseamos,
despus de leer este libro y de entender los conceptos aqu, poder estar en
el asiento del conductor. Esto nos lleva a nuestro segundo axioma:
Axioma II: Los lenguajes de programacin informtica permiten a los seres
humanos simplificar los medios de dar instrucciones al ordenador. Te
decimos que queremos que ests en el asiento del conductor, y me dices:
"No quiero aprender a comunicarse en ceros y unos ... aprender ingls era lo
suficientemente duro!" Se puede imaginar lo lento que el ordenador La edad
habra progresado si cada clase de programacin consista en el siguiente
esquema de conferencia. Imagnese el primer da de clase. En el primer da,
el instructor le dice que va a aprender los dos componentes bsicos del
lenguaje de la computadora hoy: 0 y 1. Puede forzarle a decir cero y uno
unas pocas veces, y luego escribir cero y uno muchas veces Un pedazo de
papel para la prctica, pero entonces, qu ms habra de aprender acerca
de su conjunto de caracteres? Clase perdida. Luego, durante el resto del
semestre, pasabas tu tiempo aprendiendo a combinar ceros y unos para
conseguir que la computadora hiciera lo que queras. Su primera asignacin
podra ser agregar dos nmeros ayb, y almacenar el resultado en c (es
decir, c = a + b). Usted termina con algo que se parece a:

01011001010001000111010101000100
01011001011100100010100101000011
00111010101000100111010100100101
01011101010101010101010000111101

Parece una manera muy larga de decir


C = a + b?
Pero esto es lo que la computadora entiende, as que es as como debemos
comunicarnos con ella. Sin embargo, no nos comunicamos de esta manera.
El lenguaje y el pensamiento humanos usan una abstraccin ms elevada
que sta. Cmo podemos hacer un puente para esta brecha? Conectamos
esta brecha a travs de lenguajes de programacin, ver la figura 1.3.
Figura 1.3: Los lenguajes de programacin nos proporcionan un medio para
cerrar la brecha entre la computadora y el humano.
El primer lenguaje de programacin que vamos a mencionar es el montaje.
La propiedad nica de asamblea es que, para cada instruccin, hay una
correspondencia uno a uno entre un comando en ensamblaje y un comando
comprensible por ordenador (en ceros y unos). Por ejemplo, en lugar de
escribir
01011001010001000111010101000100
Como un comando, podra escribir 'cargar un $ 1'. Esto indica a la
computadora que cargue el contenido de la ubicacin de memoria indicada
por 'a' en el registro $ 1 en la CPU del ordenador (Central Processing Unit).
Esto es mucho mejor que antes. Obviamente, esta secuencia de rdenes es
mucho ms fcil de entender para el ser humano. Este fue un buen
comienzo, pero la asamblea todava se considera un "lenguaje de bajo
nivel". Por nivel bajo queremos decir que una instruccin en el ensamblaje
es igual a una instruccin de computadora. Pero como dijimos antes,
queremos ser capaces de pensar en un nivel superior. Por lo tanto, hubo la
introduccin de lenguajes de "nivel superior". Los lenguajes de nivel
superior son aquellos en los que una instruccin en el lenguaje de nivel
superior es igual a una o ms instrucciones de nivel de computadora.
Queremos un lenguaje de computadora donde podemos decir 'c = a + b', y
esto sera equivalente a decir:
Cargar un $ 1
Carga b $ 2
Agregue $ 1 $ 2 $ 3
Ahorrar $ 3 c

Una instruccin de alto nivel equivala a cuatro instrucciones de nivel


inferior (aqu escritas en pseudo ensamblaje para que puedas seguir lo que
est pasando). Esto es preferible por muchas razones. Por una parte, como
seres humanos nos gustara gastar nuestro tiempo pensando en cmo
resolver el problema, no slo tratando de recordar (y escribir) todo el cdigo
de la asamblea! En segundo lugar, escribiendo en un lenguaje de nivel
superior, podemos escribir cdigo que puede funcionar en mltiples
ordenadores, porque la traduccin del cdigo de nivel superior puede ser
realizada por un compilador en el cdigo de ensamblaje del procesador en
el que estamos ejecutando.
A medida que lea este libro y haga los ejercicios que se encuentran aqu,
tenga siempre presente que nuestro objetivo es utilizar la computadora para
realizar tareas cientficas encontradas en la ciencia de la simulacin. En un
nivel alto, hay un problema de ciencia o ingeniera que resolver, y queremos
usar la computadora como una herramienta para resolver el problema. Los
medios por los que vamos a utilizar el ordenador es a travs de la escritura
y ejecucin de programas escritos utilizando el lenguaje de cmputo C ++ y
el paralelo de mensajes que pasan las bibliotecas de MPI.
1.4 Por qu C ++ y qu es MPI?.
Los algoritmos que presentamos en el libro ciertamente pueden
implementarse en otros idiomas, p. FORTRAN o Java, as como otras
bibliotecas de comunicaciones, p. PVM (mquina virtual paralela). Sin
embargo, nos comprometemos a un lenguaje especfico y una biblioteca
paralela para proporcionar al estudiante la capacidad inmediata de
experimentar con los conceptos presentados. Para ello, hemos elegido C ++
como nuestro lenguaje de programacin por una multitud de razones: En
primer lugar, proporciona una infraestructura orientada a objetos que
permite un desglose natural del problema en una coleccin de estructuras
de datos y operaciones sobre esas estructuras. En segundo lugar, el uso de
C + + trasciende muchas disciplinas ms all de la ingeniera donde
tradicionalmente FORTRAN ha sido el idioma predominante. En tercer lugar,
C ++ es un lenguaje naturalmente compatible con los conceptos
algortmicos bsicos de:
particin,
funcin recursiva que llama,
asignacin dinmica de memoria, y
encapsulacin.
Del mismo modo, nos comprometemos a MPI (Message Passing Interface)
como una biblioteca de paso de mensajes, ya que permite una particin
natural y fcil del problema, proporciona portabilidad y eficiencia, y ha
recibido una amplia aceptacin por la academia y la industria.

Figura 1.4: Progresin de material nuevo a travs del libro en las tres reas
mostradas en la figura (1.2).
La integracin simultnea que proponemos en este libro se llevar a cabo
presentando cuidadosamente los conceptos relacionados de las tres
subreas. Pasar de un captulo a otro requiere dos dosis diferentes de
material nuevo en algoritmos y herramientas. Esto se explica grficamente
en la figura 1.4, que muestra que mientras se introducen nuevos algoritmos
a una velocidad aproximadamente constante, la introduccin de nuevo
material C + + y MPI vara inversamente. Comenzamos con un nfasis en
los conceptos bsicos del lenguaje, lo que permite al estudiante trabajar de
inmediato sobre los algoritmos introducidos inicialmente, mientras que a
medida que avanza el libro y la complejidad computacional de los
algoritmos aumenta el uso de construcciones y bibliotecas paralelas.
Ms especficamente, para ayudar a facilitar la inmersin del estudiante en
el pensamiento orientado a objetos, proporcionamos una biblioteca de
clases y funciones para usar a lo largo del libro. Las clases contenidas en
esta biblioteca se usan desde el principio del libro como una extensin
natural, definida por el usuario, de C ++. A medida que avanza el libro, se
explica la lgica subyacente y la implementacin de programacin de estas
clases, lo que lleva al estudiante a una comprensin ms profunda del
desarrollo de las clases de C ++. Denotaremos todas las clases usadas
dentro del libro y no inherentes a C ++ con las letras SC, como las clases
SCVector y SCMatrix.
Esto se hace para distinguir claramente entre C ++
definido y Tipos de datos definidos por el usuario, y
tambin para acentuar la utilidad de tipos definidos por el
usuario dentro del lenguaje de programacin C ++. A
medida que los estudiantes se vuelven ms familiarizados y
confiados en su capacidad de disear y usar tipos de datos,
los alentamos a usar estas facilidades proporcionadas por
el lenguaje para una programacin ms eficiente y
resolucin de problemas. Todos los cdigos de este libro y
muchos ms ejemplos estn incluidos en la suite de software, que se
distribuye con este libro.
1.5 Qu pasa con OpenMP?.
Debido a la reciente proliferacin de mquinas distribuidas de memoria
compartida (DSM) en la comunidad de computacin cientfica, existe un
gran inters en la mejor manera de utilizar de manera apropiada tanto la
distribucin como la particin compartida de estos sistemas. MPI
proporciona un medio eficaz de comunicacin paralela entre una coleccin
distribuida de mquinas; Sin embargo, no todas las implementaciones de
MPI se aprovechan de la memoria compartida cuando est disponible entre
procesadores (la premisa bsica es que dos procesadores, que comparten
memoria comn, pueden comunicarse entre s ms rpidamente a travs
del uso del medio compartido que a travs de otros medios de
comunicacin).
OpenMP (Open Multi Processing) fue introducido para proporcionar un medio
de implementar el paralelismo de memoria compartida en los programas
FORTRAN y C / C ++. Especficamente, OpenMP especifica un conjunto de
variables de entorno, directivas de compilador y rutinas de biblioteca que se
utilizarn para la paralelizacin de memoria compartida. OpenMP fue
especficamente diseado para explotar ciertas caractersticas de las
arquitecturas de memoria compartida, como la capacidad de acceder
directamente a la memoria en todo el sistema con baja latencia y bloqueos
de memoria compartida muy rpidos. Para obtener ms informacin acerca
de OpenMP, visite www.openmp.org.
Est surgiendo un nuevo paradigma de programacin paralela en el que
tanto el MPI como OpenMP se utilizan para la paralelizacin. En una
arquitectura de memoria compartida distribuida, OpenMP se utilizara para
la comunicacin entre nodos (es decir, entre una coleccin de procesadores
que comparten el mismo subsistema de memoria) y MPI se utilizara para la
comunicacin entre nodos (es decir, entre distintas colecciones distribuidas
de Procesadores). La combinacin de estas dos metodologas de
paralealizacin puede proporcionar los medios ms eficaces para explotar
plenamente los modernos sistemas de memoria compartida distribuida
(DSM).
1.6 Algoritmos y lista de los diez primeros.
Los griegos y los romanos inventaron muchos algoritmos cientficos y de
ingeniera, pero se cree que el trmino "algoritmo" proviene del nombre del
matemtico rabe al-Khwarizmi del siglo IX, que escribi el libro al-jabr wa'l
Muqabalach que eventualmente evolucion en los libros de texto de lgebra
de la escuela secundaria de hoy. Quizs fue el primero en enfatizar
procedimientos sistemticos para resolver problemas matemticos. Desde
entonces, se han inventado algunos algoritmos verdaderamente ingeniosos,
pero los algoritmos que han formado los fundamentos de la computacin
cientfica como una disciplina separada se desarrollaron en la segunda parte
del siglo XX. Dongarra y Sullivan elaboraron una lista de los diez algoritmos
principales del siglo XX [33]. Segn estos autores, estos algoritmos tuvieron
la mayor in fl uencia en la ciencia y la ingeniera en el pasado. Estn en
orden cronolgico:
1. 1946: El mtodo de Monte Carlo para modelar fenmenos probabilsticos.
2. 1947: El mtodo Simplex para problemas de optimizacin lineal.
3. 1950: El mtodo de iteracin del subespacio de Krylov para
solucionadores lineales rpidos y eigensolvers.
4. 1951: La descomposicin de la matriz de Householder para expresar una
matriz como un producto de matrices ms simples.
1957: El compilador FORTRAN que liber a los cientficos e ingenieros de
programar en la asamblea.
6. 1959-1961: El algoritmo QR para calcular muchos autovalores.
7. 1962: El algoritmo Quicksort para poner las cosas en orden numrico o
alfabtico rpido.
8. 1965: Transformada rpida de Fourier para reducir el recuento de
operaciones en la representacin de la serie de Fourier.
9. 1977: El algoritmo de deteccin de la relacin Integer, que es til para las
bifurcaciones y en la teora del campo cuntico.
10. 1987: El algoritmo multipolo rpido para problemas de N-cuerpo.
Aunque existe cierto debate en cuanto a la importancia relativa de estos
algoritmos o la ausencia de otros mtodos importantes en la lista, p. Las
diferencias finitas y los elementos finitos, esta seleccin de Dongarra &
Sullivan refleja algunos de los retos de la informtica cientfica en el pasado.
La aparicin del compilador FORTRAN, por ejemplo, representa la transicin
histrica del lenguaje ensamblador a los lenguajes de nivel superior, como
se discuti anteriormente. De hecho, el primer compilador de FORTRAN fue
escrito en 23.500 instrucciones de lenguaje ensamblador! FORTRAN se ha
utilizado ampliamente en el pasado, especialmente en la comunidad de
ingenieros, pero la mayor parte del software informtico cientfico reciente
ha sido reescrito en C ++, p. Las Recetas Numricas [75].
En este libro cubriremos en detalle los algoritmos (3), (4), (6) y (8) de los
anteriores
, Incluyendo muchas versiones ms recientes, que proporcionan mayor
robustez con respecto a los errores y eficacia de redondeo en el contexto de
la computacin paralela. Tambin presentaremos discretizaciones de
ecuaciones diferenciales ordinarias y parciales utilizando varias
formulaciones de diferencia finita.
Muchos nuevos algoritmos probablemente sern inventados en el siglo
veintiuno, esperemos que algunos de ellos de los lectores de este libro!
Como dijo Dongarra y Sullivan: "Este siglo no ser muy relajante para
nosotros, pero tampoco va a ser aburrido!"

Potrebbero piacerti anche