計算はどのように/いつコンピュータサイエンスで使用されますか?


95

多くのコンピューターサイエンスプログラムでは、2つまたは3つの計算クラスが必要です。

私は、計算機が計算機科学でどのように、そしていつ使用されるのかと思っています。コンピューターサイエンスの学位のCSコンテンツは、アルゴリズム、オペレーティングシステム、データ構造、人工知能、ソフトウェアエンジニアリングなどに焦点を当てる傾向があります。


6
リストの質問に対する厳密なポリシーはありませんが、一般的な嫌悪感があります。これこの議論にも注意してください。そこで説明されている問題を回避するために、質問を改善することができます。質問の改善方法がわからない場合は、コンピューターサイエンスチャットでお問い合わせください。
ラファエル

42
あなたはすべてのコースの内容が(すべてのキャリアパスに)関連しなければならないという仮定のよくある間違いを犯しているようです。特定の方法で考える方法を訓練するだけの場合もあります。
ラファエル

8
この質問が、Computer Science内での適切な使用についてのみ質問しているのか、Comp Sci学位を取得している学生のすべての使用について質問しているのかを明らかにできれば、おそらく役立つでしょう。少なくともここ米国では、Comp Sciの卒業生の非常に大きな割合が、考えられるほぼすべてのエンジニアリングドメインに広がるソフトウェアエンジニアになっています。これらのドメインの多くでは、さまざまな目的でCalculusを理解する必要があります。すべてではないCSの卒業生は、自分の仕事に微積分を使用しますが、多くは確かでしょう(その年生の時に、彼らはなると思う誰よりもおそらくより。)
reirab

1
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ラファエル

私にとっては、「後で数値計算法を学ぶときに感謝と安心」という感覚に非常に役立ちました。理論的な数学からの連続関数ではなく、実際の測定から得られる離散データを扱うとき、あまりにも多くの時間と労力が必要だった過度に複雑な式の代わりに、積分は単なる和であり微分は単なる減算であるという安心感がありました微積分のクラスで学ぶ前に!
-vsz

回答:


110

微積分学を直接必要とするいくつかのコースを考えることができます。私は、コンピュータサイエンスの学位で通常義務付けられている分野には太字を使用し、通常はオプションの学位では斜体を使用しました。

  • コンピューターグラフィックス /画像処理、ここであなたも解析幾何学と線形代数、必要になります重く!この経路をたどる場合は、微分幾何学(最小前提条件として多変量計算法を使用)を検討することもできます。しかし、非常に基本的なことでもここでCalculusが必要になります。たとえば、「Fourier Transform」または「Wavelets」を検索してみてください。これらは、画像を扱う人にとって非常に基本的なツールです。
  • 最適化、ほとんど非線形、多変量計算はすべてを開発するために使用される基本的な言語です。しかし、線形最適化でも微積分の恩恵を受けます(目的関数の導関数は絶対に重要です)
  • 確率/統計。これらは多変量解析なしでは真剣に研究することはできません。
  • 機械学習、統計(および結果として多変量計算)を多用します
  • データマイニングおよび関連するサブジェクト。これも多くの統計を使用します。
  • ロボットの物理的な動きをモデル化する必要があるため、偏微分と勾配を知る必要があります。
  • Discrete Math and Combinatoricsyes!、離散カウントにはCalculusが必要な場合があります!)-関数の生成について真剣に取り組む場合は、特定の数式を統合および派生する方法を知る必要があります。そして、それはアルゴリズムの分析に役立ちます(Sedgewick and Flajoletの本「Analysis of Algorithms」を参照)。同様に、テイラー級数と計算は、アルゴリズム分析で使用される特定の種類の再帰関係を解決するのに役立ちます。
  • o

他にもあるかもしれません-これは私の頭上にあります。

そして、それに加えて、技術的な厳密さで議論を推論し説明する方法を学ぶことにより、微積分コースから間接的に利益を得ます。これは、学生が通常考えるよりも価値があります。

最後に、他のExact SciencesおよびEngineeringの人々と対話するためには、微積分が必要になります。また、コンピューターサイエンティストが話すだけでなく、物理学者やエンジニアと協力する必要があることも珍しくありません。


34
おそらくあなたは別の経験を持っていたかもしれませんが、私は微積分を議論し、厳密に説明する方法を学ぶために微積分学はかなり役に立たないと思いました。高校の代数や幾何学に非常によく似た暗記法とパターンマッチングによって教えられました。一方、それはいくつかの高い数学のクラスに前提条件だっこれらのスキルを教えるので、私はそれが全く役に立たなかったと仮定します。
tsleyson

6
最後のポイント(間接的なメリット)に完全に関連することができます。プログラミング言語の理論に取り組んでいて、微積分を直接使用することはめったにありませんでした。おそらく、最も直接的なアプリケーションは確率的計算モデル(たとえば、Plotkin&Jones確率的パワードメイン)でした。しかし、私の計算コースはほとんど物事の証明に関するものであり、これは非常に貴重なものでした。数学(離散数学、論理、線形代数、数値解析など)に加えて、すべての本格的なCSプログラムでは1つまたは2つの微積分コースが必要です。カテゴリ、トポロジー、代数など
カイ

3
滑らかな補間機能は、基本的にすべての形式のものであろう。ここで私はコンピュータグラフィックスで計算を必要とする方法の例ですf(0) = 0f(1) = 1f'(0) = f'(1) = 0、、あなたは、例えば、あなたが気に他の制約を追加することができますf'(0.5) = 1。少し前に、これを使用して、画像を平滑化するためのいくつかの異なる補間多項式を導出しました。
porglezomp

3
ロボット工学はおそらくあらゆる種類の物理モデリングに拡張できます(照明の観点からCGもカバーしていると思いますので、運動物理モデリングと呼びましょう)。これには、加速/速度、バウンス/スプリング/変形、PIDコントローラー、音響、重力が含まれます
...-metao

2
私は間接的にこの方法を支持します。これまでのどのクラスよりも優れているため、Calculusは生徒に単に問題の数を数えたり、どれだけの作業が必要かを推測したりすることはできません。
candied_orange

20

これはいくぶんあいまいですが、代数データ型では計算が行われます。どのタイプでも、その1ホールコンテキストのタイプはそのタイプの派生物です。主題全体の概要については、この素晴らしい講演をご覧ください。これは非常に技術的な用語なので、説明しましょう。

代数データ型

製品タイプと呼ばれるタプルに遭遇した可能性があります(そうでない場合は、2つのタイプのデカルトであるためです)。これを文字通り解釈し、表記法を使用します。

ab

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+a2+a3(1+aL(a))
L(a)=1+a+a2+a3+a4+a5...

xn

この定義は、リストには、三などの、いずれかのユニット、または1つの項目のタプル、または二つのアイテムのタプルであること、次に言うあるリストの定義!

ワンホールコンテキスト

ワンホールコンテキストに移ります。ワンホールコンテキストは、製品タイプから「価値を引き出す」ときに得られるものです。例を挙げましょう:

a2aa+a2a

3タプルから値を取得すると、2タプルが得られますが、3つの異なるバリアントがあります。

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

3a2a3

最後の例では、リストを使用してみましょう。

リストに元の式を使用する場合:

L(a)=1+aL(a)

以下を取得するために再配置できます。

L(a)=11a

(表面的にはこれはナンセンスに思えるかもしれませんが、この結果のテイラー系列をとると、先ほど導出した定義が得られます。)

これを区別すると、興味深い結果が得られます。

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

したがって、1つのリストがリストのペアになりました。実際、これは理にかなっています。生成される2つのリストは、元のリストの穴の上下の要素に対応します。


これは素晴らしく洞察力がありました。ありがとう。
D.ベンノーブル

12

数値法。特定のアプリケーションに特有の厄介な微積分問題が存在し、プログラムなしで人間が実際に解決できるよりも速い解決策が必要です。誰かがソリューションを計算するアルゴリズムを設計する必要があります。プログラマーと科学者を隔てるのはそれだけではないでしょうか?


3
この質問の「リスト」の性質を考えると、すべての答えは全体像を説明しようとする必要があります。数値計算法が唯一のインスタンスであると主張したいのですか?
ラファエル

コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ラファエル

12

自動化 -ロボット工学と同様に、自動化には多くの人間の行動の定量化が必要になる場合があります。

計算 -証​​明の解を見つけるには、しばしば計算が必要です。

ビジュアライゼーション -高度なアルゴリズムを使用するには、cos、sine、pi、eなどの計算が必要です。特に、ベクトル、衝突フィールド、およびメッシュを計算する場合。

ロジスティクスとリスク分析 -タスクが可能かどうか、関連するリスク、および成功の可能性の割合を決定します。

セキュリティ -ほとんどのセキュリティは計算なしで実行できます。ただし、説明が必要な多くの人は、数式で説明を好みます。

AI - AIの基本は計算なしで利用できます。ただし、高度な動作、群知能/ハイブマインド、複雑な価値ベースの意思決定を計算します。

医療計算 -ほとんどの健康データを視覚化するには、EKG測定値などの計算が必要です。

科学と工学 -航空宇宙、占星術、生物学、化学、工学など、ほぼすべての科学分野で計算を行う場合、微積分が必要です。

プログラミングの多くの人々は、微積分を使用せずにキャリア全体に進むことができます。しかし、あなたが仕事をする気があるなら、それは非常に貴重であると証明できます。私にとっては、自動化、ロジスティクス、視覚化で最も効果的でした。特定のパターンを識別することで、パターンを単に無視したり、パターンを模倣したり、優れた方法をまとめて開発したりできます。


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のないマイクロコントローラーにこれらの機能を実装するにはどうすればよいですか?微積分学を知っているなら、すぐに良い答えを知っています:べき級数。
ネイト・エルドリッジ

6

実際、微積分を使用する可能性はほとんどありません。ただし、実質的に他のすべての科学分野は微積分を使用しており、科学の学位に取り組んでいます。大学の科学の学位が何を意味するかについての特定の期待があり、それらのことの1つは微積分を知っていることです。使用しない場合でも。

微積分学がうまくいかなくても大丈夫ですが、離散数学にある程度の努力を払ってください。離散的な数学が作用する現実世界のプログラミングの問題が多くあり、その原理を知らないと他のコーダーの前で恥ずかしくなります。


9
あなたの最初の段落は完全に間違っており、陰謀論に接しています。計算が役立つコンピューターサイエンスの領域は十分にあります(それらの無限のリストについては、他の回答を参照してください)。確かに、これらのすべての領域を回避することは可能ですが、微積分を落とすとグレードを超えて影響がゼロになると主張するのは非常に誤解を招くでしょう。
デビッドリチャービー16

4
学位プログラムによっては、微積分を使用せずに学位を取得することができます。CS専攻では、必要以上に学位を取得する必要はないと思います。しかし、それをうまく行わないと、コンピューターサイエンスの最も興味深い分野のいくつかから締め出されます。卒業したら、Web開発者になるのに十分な時間があります。学校にいる間、少し自分を押してみてはいかがですか?
tsleyson

3
@tsleyson Web開発者になりたい場合は、学位を取得するのに必要な授業料と時間を節約してください。
ラファエル

8
@ScottBあなたはコンピューターサイエンスとプログラミングを混同しているようです。
デビッドリチャービー

3
@ScottB CS =数学+プログラミングとは誰のことですか?私自身も、この限られた視野に反対することを長年主張してきました。しかし、逆方向にもあります。物理学と同じように、数学はCSに不可欠です。私たちは、必要な我々はしたくない場合でも、それを実践し、それを。(とはいえ、これはこの議論の場ではありません。続行したい場合は、コンピュータサイエンスチャットに参加してください。)
ラファエル

4

多くの人々がすでにCSでアプリケーションを提供しています。ただし、予想以上の場合にCalculusが見つかることがあります。

正規表現派生物の再検討

オートマトンを知っているなら、このpdfは読む価値があるかもしれません。


微分計算は表示されません。「微分」という言葉は見えますが、伝統的な微分計算に似たものは見当たりません。

2
「形式微分」と呼ばれ、ある意味で微積分に関連しています。また、Generate Functions、離散構造に関連するいくつかの公式、および実際に「スムーズ関数」を持たない他の領域でこれが行われることもわかります。
ジェイ

@Jay:重要なのは名前ではない。微積分を理解すると、どのように役立ちますか?
クリスチャン

2
このウィキペディアのページで説明されています。公式微分は、多項式を含む代数構造の要素に対する操作であり、形式的には多項式を微分するための通常の規則と「かなり似ています」が、生徒が微積分学で見るものとは異なり、多項式は実数ではありません。それらは、任意の「リング」(別の代数構造)上の多項式である場合があります。そして、正式な派生物の実用的なアプリケーションがあります-私は少なくとも1つを見ました(代数暗号解読法-詳細を思い出せません)。
ジェイ

4

より具体的な例:

  • 微積分法を使用してデルタルールを導出します。これにより、ある種のニューラルネットワークを「学習」できます。
  • 微積分は、振動関数のフーリエ変換を計算するために使用できます。これは、信号分析で非常に重要です。
  • 計算はコンピューターグラフィックスで常に使用されています。コンピューターグラフィックスは、人々が絶えず新しい技術を発見している非常に活発な分野です。基本的な例については、ji屋のレンダリング方程式をご覧ください
  • 計算は、計算幾何学の分野で重要であり、曲線と表面のモデリングを調査します。

3

これらの他の優れた答えに、この点を追加します:テストの厳密さ

一部のアプリケーションのテストケースの作成では、計算を使用して、予想される実行時間、メモリサイズを予測し、データ構造を調整するときに最適なパラメーターを選択する必要がありました。これには、予想される丸め誤差の理解などが含まれます。

統計については他の回答でも言及されていますが、最適化アルゴリズムや、微積分を含む数学的原理に基づく質素なストリーミングアルゴリズムなど、モンテカルロアルゴリズムについて具体的に言及したいと思います。

微積分が必要な場所で私が働いた特定の産業は次のとおりです。

  • ファイナンス(取引プラットフォームの作成)

  • 保険(what-ifシナリオにおける保険契約の数値統合による予想保険金の損失の計算)

  • 物流(輸送ルートの統合の最適化)

  • 信号処理


3

積分-積分部分-は、CSで加算について考えるための基盤として直接使用されます。集計に関するKnuthの具象数学セクションのいずれかの部分を操作すると、計算に共通の規則をすぐに認識できます。連続ケースの一部を理解すると、離散を考慮するためのツールが得られます。

CSスタディの多くの用途には、変化を監視するプログラミングシステムが含まれ、場合によっては未来を予測しようとします。これらのシステムの周りの数学は微分方程式と線形代数に根ざしており、微分方程式は...計算です。微分方程式の部分により迅速に移行することを提唱するGibert Strangのような教師がいますが、それはまだ微積分のサブセットです。変化がシステムの変化に依存する場合、直感的でなく非常によく理解されている方法で不安定(および安定)になり始めます。賢明な線形システムが非線形に振る舞う理由を理解するには、微積分のツールが必要か、問題空間のためにそれらを再発明する必要があります。

そして最後に、CSはしばしば他の人の仕事を読んで理解することを必要とし、微積分は多くの共有語彙、慣習、および歴史への最初の露出です。


「CSスタディの多くの用途には、変化を監視するプログラミングシステムが含まれます。場合によっては、将来を予測しようとすることもあります」-これは、CSスタディのコースを代表するものではないと思います。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.