¿Cómo / cuándo se usa el cálculo en informática?

95

Muchos programas de informática requieren dos o tres clases de cálculo.

Me pregunto, ¿cómo y cuándo se usa el cálculo en informática? El contenido de CS de un título en informática tiende a centrarse en algoritmos, sistemas operativos, estructuras de datos, inteligencia artificial, ingeniería de software, etc. ¿Hay momentos en que el cálculo es útil en estas u otras áreas de la informática?

Víctor
fuente
66
No tenemos una política estricta para las preguntas de la lista, pero hay una aversión general . Tenga en cuenta también esto y esta discusión; es posible que desee mejorar su pregunta para evitar los problemas explicados allí. Si no está seguro de cómo mejorar su pregunta, ¿podemos ayudarlo en Computer Science Chat ?
Raphael
42
Parece cometer el error común de suponer que el contenido de cada curso debe ser relevante (para cada carrera). A veces solo se trata de entrenarlo para pensar de ciertas maneras.
Raphael
8
Probablemente sería útil si esta pregunta pudiera aclarar si solo está preguntando acerca de los usos dentro de la informática propiamente dicha o todos los usos para los estudiantes que están obteniendo un título de Comp Sci. Al menos aquí en los EE. UU., Un porcentaje muy grande de graduados de Comp Sci se convierten en ingenieros de software repartidos en casi todos los dominios de ingeniería imaginables. Muchos de estos dominios requieren comprender el cálculo para diversos fines. No todos los graduados CS utilizarán cálculo en sus puestos de trabajo, pero muchos seguramente lo hará (probablemente más de lo que creo que lo hagan durante su primer año de carrera.)
reirab
1
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Raphael
Para mí fue muy útil para el sentimiento de "aprecio y alivio más tarde al aprender sobre métodos numéricos" . Al trabajar con datos discretos provenientes de mediciones reales, en lugar de funciones continuas de matemática teórica, fue un alivio que la integración sea solo una suma y la derivada es solo una resta, en lugar de las fórmulas demasiado complicadas que necesitábamos tanto tiempo y esfuerzo. para aprender en nuestras clases de cálculo antes!
vsz

Respuestas:

110

Puedo pensar en algunos cursos que necesitarían Cálculo, directamente . He usado negrita para las disciplinas usualmente obligatorias para un título en Ciencias de la Computación, y cursiva para las usualmente opcionales.

  • Gráficos por computadora / Procesamiento de imágenes, y aquí también necesitará Geometría analítica y Álgebra lineal, ¡en gran medida ! Si sigue este camino, es posible que también desee estudiar algo de Geometría diferencial (que tiene un cálculo multivariante como requisito previo mínimo). Pero necesitará cálculo aquí, incluso para cosas muy básicas: intente buscar "Transformada de Fourier" o "Wavelets", por ejemplo, estas son dos herramientas fundamentales para las personas que trabajan con imágenes.
  • Optimización , principalmente no lineal, donde el cálculo multivariante es el lenguaje fundamental utilizado para desarrollar todo. Pero incluso la optimización lineal se beneficia del cálculo (la derivada de la función objetivo es absolutamente importante)
  • Probabilidad / Estadística . Estos no pueden estudiarse seriamente sin un cálculo multivariado.
  • Aprendizaje automático , que hace un uso intensivo de las estadísticas (y, en consecuencia, el cálculo multivariante)
  • Minería de datos y temas relacionados, que también utilizan muchas estadísticas;
  • Robótica , donde deberá modelar los movimientos físicos de un robot, por lo que deberá conocer derivadas y gradientes parciales.
  • Matemática discreta y combinatoria ( ¡sí! ¡ Es posible que necesite cálculo para contar discretamente!): Si se toma lo suficientemente en serio la generación de funciones, necesitará saber cómo integrar y derivar ciertas fórmulas. Y eso es útil para el Análisis de Algoritmos (ver el libro de Sedgewick y Flajolet, "Análisis de Algoritmos"). Del mismo modo, la serie Taylor y el cálculo pueden ser útiles para resolver ciertos tipos de relaciones de recurrencia, que se utilizan en el análisis de algoritmos.
  • Análisis de algoritmos , donde utiliza la noción de límite desde el principio (vea la notación de Landau, "pequeña " - se define usando un límite)o

Puede haber otros, esto está justo fuera de mi cabeza.

Y, además de eso, uno se beneficia indirectamente de un curso de Cálculo al aprender a razonar y explicar argumentos con rigor técnico. Esto es más valioso de lo que los estudiantes suelen pensar.

Finalmente, necesitará Cálculo para, bueno, interactuar con personas de otras Ciencias Exactas e Ingeniería. Y no es raro que un informático necesite no solo hablar sino también trabajar junto con un físico o un ingeniero.

Arrendajo
fuente
34
Quizás tuviste una experiencia diferente, pero encontré que el cálculo es bastante inútil para aprender a razonar y explicar argumentos rigurosamente. Fue enseñado por la coincidencia de memoria y patrones, de forma muy parecida al álgebra y geometría de la escuela secundaria. Por otra parte, era el requisito previo para varias clases de matemáticas superiores que hicieron enseñar estas habilidades, por lo que supongo que no era del todo inútil.
tsleyson el
66
Puedo relacionarme totalmente con el último punto (beneficios indirectos). Trabajando en la teoría de lenguajes de programación, rara vez usaba cálculo directamente. Quizás la aplicación más directa fue en modelos computacionales probabilísticos (por ejemplo, dominios de poder probabilísticos de Plotkin y Jones). Sin embargo, mi curso de cálculo consistía principalmente en probar cosas, y esto era muy, muy valioso. En mi humilde opinión, se necesitan uno o dos cursos de cálculo en todos los programas serios de CS, junto con algo más de matemática (matemática discreta, lógica, álgebra lineal, análisis numérico, ... y posiblemente categorías, topología, álgebra, ...).
chi
3
Aquí está un ejemplo de cómo necesitaba cálculo en gráficos por ordenador: funciones de interpolación suave, básicamente, todo el ser de la forma f(0) = 0, f(1) = 1, f'(0) = f'(1) = 0, y usted puede añadir cualquier otra limitación que le interesan, por ejemplo f'(0.5) = 1. Hace poco usé esto para derivar algunos polinomios de interpolación diferentes para suavizar imágenes.
porglezomp
3
La robótica probablemente se puede ampliar a cualquier tipo de modelado de física (que supongo que también cubre CG, en términos de iluminación, así que llamémosle modelado de física cinética). Esto incluye aceleración / velocidad, rebotes / resortes / deformación, controladores PID, acústica, gravitación ...
metao
2
Voy a defender el punto indirecto de esta manera: mejor que cualquier clase que tomen antes, Calculus les enseña a los estudiantes que no pueden simplemente contar la cantidad de problemas y estimar cuánto trabajo va a estar involucrado.
candied_orange
20

Esto es algo oscuro, pero el cálculo aparece en tipos de datos algebraicos. Para cualquier tipo dado, el tipo de sus contextos de un agujero es la derivada de ese tipo. Vea esta excelente charla para una visión general de todo el tema. Esta es una terminología muy técnica, así que expliquemos.

Tipos de datos algebraicos

Es posible que haya encontrado tuplas que se conocen como tipos de productos (si no, es porque son el producto cartesiano de dos tipos). Vamos a tomar esto literalmente y usar la notación:

ab

Para representar una tupla, donde y son ambos tipos. A continuación, es posible que haya encontrado tipos de suma, estos son tipos que pueden ser de un tipo u otro (conocidos como uniones , variantes o como el tipo Cualquiera (un poco) en Haskell). También vamos a tomar esto literalmente y usar la notación:ab

a+b

Estos se nombran tal como están porque si un tipo tiene valores y un tipo tiene valores , entonces el tipo tiene valores .aNabNba+bNa+Nb

Estos tipos parecen expresiones algebraicas normales y, de hecho, podemos manipularlos como tales (hasta cierto punto).

Un ejemplo

En los lenguajes funcionales, una definición común de una lista (dada en Haskell aquí) es esta:

data List a = Empty 
            | Cons a List

Esto dice que una lista está vacía o una tupla de un valor y otra lista. Transformando eso a notación algebraica, obtenemos:

L(a)=1+aL(a)

Donde representa un tipo con un valor (también conocido como el tipo de unidad). Al insertar repetidamente, podemos evaluar esto para obtener una definición de :1L(a)

L(a)=1+aL(a)
L(a)=1+a(1+aL(a))
L(a)=1+a+a2(1+aL(a))
L(a)=1+a+a2+a3(1+aL(a))
L(a)=1+a+a2+a3+a4+a5...

(Donde se entiende en el sentido de multiplicación repetida).xn

¡Esta definición dice que una lista es una unidad, o una tupla de un elemento, o una tupla de dos elementos, o de tres, etc., que es la definición de una lista!

Contextos de un agujero

Ahora en contextos de un agujero: un contexto de un agujero es lo que obtienes cuando 'sacas un valor' de un tipo de producto. Pongamos un ejemplo:

Para una simple 2-tupla que es homogénea, , si sacamos un valor, solo obtenemos una 1-tupla, . Pero hay dos contextos de un agujero diferentes de este tipo: a saber, el primer y el segundo valor de la tupla. Entonces, como es cualquiera de estos, podríamos escribir que es , que es, por supuesto, . Aquí es donde entra en juego la diferenciación. Confirmemos esto con otro ejemplo:a2aa+a2a

Sacar un valor de una tupla de 3 da una tupla de 2, pero hay tres variantes diferentes:

( a , _ , a ) ( _ , a , a )

(a,a,_)
(a,_,a)
(_,a,a)

Dependiendo de dónde ponemos el agujero. Esto nos da que de hecho es la derivada de . Hay una prueba de esto en general aquí .a 33a2a3

Para nuestro ejemplo final, usemos una lista:

Si tomamos nuestra expresión original para una lista:

L(a)=1+aL(a)

Podemos reorganizar para obtener:

L(a)=11a

(En la superficie, esto puede parecer una tontería, pero si toma la serie taylor de este resultado, obtiene la definición que obtuvimos anteriormente).

Ahora, si diferenciamos esto, obtenemos un resultado interesante:

L(a)a=(L(a))2

Así, una lista se ha convertido en un par de listas. De hecho, esto tiene sentido: ¡las dos listas producidas corresponden a los elementos arriba y debajo del agujero en la lista original!

Tuomas Laakkonen
fuente
Esto fue maravillosamente perspicaz. Gracias.
D. Ben Knoble
12

Métodos numéricos. Existen problemas de cálculo engorrosos que son exclusivos de aplicaciones específicas, y necesitan soluciones más rápido de lo que un humano prácticamente puede resolver sin un programa. Alguien tiene que diseñar un algoritmo que calcule la solución. ¿No es eso lo único que separa a los programadores de los científicos?

Jonás Havel
fuente
3
Dada la naturaleza de "lista" de esta pregunta, cada respuesta debe intentar dar una imagen completa. ¿Estás seguro de que quieres afirmar que los métodos numéricos son la única instancia?
Raphael
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Raphael
12

Automatización : similar a la robótica, la automatización puede requerir cuantificar una gran cantidad de comportamiento humano.

Cálculos : encontrar soluciones a las pruebas a menudo requiere cálculo.

Visualizaciones : la utilización de algoritmos avanzados requiere cálculos como cos, sine, pi y e. Especialmente cuando estás calculando vectores, campos de colisión y mallas.

Logística y análisis de riesgos : determinar si una tarea es posible, el riesgo involucrado y la posible tasa de éxito.

Seguridad : la mayoría de la seguridad se puede realizar sin cálculo; sin embargo, muchas personas que quieren explicaciones lo prefieren en expresiones matemáticas.

AI : los conceptos básicos de la IA se pueden utilizar sin cálculo; sin embargo, el cálculo del comportamiento avanzado, la inteligencia de enjambre / mentes colmena y la toma de decisiones basadas en valores complejos.

Cálculos médicos : la visualización de la mayoría de los datos de salud requiere cálculo, como una lectura de EKG.

Ciencia e ingeniería : cuando se trabaja con casi cualquier otra disciplina científica se requiere cálculo: aeroespacial, astrología, biología, química o ingeniería.

Muchas personas en la programación pueden seguir toda su carrera sin usar cálculo; sin embargo, puede resultar invaluable si estás dispuesto a hacer el trabajo. Para mí ha sido más efectivo en automatización, logística y visualización. Al identificar patrones específicos, simplemente puede ignorar el patrón, imitarlo o desarrollar un método superior todos juntos.

LJones
fuente
77
¿Cómo son los cálculos cos, sine, y ? eπe
David Richerby el
3
exp(x)f(x)=f(x)f(0)=1f(x)=g(x)g(x)=f(x)f(0)=0g(0)=1
2
@DavidRicherby: Ejemplo: ¿cómo implementa esas funciones en, por ejemplo, un microcontrolador sin una FPU? Si conoce algún cálculo, inmediatamente sabe una buena respuesta: series de potencia.
Nate Eldredge
6

El hecho es que hay muy pocas posibilidades de que alguna vez uses cálculo. Sin embargo, prácticamente todas las demás disciplinas científicas SÍ usan cálculos y usted está trabajando en un título en ciencias. Hay ciertas expectativas de lo que se supone que significa un título universitario en ciencias y una de esas cosas es que conoces el cálculo. Incluso si nunca lo usarás.

Está bien si te va mal en el cálculo, pero asegúrate de poner un poco de esfuerzo en las matemáticas discretas. Hay muchos problemas de programación en el mundo real en los que las matemáticas discretas entran en juego y la ignorancia de sus principios puede avergonzarte frente a otros programadores.

Scott B
fuente
99
Su primer párrafo está completamente equivocado y raya en la teoría de la conspiración. Hay bastantes áreas de informática donde el cálculo es útil (vea las otras respuestas para obtener una lista interminable de ellas). Claro, es posible evitar todas esas áreas, pero es muy engañoso afirmar que dejar caer el cálculo tendrá cero impacto más allá de las calificaciones.
David Richerby
44
Dependiendo de tu programa de estudios, podrías completar un título sin usar nunca el cálculo, y definitivamente creo que los estudiantes de CS no necesitan tanto como nosotros. Pero hacerlo mal te dejará fuera de algunas de las áreas más interesantes de la informática. Hay mucho tiempo para ser desarrollador web una vez que te gradúes; mientras estás en la escuela, ¿por qué no intentas esforzarte un poco?
tsleyson el
3
@tsleyson Si quiere ser desarrollador web, ahorre el dinero y el tiempo necesarios para obtener un título de CS.
Raphael
8
@ScottB Parece que estás confundiendo la informática con la programación.
David Richerby
3
@ScottB ¿Quién dice CS = matemáticas + programación? Yo mismo he estado abogando contra esta visión limitada durante años. Pero también lo tienes al revés: las matemáticas son parte integral de CS, al igual que lo es para la física. Lo necesitamos , incluso si no queremos practicarlo . (Dicho esto, este no es el lugar para esta discusión. Únase a nosotros en Computer Science Chat si desea continuar.)
Raphael
4

Muchas personas ya proporcionaron aplicaciones en CS. Pero a veces encontrarás Cálculo cuando menos lo esperas:

Derivados de expresión regular reexaminados

Si conoces los autómatas, vale la pena leer este pdf.

Aristu
fuente
No veo ningún cálculo diferencial allí; Veo la palabra "derivada", pero no veo nada parecido al cálculo diferencial tradicional.
2
Se llama "derivada formal", y está relacionado con el cálculo, de alguna manera. También verá que esto se hace con Funciones generadoras, algunas fórmulas relacionadas con estructuras discretas y otras áreas en las que en realidad no tiene una "función uniforme".
Jay
@ Jay: Lo importante no es el nombre. ¿Cómo ayuda la comprensión del cálculo?
Christian
2
Se explica en esta página de Wikipedia . La derivada formal es una operación sobre elementos de estructura analgebraica que contiene polinomios, y formalmente es "bastante" como la regla habitual para diferenciar polinomios, sin embargo, a diferencia de lo que un estudiante ve en Cálculo, los polinomios no son reales; pueden ser polinomios sobre un "anillo" arbitrario (otra estructura algebraica). Y hay aplicaciones prácticas de la derivada formal: he visto al menos una (criptoanálisis algebraico, no puedo recordar los detalles).
Jay
4

Algunos ejemplos más específicos:

  • El cálculo se usa para derivar la regla delta , que es lo que permite que algunos tipos de redes neuronales se "aprendan".
  • El cálculo se puede utilizar para calcular la transformada de Fourier de una función oscilante, muy importante en el análisis de señales.
  • El cálculo se usa todo el tiempo en gráficos de computadora, que es un campo muy activo a medida que las personas continuamente descubren nuevas técnicas. Para un ejemplo fundamental, mira la ecuación de renderizado de Kajiya
  • El cálculo es importante en el campo de la geometría computacional, investigar el modelado de curvas y superficies.
perro jones
fuente
3

A estas otras excelentes respuestas agrego este punto: rigor en las pruebas .

Al crear casos de prueba para algunas aplicaciones, he tenido que utilizar el cálculo para predecir los tiempos de ejecución esperados, los tamaños de memoria y elegir los parámetros óptimos al ajustar las estructuras de datos. Esto incluye comprender el error de redondeo esperado, etc.

Si bien las estadísticas se mencionan en otras respuestas, me gustaría mencionar específicamente los algoritmos de Montecarlo , como los algoritmos de optimización y algunos algoritmos de transmisión frugales que se basan en principios matemáticos que incluyen el cálculo.

Las industrias específicas donde he trabajado donde se requería el cálculo incluyen:

  • Finanzas (creación de una plataforma de negociación)

  • Seguros (integración numérica de pólizas de seguros en escenarios hipotéticos para calcular las pérdidas esperadas de pólizas)

  • Logística (optimizando la consolidación de rutas de transporte)

  • Procesamiento de la señal

Paul Chernoch
fuente
3

El cálculo, la parte integral, se usa directamente en CS como base para pensar en la sumatoria. Si trabaja en cualquier parte de la sección de Matemáticas concretas de Knuth sobre sumatoria, reconocerá rápidamente las convenciones comunes al cálculo: comprender algunos de los casos continuos le brinda herramientas para considerar el discreto.

Muchos de los usos de su estudio de CS involucran sistemas de programación que monitorean el cambio, o en algunos casos, intentan predecir el futuro. La matemática en torno a esos sistemas se basa en ecuaciones diferenciales y álgebra lineal, y las ecuaciones diferenciales son ... cálculo. Hay maestros como Gibert Strang que abogan por avanzar más rápidamente en la parte de ecuaciones diferenciales, pero todavía es un subconjunto de cálculo. Cuando el cambio depende del cambio en cualquier sistema, comienza a ser inestable (y estable) en formas que son no intuitivas y muy bien entendidas. Para comprender por qué su sistema lineal sensible se comporta de manera no lineal, necesita las herramientas de cálculo o necesita reinventarlas para su espacio problemático.

Y finalmente, la CS a menudo requiere leer y comprender el trabajo de los demás, y el cálculo es la primera exposición a una gran cantidad de vocabulario, convención e historia compartidos.

Encadenar
fuente
"Muchos de los usos de su estudio de CS involucran sistemas de programación que monitorean el cambio, o en algunos casos, intentan predecir el futuro". No creo que esto sea representativo de los cursos de estudios de CS.
Raphael