Como / quando o cálculo é usado em Ciência da Computação?

95

Muitos programas de ciência da computação requerem duas ou três classes de cálculo.

Gostaria de saber como e quando o cálculo é usado na ciência da computação. O conteúdo de uma graduação em ciência da computação tende a se concentrar em algoritmos, sistemas operacionais, estruturas de dados, inteligência artificial, engenharia de software, etc. Há momentos em que o Cálculo é útil nessas ou em outras áreas da ciência da computação?

Vencedor
fonte
6
Não temos uma política rígida para perguntas da lista, mas há uma aversão geral . Observe também esta e esta discussão; convém melhorar sua pergunta para evitar os problemas explicados lá. Se você não tem certeza de como melhorar sua pergunta, talvez possamos ajudá-lo no bate-papo sobre ciência da computação ?
Raphael
42
Você parece cometer o erro comum de supor que o conteúdo de cada curso deve ser relevante (para cada carreira). Às vezes, é apenas treinar você a pensar de certas maneiras.
Raphael
8
Provavelmente seria útil se essa pergunta pudesse esclarecer se você está apenas perguntando sobre os usos dentro da Ciência da Computação propriamente dita ou sobre todos os usos para os alunos que estão obtendo um diploma de Comp Sci. Pelo menos aqui nos EUA, uma porcentagem muito grande de graduados em Comp Sci se torna engenheiros de software espalhados por quase todos os domínios de engenharia imagináveis. Muitos desses domínios exigem a compreensão do Cálculo para vários propósitos. Nem todos os graduados CS usará Calculus em seus empregos, mas muitos certamente vai (provavelmente mais do que acho que eles vão durante o seu ano de caloiro.)
reirab
1
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Raphael
Para mim, foi muito útil para o sentimento de "apreço e alívio mais tarde ao aprender sobre métodos numéricos" . Ao trabalhar com dados discretos provenientes de medições reais, em vez de funções contínuas da matemática teórica, foi um alívio que a integração seja apenas uma soma e a derivada fosse apenas uma subtração, em vez das fórmulas excessivamente complicadas que precisávamos de tanto tempo e esforço para aprender em nossas aulas de cálculo antes!
vsz 08/04/19

Respostas:

110

Eu posso pensar em alguns cursos que precisariam de Cálculo diretamente . Usei o rosto arrojado para as disciplinas geralmente obrigatórias para um diploma em Ciência da Computação e o itálico para as disciplinas geralmente opcionais.

  • Computer Graphics Processing / Imagem, e aqui você também vai precisar de Geometria Analítica e Álgebra Linear, fortemente ! Se você seguir esse caminho, também poderá estudar alguma Geometria Diferencial (que possui Cálculo multivariado como pré-requisito mínimo). Mas você precisará do Cálculo aqui mesmo para coisas muito básicas: tente pesquisar por "Transformada de Fourier" ou "Wavelets", por exemplo - essas são duas ferramentas fundamentais para quem trabalha com imagens.
  • Otimização , principalmente não linear, onde o Cálculo multivariado é a linguagem fundamental usada para desenvolver tudo. Mas até a otimização linear se beneficia do Cálculo (a derivada da função objetivo é absolutamente importante)
  • Probabilidade / Estatística . Estes não podem ser estudados seriamente sem o cálculo multivariado.
  • Machine Learning , que faz uso pesado de Estatística (e consequentemente, Cálculo multivariado)
  • Data Mining e assuntos relacionados, que também usam muitas estatísticas;
  • Robótica , onde você precisará modelar os movimentos físicos de um robô, para conhecer derivadas e gradientes parciais.
  • Matemática discreta e combinatória ( sim ! , pode ser necessário cálculo para contagem discreta!) - se você levar a sério o suficiente a geração de funções, precisará saber como integrar e derivar determinadas fórmulas. E isso é útil para a Análise de algoritmos (veja o livro de Sedgewick e Flajolet, "Análise de algoritmos"). Da mesma forma, a Série Taylor e o cálculo podem ser úteis na resolução de certos tipos de relações de recorrência, que são usadas na análise de algoritmos.
  • Análise de algoritmos , onde você usa a noção de limite desde o início (consulte a notação Landau, "pequeno " - é definida usando um limite)o

Pode haver outros - isso está fora do topo da minha cabeça.

Além disso, alguém se beneficia indiretamente de um curso de Cálculo, aprendendo a raciocinar e explicar argumentos com rigor técnico. Isso é mais valioso do que os alunos normalmente pensam.

Finalmente - você precisará de Cálculo para interagir com pessoas de outras Ciências e Engenharia Exatas. E não é incomum que um cientista da computação precise não apenas falar, mas também trabalhar em conjunto com um físico ou um engenheiro.

Jay
fonte
34
Talvez você tenha tido uma experiência diferente, mas achei o cálculo bastante inútil para aprender a raciocinar e explicar argumentos rigorosamente. Foi ensinado por correspondência de padrões e padrões, praticamente como álgebra e geometria do ensino médio. Por outro lado, era o pré-requisito para várias aulas de matemática mais elevados que fizeram ensinar essas habilidades, então eu suponho que não era totalmente inútil.
tsleyson
6
Eu posso me relacionar totalmente com o último ponto (benefícios indiretos). Trabalhando na teoria das linguagens de programação, raramente usava cálculo diretamente. Talvez a aplicação mais direta tenha sido em modelos computacionais probabilísticos (por exemplo, domínios de poder probabilístico de Plotkin & Jones). No entanto, meu curso de cálculo era principalmente sobre provar coisas, e isso era muito, muito valioso. Um ou dois cursos de cálculo são necessários no IMHO em todos os programas de CS sérios, além de um pouco mais de matemática (matemática discreta, lógica, álgebra linear, análise numérica, ... e possivelmente categorias, topologia, álgebra, ...).
chi
3
Aqui está um exemplo de como eu precisava de cálculo em computação gráfica: funções de interpolação Suave, basicamente, tudo ser da forma f(0) = 0, f(1) = 1, f'(0) = f'(1) = 0, e você pode adicionar quaisquer outras restrições que lhe interessam, por exemplo f'(0.5) = 1. Há pouco tempo, usei isso para derivar alguns polinômios de interpolação diferentes para suavizar imagens.
porglezomp 06/04
3
A robótica provavelmente pode ser expandida para qualquer tipo de modelagem física (que eu acho que também abrange CG, em termos de iluminação, então vamos chamá-lo de modelagem física cinética). Isto inclui aceleração / velocidade, rejeições / molas / deformação, controladores PID, acústica, gravitação ...
metao
2
Defenderei indiretamente o seguinte argumento: melhor do que qualquer aula que eles tenham antes, o Calculus ensina aos alunos que não podem simplesmente contar o número de problemas e estimar quanto trabalho será envolvido.
candied_orange
20

Isso é um tanto obscuro, mas o cálculo aparece nos tipos de dados algébricos. Para qualquer tipo, o tipo de seus contextos de um furo é a derivada desse tipo. Veja esta excelente palestra para uma visão geral de todo o assunto. Esta é uma terminologia muito técnica, então vamos explicar.

Tipos de dados algébricos

Você pode ter encontrado tuplas sendo chamadas de tipos de produtos (se não, é porque são produtos cartesianos de dois tipos). Vamos entender isso literalmente e usar a notação:

ab

Para representar uma tupla, onde e são os dois tipos. Em seguida, você pode se deparar com tipos de soma, tipos que podem ser de um tipo ou de outro (conhecido como uniões , variantes ou como o tipo Either (meio que) em Haskell). Também vamos levar este literalmente e usar a notação:ab

a+b

Eles são nomeados como são porque, se um tipo possui valores e um tipo possui valores , o tipo possui valores .aNabNba+bNa+Nb

Esses tipos parecem expressões algébricas normais e podemos, de fato, manipulá-las como tal (até certo ponto).

Um exemplo

Nas linguagens funcionais, uma definição comum de uma lista (fornecida aqui em Haskell) é a seguinte:

data List a = Empty 
            | Cons a List

Isso indica que uma lista está vazia ou uma tupla de um valor e outra lista. Transformando isso em notação algébrica, obtemos:

L(a)=1+aL(a)

Onde representa um tipo com um valor (também conhecido como tipo de unidade). Ao inserir repetidamente, podemos avaliar isso para obter uma definição para :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...

(Onde se entende no sentido de multiplicação repetida.)xn

Esta definição diz então que uma lista é uma unidade, ou uma tupla de um item, ou uma tupla de dois itens, ou de três etc, que é a definição de uma lista!

Contextos de um buraco

Agora, para contextos de um orifício: um contexto de um orifício é o que você obtém quando 'extrai um valor' de um tipo de produto. Vamos dar um exemplo:

Para uma simples tupla de 2 que é homogênea, , se extrairmos um valor, obtemos apenas uma tupla de 1, . Mas existem dois contextos de um buraco diferentes desse tipo: o primeiro e o segundo valores da tupla. Então, como é um desses, poderíamos escrever que é , que é, é claro, . É aqui que a diferenciação entra em cena. Vamos confirmar isso com outro exemplo:a2aa+a2a

Tirar um valor de uma tupla de três fornece uma dupla de duas, mas existem três variantes diferentes:

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

Dependendo de onde colocamos o buraco. Isso nos dá que é de fato a derivada de . Há uma prova disso em geral aqui .3a2a3

Para o nosso exemplo final, vamos usar uma lista:

Se levarmos nossa expressão original para uma lista:

L(a)=1+aL(a)

Podemos reorganizar para obter:

L(a)=11a

(Na superfície, isso pode parecer absurdo, mas se você considerar a série taylor desse resultado, obterá a definição que derivamos anteriormente.)

Agora, se diferenciarmos, obtemos um resultado interessante:

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

Assim, uma lista se tornou um par de listas. Isso de fato faz sentido: as duas listas produzidas correspondem aos elementos acima e abaixo do furo na lista original!

Tuomas Laakkonen
fonte
Isso foi maravilhosamente esclarecedor. Obrigado.
D. Ben Knoble 29/04
12

Métodos numéricos. Existem problemas de cálculo complexos, exclusivos de aplicativos específicos, e eles precisam de soluções mais rapidamente do que um ser humano pode praticamente resolver sem um programa. Alguém tem que projetar um algoritmo que calcule a solução. Não é a única coisa que separa os programadores dos cientistas?

Jonah Havel
fonte
3
Dada a natureza da "lista" dessa pergunta, todas as respostas devem tentar fornecer uma imagem completa. Tem certeza de que deseja reivindicar que os métodos numéricos são a única instância?
Raphael
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Raphael
12

Automação - Semelhante à robótica, a automação pode exigir a quantificação de muito comportamento humano.

Cálculos - Encontrar soluções para provas geralmente requer cálculo.

Visualizações - A utilização de algoritmos avançados requer cálculos como cos, seno, pi e e. Especialmente quando você está calculando vetores, campos de colisão e malhas.

Logística e análise de risco - Determinando se uma tarefa é possível, o risco envolvido e a possível taxa de sucesso.

Segurança - a maior parte da segurança pode ser realizada sem cálculo; no entanto, muitas pessoas que desejam explicações o preferem em expressões matemáticas.

IA - O básico da IA ​​pode ser utilizado sem cálculo; no entanto, calcular comportamento avançado, inteligência de enxame / mentes de colméia e tomada de decisões complexas baseadas em valores.

Cálculos médicos - A visualização da maioria dos dados de saúde requer cálculo, como uma leitura de ECG.

Ciência e Engenharia - Ao trabalhar com praticamente qualquer outra disciplina científica, é necessário cálculo: Aeroespacial, Astrologia, Biologia, Química ou Engenharia.

Muitas pessoas na programação podem seguir sua carreira inteira sem usar cálculo; no entanto, pode ser inestimável se você estiver disposto a fazer o trabalho. Para mim, tem sido mais eficaz em automação, logística e visualização. Ao identificar padrões específicos, você pode simplesmente ignorá-lo, imitá-lo ou desenvolver um método superior todos juntos.

LJones
fonte
7
Como são cos, seno, e ? πe
precisa saber é o seguinte
3
Bem, pode ser definido como a solução única para com , e da mesma forma sin, cos pode ser definido como o único par de funções que satisfaz , com condições de contorno apropriadas (acho que e deve funcionar). f ( x ) = f ' ( x ) f ( 0 ) = 1 F ' ( x ) = g ( x ) g ' ( x ) = - f ( x ) f ( 0 ) = 0 g ( 0 ) = 1exp(x)f(x)=f(x)f(0)=1f(x)=g(x)g(x)=f(x)f(0)=0g(0)=1
Chris Taylor
2
@DavidRicherby: Exemplo: como você implementa essas funções em, por exemplo, um microcontrolador sem FPU? Se você conhece algum cálculo, conhece imediatamente uma boa resposta: séries de potências.
Node Eldredge
6

O fato é que há muito pouca chance de você usar cálculo. No entanto, praticamente todas as outras disciplinas científicas usam cálculo e você está trabalhando em um diploma em ciências. Existem certas expectativas sobre o que um diploma universitário em ciências deve significar e uma dessas coisas é que você sabe cálculo. Mesmo se você nunca vai usá-lo.

Não há problema se você se sair mal em cálculo, mas certifique-se de colocar algum esforço em matemática discreta. Existem muitos problemas de programação no mundo real em que a matemática discreta entra em jogo e a ignorância de seus princípios pode constrangê-lo na frente de outros codificadores.

Scott B
fonte
9
Seu primeiro parágrafo está completamente errado e faz fronteira com a teoria da conspiração. Existem muitas áreas da ciência da computação em que o cálculo é útil (veja as outras respostas para obter listas infinitas delas). Certamente, é possível evitar todas essas áreas, mas é muito enganoso afirmar que a queda no cálculo terá impacto zero além das notas.
precisa saber é o seguinte
4
Dependendo do seu programa de graduação, você pode concluir uma graduação sem nunca usar o cálculo, e eu definitivamente acho que os cursos de graduação em computação não precisam tanto dele quanto nós. Mas fazer mal com isso impedirá você de algumas das áreas mais interessantes da ciência da computação. Há tempo de sobra para ser desenvolvedor web depois que você se formar; enquanto estiver na escola, por que não tentar se esforçar um pouco?
tsleyson
3
@tsleyson Se você quer ser um desenvolvedor da Web, economize o dinheiro e o tempo necessários para obter um diploma em CS.
Raphael
8
@ ScottB Você parece estar confundindo ciência da computação com programação.
precisa saber é o seguinte
3
@ScottB Quem está dizendo CS = math + programação? Eu mesmo venho advogando contra essa visão limitada há muito tempo. Mas você também tem o contrário: a matemática é parte integrante do CS, assim como a física. Nós precisamos dele, mesmo se não quiser praticar isso. (Dito isto, este não é o lugar para essa discussão Por favor se juntar a nós em. Ciência da Computação bate-papo se você deseja continuar.)
Raphael
4

Muitas pessoas já forneceram aplicativos no CS. Mas, às vezes, você encontrará Cálculo quando menos espera:

Derivados de expressão regular reexaminados

Se você conhece os autômatos, vale a pena ler este pdf.

Aristu
fonte
Não vejo nenhum cálculo diferencial lá; Vejo a palavra "derivada", mas não vejo nada parecido com o cálculo diferencial tradicional.
2
É chamado "derivado formal" e, de certa forma, está relacionado ao cálculo. Você também verá isso feito em Funções de geração, algumas fórmulas relacionadas a estruturas discretas e outras áreas em que você realmente não tem uma "função suave".
Jay
@ Jay: O importante não é o nome. Como a compreensão do cálculo ajuda com isso?
Christian
2
É explicado nesta página da Wikipedia . A derivada formal é uma operação em elementos da estrutura analgebraica que contém polinômios, e é formalmente "bastante" a regra usual para diferenciar polinômios, no entanto - diferentemente do que um aluno vê em Cálculo - os polinômios não superam os reais; eles podem ser polinômios sobre um "anel" arbitrário (outra estrutura algébrica). E existem aplicações práticas da derivada formal - já vi pelo menos uma (análise criptográfica algébrica - não consigo lembrar os detalhes).
Jay
4

Alguns exemplos mais específicos:

  • O cálculo é usado para derivar a regra delta , que é o que permite que alguns tipos de redes neurais 'aprendam'.
  • O cálculo pode ser usado para calcular a transformada de Fourier de uma função oscilante, muito importante na análise de sinais.
  • O cálculo é usado o tempo todo em computação gráfica, que é um campo muito ativo, pois as pessoas descobrem continuamente novas técnicas. Para um exemplo fundamental, verifique a equação de renderização de Kajiya
  • O cálculo é importante no campo da geometria computacional, investiga a modelagem de curvas e superfícies.
cão jones
fonte
3

A essas outras excelentes respostas, acrescento este ponto: rigor nos testes .

Ao criar casos de teste para alguns aplicativos, tive que usar o cálculo para prever tempos de execução esperados, tamanhos de memória e escolher parâmetros ideais ao ajustar estruturas de dados. Isso inclui a compreensão do erro de arredondamento esperado etc.

Embora a estatística seja mencionada em outras respostas, eu gostaria de mencionar especificamente os algoritmos de Monte Carlo , como algoritmos de otimização e alguns algoritmos frugal de streaming baseados em princípios matemáticos que incluem cálculo.

Indústrias específicas nas quais trabalhei onde o cálculo era necessário incluem:

  • Finanças (criando uma plataforma de negociação)

  • Seguro (integração numérica de apólices de seguro em cenários hipotéticos para calcular as perdas esperadas)

  • Logística (otimizando a consolidação de rotas de transporte)

  • Processamento de sinal

Paul Chernoch
fonte
3

O cálculo - a parte integral - é usado diretamente no CS como base para pensar sobre a soma. Se você trabalhar com qualquer parte da seção de Matemática Concreta de Knuth sobre somatória, reconhecerá rapidamente convenções comuns ao cálculo: entender alguns casos contínuos fornece ferramentas para considerar o discreto.

Muitos dos usos do seu estudo de CS envolvem sistemas de programação que monitoram mudanças ou, em alguns casos, tentam prever o futuro. A matemática em torno desses sistemas está enraizada em equações diferenciais e álgebra linear, e equações diferenciais são ... cálculo. Há professores como Gibert Strang que defendem a mudança mais rápida para a parte das equações diferenciais, mas ainda é um subconjunto de cálculo. Quando a mudança depende da mudança em qualquer sistema, ela começa a ser instável (e estável) de maneiras não intuitivas e muito bem compreendidas. Para entender por que seu sistema linear sensível está se comportando de maneiras não lineares, você precisa das ferramentas de cálculo ou as reinventa para o espaço problemático.

E, finalmente, o CS geralmente exige a leitura e a compreensão do trabalho de outras pessoas, e o cálculo é a primeira exposição a muitos vocabulários, convenções e história compartilhados.

Jess
fonte
"Muitos dos usos do seu estudo de CS envolvem sistemas de programação que monitoram mudanças ou, em alguns casos, tentam prever o futuro" - não creio que isso seja representativo dos principais cursos de CS.
Raphael