Saltar al contenido principal
LibreTexts Español

Prefacio

  • Page ID
    113242
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Resolver problemas es la esencia de la computación científica. Muchos problemas surgen naturalmente de las ciencias o las matemáticas y muchas veces para resolver problemas difíciles se basa en algunos recursos informáticos. En pocas palabras, este texto es la mezcla de ciencia, matemáticas e informática necesaria para resolver problemas.

    El público pretendido para este texto uno que esté interesado en escribir código de computadora que resuelva un problema que tengas. Hay algunos conceptos básicos que deberías tener con este texto:

    • Algunos antecedentes en la redacción de programas de computadora. Tu lenguaje base no importa, pero deberías estar familiarizado al escribir programas cortos.
    • Algún cálculo. La mayoría de los ejemplos aquí no necesitan Cálculo, pero hay temas a lo largo del libro, que al menos el cálculo diferencial es útil.

    Como muchos libros de texto, esto comenzó como un conjunto de notas para mi clase de Computación Científica en la Universidad Estatal de Fitchburg. Los estudiantes de la clase suelen ser los principales de Ciencias de la Computación o Matemáticas y generalmente tienen interés en la computación. Mientras dirigía estas páginas de un conjunto de notas a un libro de texto, sigo teniendo en cuenta a esos alumnos. Sin embargo, me doy cuenta de que un texto de pregrado suele ser recogido por estudiantes de posgrado, aquellos en la industria y otros profesores para construir alguna base de conocimientos que uno nunca tuvo. También tengo en mente a estos lectores.

    También quiero distinguir este texto del de un texto de Análisis Numérico o Métodos Numéricos. Un texto de Métodos Numéricos suele abarcar muchos algoritmos básicos en matemáticas como la diferenciación numérica, la integración numérica, el rootfinding, el álgebra lineal, etc. y cómo implementar dichos algoritmos; esto se puede hacer con pseudocódigo o con un lenguaje particular. El análisis numérico a menudo cubre los mismos algoritmos en Métodos Numéricos con énfasis en el análisis de los algoritmos. Este texto no cubre ampliamente todos los temas en Métodos Numéricos, ni hace ningún análisis. Hay muchos libros buenos que figuran en las referencias. En cambio, este texto cubre cómo resolver problemas particulares y muchas veces los algoritmos han sido codificados en una biblioteca existente y los aprovecharemos aquí.

    ¿Por qué usar Julia o algún idioma en particular?

    El subtítulo del texto dice que resolver problemas en Computación Científica no ocurre en el vacío o necesariamente en la tierra del pseudocódigo, por lo que he elegido específicamente un lenguaje para explicar los conceptos en el texto de manera muy similar a la que hago en mi clase y el lenguaje de computación que se utilizará será Julia.

    Antes de pasar por las razones técnicas para elegir a Julia, resulta interesante la siguiente historia personal. Propuse enseñar Computación Científica en la Universidad Estatal de Fitchburg y la clase se desarrollaría en el otoño de 2014. La primavera anterior, supe que tenía que elegir algún idioma para la clase. Hay muchos idiomas que habrían estado bien de usar, incluido Maple, que nuestras especialidades estaban aprendiendo en una clase requerida, y eso habría sido una elección fácil. Sin embargo, uno de los blogs que leo regularmente,, tenía un artículo de Lee Philips titulado ``El futuro de la computación científica: ¿Puede cualquier lenguaje de codificación encabezar a un behemoth de los 50?” La esencia del artículo es que en la computación científica, Fortran es el rey, por dos razones 1) es rápido principalmente porque fue diseñado para ser fácilmente traducido al lenguaje máquina, que eventualmente es lo que funciona en una computadora y 2) hay muchas bibliotecas matemáticas importantes escritas en Fortran han sido probado en el tiempo y prácticamente sin errores.

    No obstante, nadie quiere codificar en Fortran. Le faltan muchas características de los lenguajes modernos y requiere compilación. Al seleccionar a Julia, como se afirma en la página principal, ``Julia fue diseñada desde el principio para un alto rendimiento”. A medida que los problemas en Computación Científica aumentan de tamaño y complejidad, es imperativo que el código se ejecute rápido y Julia normalmente lo hace. Es uno de los lenguajes de computación de alto nivel más rápidos en benchmarks (REF) y comparado con otros lenguajes informáticos científicos, es el más rápido. En el momento en que se escribió el artículo, Julia estaba en la versión 0.2 y era bastante cruda, pero fue fascinante de considerar y a la vista trasera, me alegro de haberlo hecho.

    Otro aspecto importante de Julia es que es un lenguaje de scripting como python. Esto significa que tienes una configuración de entorno, solo puedes comenzar a ingresar comandos de julia e irte. No hay compilación involucrada (así en C o Fortran). Aunque la compilación suele encontrar errores, es lento hacer prototipos.

    Cómo leer este texto

    ¿Cómo podría uno leer este texto? Por supuesto, la respuesta corta es de todas formas que quieras. Espero que puedas recogerlo y leer lo que es relevante. Hay algunos elementos sobre el diseño, así como algunas convenciones estándar.

    Echa un vistazo a la tabla de contenido. El texto se divide en algunas partes. La parte I consiste en algunos conceptos básicos tanto del lenguaje julia como de la computación científica. Las partes restantes del texto son secciones separadas (Simulación, Análisis de Datos, Álgebra Lineal) y algunas características avanzadas de julia. Una vez que se lee la Parte I, las partes restantes son independientes, sin embargo hay algunas ideas en la Parte III que son muy útiles más adelante en la prueba. El siguiente diagrama muestra las dependencias del capítulo:

    Además, debido a que hay fragmentos de código a lo largo del texto, debes ejecutar el código a medida que lees el texto. El capítulo 1 es el comienzo para que comiences a ejecutar julia, pero se recomienda leer el Apéndice A para más detalles. Todo el código julia está escrito y está incrustado en el texto, como o escrito en un bloque separado como

    A = [1,2,3]

    Cualquier bloque de código debe poder copiarse y pegarse directamente en el julia REPL o en un cuaderno de jupyter.

    Además, la salida de julia también está en una fuente de ancho fijo pero generalmente en un bloque como este:

    “Esta es una cadena de salida”

    Aquí hay algunos de los estilos de codificación que se utilizan en todo el texto también. Esto ayuda con la legibilidad:

    • las funciones están escritas en CamelCase, como FindRealRoot.
    • si una función devuelve un booleano (verdadero o falso) debería comenzar con es o tiene, como isFullHouse del Capítulo 15
    • las variables se escriben en snake_case como num_trials

    Al escribir tu código, no tienes que seguir esta convención, pero he tratado de mantenerme consistente en el texto. Generalmente esta convención ayudará con la legibilidad en que se sabe directamente qué tipo de variable o función es algo.

    Bloques de código

    Todos los bloques de código en el texto están escritos y se ejecutan como código julia (vea la siguiente sección a continuación). Por lo tanto, deberías poder copiar cualquiera de los bloques y pegarlos directamente. El único problema podría ser para las largas filas. Por ejemplo, si tienes

    Si intentas copiar y pegar la línea anterior, dará un error hasta que saques los caracteres de flecha que indican un ajuste de línea y lo vuelvas a poner en una sola línea. Después de esto, debería correr.

    Creando este texto

    Creo que es interesante cómo se creó este texto. JuliaCon (que se discutirá más adelante) es una conferencia anual sobre julia. En 2019, Tim Wheeler dio la plática titulada. Basé gran parte de este libro de texto en su trabajo. Aquí hay algunos detalles específicos sobre eso:

    Hay un par de razones para escribirlo de esta manera y están relacionadas. En primer lugar, elimina los errores que suelen ocurrir al copiar y pegar desde algún lugar donde el código se encuentra en el documento. En segundo lugar,


    Prefacio is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by LibreTexts.