微积分如何/何时用于计算机科学?


95

许多计算机科学程序需要两个或三个演算类。

我想知道,计算机科学如何以及何时使用微积分?计算机科学学位的CS内容倾向于侧重于算法,操作系统,数据结构,人工智能,软件工程等。在某些情况下,微积分在计算机科学的这些或其他领域中有用吗?


6
对于清单问题,我们没有严格的政策,但普遍存在不喜欢的问题。另外请注意,这个这个讨论; 您可能需要改善您的问题,以避免在那里解释的问题。如果您不确定如何改善问题,也许我们可以在计算机科学聊天中为您提供帮助?
拉斐尔

42
您似乎犯了一个普遍的错误,即认为每门课程的内容都必须是相关的(针对每条职业道路)。有时只是训练您如何以某些方式思考。
拉斐尔

8
或许,这将是有帮助的,如果这个问题能澄清不管你是问正确或全部谁得到一个基本的计算机科学学位的学生使用的计算机科学中的应用。至少在美国这里,相当大比例的Comp Sci毕业生成为软件工程师,分布在几乎可以想象到的每个工程领域。这些领域中的许多领域出于各种目的都需要了解微积分。并非所有CS毕业生都将在其工作中使用微积分,但许多人肯定会(可能比他们认为在大一学年的人更多。)
reirab

1
评论不作进一步讨论;此对话已转移至聊天
拉斐尔

对我来说,这对于“稍后学习数值方法时欣赏和缓解”的感觉非常有用。当使用来自实际测量的离散数据而不是理论数学的连续函数进行处理时,令人感到欣慰的是,积分只是一个总和,导数只是一个减法,而不是我们需要那么多时间和精力的过于复杂的公式之前要在微积分课程中学习!
vsz 2016年

Answers:


110

我可以想到一些直接需要微积分的课程。对于计算机科学学位,我通常使用必修科目,但对于可选科目则使用斜体。

  • 计算机图形 /图像处理,在这里你还需要解析几何和线性代数,!如果您走这条路,您可能还需要研究一些微分几何(将多元微积分作为最低前提)。但是,即使是非常基本的内容,您在这里也需要微积分:例如,尝试搜索“傅立叶变换”或“小波”-这是使用图像的人的两个非常基础的工具。
  • 优化,主要是非线性的,其中多元微积分是用于开发一切的基本语言。但是,即使是线性优化也可以从微积分中受益(目标函数的导数绝对重要)
  • 概率/统计。如果没有多元演算,就无法认真研究这些内容。
  • 机器学习,它大量使用统计信息(因此使用了多元微积分)
  • 数据挖掘和相关主题,也使用大量统计信息;
  • 机器人学,您将需要在其中建模机器人的物理运动,因此您将需要了解偏导数和梯度。
  • 离散数学和组合数学是的!您可能需要微积分进行离散计数!)-如果对生成函数足够重视,则需要知道如何积分和推导某些公式。这对于算法分析很有用(请参阅Sedgewick和Flajolet的书“算法分析”)。同样,泰勒级数和演算可用于求解某些种类的递归关系,这些递归关系可用于算法分析。
  • Analysis of Algorithms,从一开始就使用极限的概念(请参阅Landau标记“ little ”-它是使用极限定义的)o

可能还有其他人-这只是我的脑袋。

而且,除此之外,通过学习如何以严格的技术推理和解释论证,可以从微积分课程中间接受益。这比学生通常认为的更有价值。

最后,您将需要微积分,以便与其他Exact Sciences and Engineering的人员进行互动。而且,计算机科学家不仅需要交谈,而且还需要与物理学家或工程师一起工作,这并不少见。


34
也许您有不同的经历,但是我发现微积分对于学习如何严格地推理和解释论点毫无用处。死记硬背和模式匹配非常像高中代数和几何学。另一方面,这确实是教授这些技能的几个高级数学课程的前提,所以我认为这并不是完全没有用的。
tsleyson '16

6
我完全可以谈到最后一点(间接利益)。致力于编程语言理论,我很少直接使用微积分。也许最直接的应用是在概率计算模型中(例如Plotkin&Jones概率幂域)。但是,我的微积分课程主要是关于证明事物的,这是非常非常有价值的。每个严肃的CS程序都需要一到两个微积分课程,以及更多数学(离散数学,逻辑,线性代数,数值分析,以及可能的类别,拓扑,代数等)。
2013年

3
下面是我需要的是如何在计算机图形学微积分的例子:平滑插补功能将基本全是这样的形式f(0) = 0f(1) = 1f'(0) = f'(1) = 0,你可以添加你所关心的任何其他限制,例如f'(0.5) = 1。不久前,我使用它来导出一些不同的插值多项​​式,以使图像平滑。
porglezomp

3
机器人技术可能可以扩展到任何种类的物理建模(我想在照明方面也涵盖了CG,所以我们称其为动力学物理建模)。这包括加速度/速度,反弹/弹簧/变形,PID控制器,声学,引力...
metao '16

2
我会这样间接地支持这一观点:与以前的任何课程相比,微积分都比他们以前参加的任何课程都要好,因为它教学生不能简单地计算出问题的数量并估算将要涉及的工作量。
candied_orange

20

这有点模糊,但是微积分出现在代数数据类型中。对于任何给定类型,其单孔上下文的类型都是该类型的派生类型。有关整个主题的概述,请参见此精彩演讲。这是非常技术性的术语,所以让我们解释一下。

代数数据类型

您可能遇到过被称为产品类型的元组(如果不是,那是因为它们是两种类型的笛卡尔乘积)。我们将按字面意义使用并使用表示法:

ab

表示一个元组,其中和都是类型。接下来,您可能遇到过求和类型,这些类型可以是一种类型,也可以是另一种类型(在Haskell中称为unionsvariantsEither类型(kinda))。我们还将从字面上理解这一点并使用表示法:ab

a+b

之所以这样命名,是因为如果类型具有值,类型具有值,则类型具有值。aNabNba+bNa+Nb

这些类型看起来像正常的代数表达式,实际上,我们可以(一定程度上)操纵它们。

一个例子

在函数式语言中,列表的通用定义(在此处由Haskell提供)是:

data List a = Empty 
            | Cons a List

这表示一个列表为空或一个值和另一个列表的元组。将其转换为代数符号,我们得到:

L(a)=1+aL(a)

其中表示具有一个值的类型(也称为单位类型)。通过重复插入,我们可以对此求值以获得的定义: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 + a 2 + a 3 + a 4 + a 5
L(a)=1+a+a2+a3(1+aL(a))
L(a)=1+a+a2+a3+a4+a5...

(其中xn

然后,此定义表示列表是单位,或者是一个项目的元组,或者是两个项目的元组,或者是三个项目的元组,这就是列表的定义!

单孔上下文

现在进入单孔上下文:单孔上下文是您从产品类型中“获取价值”时所获得的。让我们举个例子:

a2aa+a2a

从三元组中取出一个值得到一个二元组,但是有三种不同的变体:

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

3a2a3

对于最后一个示例,让我们使用一个列表:

如果我们使用原始表达式作为列表:

L(a)=1+aL(a)

我们可以重新排列以获得:

L(a)=11a

(从表面上看,这似乎是胡说八道,但是如果采用此结果的泰勒级数,则会得到我们之前得出的定义。)

现在,如果我们对此进行区分,我们将得到一个有趣的结果:

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

因此,一个列表已成为一对列表。这实际上是有道理的:产生的两个列表对应于原始列表中孔上方和下方的元素!


这真是极富洞察力。谢谢。
D. Ben Knoble

12

数值方法。存在一些麻烦的演算问题,这些问题是特定应用程序所独有的,并且它们需要的解决方案比人类无需程序即可实际解决的速度快。有人必须设计一种算法来计算解决方案。那不是唯一将程序员与科学家区分开来的东西吗?


3
考虑到该问题的“清单”性质,每个答案都应尝试全面介绍。您确定要声明数字方法是唯一实例吗?
拉斐尔

评论不作进一步讨论;此对话已转移至聊天
拉斐尔

12

自动化 -与机器人技术类似,自动化可能需要量化许多人类行为。

计算 -寻找证明的解决方案通常需要演算。

可视化 -使用高级算法需要微积分,例如cos,sine,pi和e。特别是在计算向量,碰撞场和网格划分时。

后勤和风险分析 -确定任务是否可行,所涉及的风险以及可能的成功率。

安全性 -大多数安全性无需演算即可执行;但是,许多想要解释的人在数学表达式中更喜欢它。

人工智能 -无需演算就可以利用人工智能的基础知识;但是,要计算高级行为,聚集智慧/蜂巢思维以及基于复杂价值的决策。

医疗计算 -可视化大多数健康数据需要微积分,例如心电图读数。

科学与工程 -与几乎所有其他科学学科一起工作时,都需要微积分:航空航天,占星,生物学,化学或工程。

许多编程人员可以不使用微积分就完成整个职业。但是,如果您愿意做这项工作,那就可以证明它是无价的。对我来说,它在自动化,物流和可视化方面最有效。通过识别特定的模式,您可以简单地忽略该模式,模仿该模式或共同开发一种更好的方法。


7
πe

3
exp(x)f(x)=f(x)f(0)=1f(x)=g(x)g(x)=f(x)f(0)=0g(0)=1

2
@DavidRicherby:示例:例如,如何在没有FPU的微控制器上实现这些功能?如果您知道微积分,您会立即知道一个很好的答案:幂级数。
Nate Eldredge

6

事实是,使用微积分的可能性很小。但是,几乎所有其他科学学科都使用微积分,而您正在攻读科学学位。对大学理学学位应该意味着什么有一定的期望,其中之一就是您知道微积分。即使您永远都不会使用它。

如果您在微积分方面做得不好,也可以,但是请确保您在离散数学上付出了一些努力。现实世界中有很多编程问题,离散数学在其中发挥作用,对它的原理的不了解会使您在其他编码人员面前感到尴尬。


9
您的第一段是完全错误的,并且与阴谋论接壤。在计算机科学的足够多的领域中,微积分是有用的(有关无穷无尽的列表,请参阅其他答案)。当然,有可能避免所有这些方面,但断言微积分将对成绩造成零影响是非常误导的。
David Richerby '16

4
根据您的学位课程,您可以不使用微积分就可以完成一个学位,我当然认为CS专业的学生不需要我们所获得的那么多学位。但是,如果做得不好,您将无法进入计算机科学领域中最有趣的领域。毕业后,有很多时间可以成为Web开发人员。在上学时,为什么不试着推自己一点呢?
tsleyson '16

3
@tsleyson如果您想成为一名Web开发人员,请节省获得CS学位所需的学费和时间。
拉斐尔

8
@ScottB您似乎将计算机科学与编程相混淆。
David Richerby '16

3
@ScottB谁在说CS =数学+编程?我本人多年来一直主张反对这种有限的观点。但是您也将其倒退:数学是CS不可或缺的部分,就像它是物理学一样。我们需要它,即使我们不想了。(也就是说,这里不是讨论的地方。如果您想继续,请加入我们的计算机聊天室。)
拉斐尔

4

许多人已经在CS中提供了应用程序。但是有时您会在最不期望的时候找到微积分:

重新检查正则表达式衍生物

如果您知道自动机,则此pdf可能值得阅读。


我在那里看不到任何微积分。我看到了“导数”一词,但看不到任何类似于传统微积分的东西。

2
它称为“形式导数”,并且在某种程度上与微积分有关。您还将通过生成函数,一些与离散结构有关的公式以及实际上没有“平滑函数”的其他区域看到这一点。
周杰伦

@Jay:重要的不是名字。对微积分的理解有何帮助?
基督教徒

2
在此Wikipedia页面中对此进行了解释。形式导数是对包含多项式的代数结构元素的运算,它在形式上“很像”微分多项式的通常规则,但是-与学生在微积分中所见的不同-多项式不是实数。它们可以是任意“环”(另一代数结构)上的多项式。形式导数有实际应用-我已经看到至少一个(代数密码分析-记不清细节了)。
杰(Jay)2016年

4

一些更具体的示例:

  • 微积分用于导出增量规则,该规则允许某些类型的神经网络“学习”。
  • 微积分可用于计算振荡函数的傅立叶变换,这在信号分析中非常重要。
  • 微积分一直用于计算机图形学,随着人们不断发现新技术,这是一个非常活跃的领域。有关基本示例,请查看Kajiya的渲染方程式
  • 微积分在计算几何学,研究曲线和曲面建模方面非常重要。

3

在这些其他出色的答案中,我要补充一点:严格的测试

在为某些应用程序创建测试用例时,我不得不使用演算来预测预期的运行时间,内存大小,并在调整数据结构时选择最佳参数。这包括了解预期的舍入误差等。

虽然在其他答案中提到了统计信息,但我想特别提及蒙特卡洛算法,例如基于包括微积分在内的数学原理的优化算法和一些节俭的流算法

我曾从事微积分工作的特定行业包括:

  • 金融(创建交易平台)

  • 保险(假设情景中保险单的数值集成,以计算预期的保险单损失)

  • 物流(优化运输路线的合并)

  • 信号处理


3

微积分-不可或缺的部分-直接用于CS中,作为思考求和的基础。如果您遍历Knuth的“具体数学”部分中有关求和的任何部分,您将很快认识到微积分常用的惯例:了解一些连续的情况将为您提供考虑离散的工具。

CS研究的许多用途涉及编程系统,这些系统可以监视变化,或者在某些情况下可以预测未来。这些系统周围的数学源于微分方程和线性代数,而微分方程则是...演算。像Gibert Strang这样的老师提倡更快地进入微分方程部分,但它仍然是微积分的子集。当变化取决于任何系统中的变化时,它就会以非直觉的方式并且非常容易理解的方式变得不稳定(稳定)。要了解为什么明智的线性系统以非线性方式运行,您要么需要微积分工具,要么需要为问题空间重新发明它们。

最后,CS经常需要阅读和理解他人的工作,而微积分是第一次接触大量共享的词汇,约定和历史。


“您的CS研究的许多用途都涉及用于监视变化的编程系统,或者在某些情况下,它们试图预测未来” –我认为这并不代表必须的CS研究课程。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.