プログラミングのための数学
書籍情報
発売日 : 2021年06月23日
著者/編集 : Paul Orland/松田晃一
出版社 : マイナビ出版
発行形態 : 単行本
ページ数 : 712p
書籍説明
内容紹介
ソフトウェア開発において数学のスキルがますます重要になっています。時代をリードする企業はデータサイエンスや機械学習を取り入れ活用し、ゲーム開発、コンピューターグラフィックスやアニメーション、画像や信号処理、価格設定、株式市場分析など、数学の知識が多くのシーンで役立ちます。
本書では、プログラミングに必要となる数学:線形代数、微積分、機械学習の基礎を学び、実際のソフトウェア開発で活用できるPythonの主要ライブラリの使い方を習得します。実際のコーディングはJupyter Notebookを通して学びます。
難解な教科書とはならないよう、数学的概念を実世界に当てはめた例題をたくさん取り上げます!
1章 プログラムで数学を学ぶ
[第1部] ベクトルとグラフィックス
2章 2次元ベクトルで描画する
3章 3次元にする
4章 ベクトルやグラフィックスを座標変換する
5章 行列で座標変換を計算する
6章 より高い次元へ一般化する
7章 連立1次方程式を解く
[第2部] 微積分と物理シミュレーション
8章 変化の割合を理解する
9章 移動する物体をシミュレーションする
10章 文字式を扱う
11章 力場をシミュレーションする
12章 物理シミュレーションを最適化する
13章 音をフーリエ級数で分析する
[第3部] 機械学習への応用
14章 データに関数を当てはめる
15章 ロジスティック回帰でデータを分類する
16章 ニューラルネットワークを訓練する
付録A Pythonのセットアップ
付録B Pythonのヒントとコツ
付録C OpenGLとPyGameによる3次元モデルのロードとレンダリング
本書は、プログラミング経験がある程度あり「数学スキルを再確認したい」「数学の応用についてプログラミングを通じて学びたい」と考えている人のための本で中学・高校で習った数学の知識があれば大丈夫です。
例題に沿って、すべての練習問題に挑戦することで、本書を最大限に活用することができます。
本書では、プログラミングに必要となる数学:線形代数、微積分、機械学習の基礎を学び、実際のソフトウェア開発で活用できるPythonの主要ライブラリの使い方を習得します。実際のコーディングはJupyter Notebookを通して学びます。
難解な教科書とはならないよう、数学的概念を実世界に当てはめた例題をたくさん取り上げます!
1章 プログラムで数学を学ぶ
[第1部] ベクトルとグラフィックス
2章 2次元ベクトルで描画する
3章 3次元にする
4章 ベクトルやグラフィックスを座標変換する
5章 行列で座標変換を計算する
6章 より高い次元へ一般化する
7章 連立1次方程式を解く
[第2部] 微積分と物理シミュレーション
8章 変化の割合を理解する
9章 移動する物体をシミュレーションする
10章 文字式を扱う
11章 力場をシミュレーションする
12章 物理シミュレーションを最適化する
13章 音をフーリエ級数で分析する
[第3部] 機械学習への応用
14章 データに関数を当てはめる
15章 ロジスティック回帰でデータを分類する
16章 ニューラルネットワークを訓練する
付録A Pythonのセットアップ
付録B Pythonのヒントとコツ
付録C OpenGLとPyGameによる3次元モデルのロードとレンダリング
本書は、プログラミング経験がある程度あり「数学スキルを再確認したい」「数学の応用についてプログラミングを通じて学びたい」と考えている人のための本で中学・高校で習った数学の知識があれば大丈夫です。
例題に沿って、すべての練習問題に挑戦することで、本書を最大限に活用することができます。
目次
第1章 プログラムで数学を学ぶ
1.1 お金持ちになれる問題を数学とソフトウェアで解く
1.2 数学の勉強をしない方法
1.3 鍛え上げられた左脳を使う
まとめ
[第1部] ベクトルとグラフィックス
第2章 2次元ベクトルで描画する
2.1 2次元ベクトルを描画する
2.2 平面ベクトル演算
2.3 平面上の角度と三角関数
2.4 ベクトルの集合を座標変換する
2.5 Matplotlib で描画する
まとめ
第3章 3次元にする
3.1 3次元空間にベクトルを描く
3.2 3次元のベクトル演算
3.3 内積: ベクトルの揃い具合いを測る
3.4 外積: 向き付き面積を計算する
3.5 3次元物体を2次元でレンダリングする
まとめ
第4章 ベクトルやグラフィックスを座標変換する
4.1 3次元物体を座標変換する
4.2 線形変換
まとめ
第5章 行列で座標変換を計算する
5.1 線形変換を行列で表現する
5.2 さまざまな形状の行列を解釈する
5.3 行列を用いてベクトルを平行移動する
まとめ
第6章 より高い次元へ一般化する
6.1 ベクトルの定義を一般化する
6.2 異なるベクトル空間を探索する
6.3 より小さなベクトル空間を探す
6.4 まとめ
第7章 連立1次方程式を解く
7.1 アーケードゲームを設計する
7.2 直線の交点を求める
7.3 1次方程式をより高次元で一般化する
7.4 1次方程式を解いて基底を変換する
まとめ
[第2部] 微積分と物理シミュレーション
第8章 変化の割合を理解する
8.1 石油量から平均流量を計算する
8.2 時間ごとに平均流量をプロットする
8.3 瞬間流量を近似する
8.4 石油量の変化を近似する
8.5 時間ごとの石油量をプロットする
まとめ
第9章 移動する物体をシミュレーションする
9.1 等速運動をシミュレーションする
9.2 加速度をシミュレーションする
9.3 オイラー法を深く掘り下げる
9.4 より小さな時間ステップでオイラー法を実行する
まとめ
第10章 文字式を扱う
10.1 数式処理システムを用いて正確な導関数を求める
10.2 数式をモデル化する
10.3 文字式が計算できるようにする
10.4 関数の導関数を求める
10.5 微分を自動的に行う
10.6 関数を積分する
まとめ
第11章 力場をシミュレーションする
11.1 ベクトル場を用いて重力をモデル化する
11.2 重力場をモデル化する
11.3 アステロイドゲームに重力を加える
11.4 ポテンシャルエネルギーを導入する
11.5 勾配を計算しエネルギーから力を導く
まとめ
第12章 物理シミュレーションを最適化する
12.1 発射体のシミュレーションをテストする
12.2 最適到達距離を計算する
12.3 シミュレーションを強化する
12.4 勾配上昇法を利用し到達距離を最適化する
まとめ
第13章 音をフーリエ級数で分析する
13.1 音波を組み合わせたり分解したりする
13.2 Pythonで音を再生する
13.3 シヌソイド波を音に変える
13.4 音を組み合わせて新しい音を作る
13.5 音をフーリエ級数に分解する
まとめ
[第3部] 機械学習への応用
第14章 データに関数を当てはめる
14.1 関数の当てはまり具合を測定する
14.2 関数の空間を探索する
14.3 勾配降下法を使い最も良く当てはまる線を求める
14.4 非線形関数を当てはめる
まとめ
第15章 ロジスティック回帰でデータを分類する
15.1 実データで分類関数をテストする
15.2 決定境界を可視化する
15.3 分類問題を回帰問題として扱う
15.4 ロジスティック関数の空間を探索する
15.5 最も良いロジスティック関数を見つける
まとめ
第16章 ニューラルネットワークを訓練する
16.1 ニューラルネットワークでデータを分類する
16.2 手書き文字の画像を分類する
16.3 ニューラルネットワークを設計する
16.4 Pythonでニューラルネットワークを構築する
16.5 勾配降下法を用いてニューラルネットワークを訓練する
16.6 バックプロパゲーションを用いて勾配を計算する
まとめ
付録A Pythonのセットアップ
A.1 すでにPythonがインストールされているかをチェックする
A.2 Anacondaのダウンロードとインストール
A.3 Pythonをインタラクティブモードで使う
付録B Pythonのヒントとコツ
B.1 Pythonでの数値と数学
B.2 Pythonのコレクション型データ
B.3 関数を使う
B.4 Matplotlib でデータをプロットする
B.5 Pythonによるオブジェクト指向プログラミング
付録C OpenGLとPyGameによる3次元モデルのロードとレンダリング
C.1 第3章の八面体を再現する
C.2 視点を変える
C.3 ユタ・ティーポットの読み込みとレンダリング
C.4 練習問題
数学記法リファレンス
1.1 お金持ちになれる問題を数学とソフトウェアで解く
1.2 数学の勉強をしない方法
1.3 鍛え上げられた左脳を使う
まとめ
[第1部] ベクトルとグラフィックス
第2章 2次元ベクトルで描画する
2.1 2次元ベクトルを描画する
2.2 平面ベクトル演算
2.3 平面上の角度と三角関数
2.4 ベクトルの集合を座標変換する
2.5 Matplotlib で描画する
まとめ
第3章 3次元にする
3.1 3次元空間にベクトルを描く
3.2 3次元のベクトル演算
3.3 内積: ベクトルの揃い具合いを測る
3.4 外積: 向き付き面積を計算する
3.5 3次元物体を2次元でレンダリングする
まとめ
第4章 ベクトルやグラフィックスを座標変換する
4.1 3次元物体を座標変換する
4.2 線形変換
まとめ
第5章 行列で座標変換を計算する
5.1 線形変換を行列で表現する
5.2 さまざまな形状の行列を解釈する
5.3 行列を用いてベクトルを平行移動する
まとめ
第6章 より高い次元へ一般化する
6.1 ベクトルの定義を一般化する
6.2 異なるベクトル空間を探索する
6.3 より小さなベクトル空間を探す
6.4 まとめ
第7章 連立1次方程式を解く
7.1 アーケードゲームを設計する
7.2 直線の交点を求める
7.3 1次方程式をより高次元で一般化する
7.4 1次方程式を解いて基底を変換する
まとめ
[第2部] 微積分と物理シミュレーション
第8章 変化の割合を理解する
8.1 石油量から平均流量を計算する
8.2 時間ごとに平均流量をプロットする
8.3 瞬間流量を近似する
8.4 石油量の変化を近似する
8.5 時間ごとの石油量をプロットする
まとめ
第9章 移動する物体をシミュレーションする
9.1 等速運動をシミュレーションする
9.2 加速度をシミュレーションする
9.3 オイラー法を深く掘り下げる
9.4 より小さな時間ステップでオイラー法を実行する
まとめ
第10章 文字式を扱う
10.1 数式処理システムを用いて正確な導関数を求める
10.2 数式をモデル化する
10.3 文字式が計算できるようにする
10.4 関数の導関数を求める
10.5 微分を自動的に行う
10.6 関数を積分する
まとめ
第11章 力場をシミュレーションする
11.1 ベクトル場を用いて重力をモデル化する
11.2 重力場をモデル化する
11.3 アステロイドゲームに重力を加える
11.4 ポテンシャルエネルギーを導入する
11.5 勾配を計算しエネルギーから力を導く
まとめ
第12章 物理シミュレーションを最適化する
12.1 発射体のシミュレーションをテストする
12.2 最適到達距離を計算する
12.3 シミュレーションを強化する
12.4 勾配上昇法を利用し到達距離を最適化する
まとめ
第13章 音をフーリエ級数で分析する
13.1 音波を組み合わせたり分解したりする
13.2 Pythonで音を再生する
13.3 シヌソイド波を音に変える
13.4 音を組み合わせて新しい音を作る
13.5 音をフーリエ級数に分解する
まとめ
[第3部] 機械学習への応用
第14章 データに関数を当てはめる
14.1 関数の当てはまり具合を測定する
14.2 関数の空間を探索する
14.3 勾配降下法を使い最も良く当てはまる線を求める
14.4 非線形関数を当てはめる
まとめ
第15章 ロジスティック回帰でデータを分類する
15.1 実データで分類関数をテストする
15.2 決定境界を可視化する
15.3 分類問題を回帰問題として扱う
15.4 ロジスティック関数の空間を探索する
15.5 最も良いロジスティック関数を見つける
まとめ
第16章 ニューラルネットワークを訓練する
16.1 ニューラルネットワークでデータを分類する
16.2 手書き文字の画像を分類する
16.3 ニューラルネットワークを設計する
16.4 Pythonでニューラルネットワークを構築する
16.5 勾配降下法を用いてニューラルネットワークを訓練する
16.6 バックプロパゲーションを用いて勾配を計算する
まとめ
付録A Pythonのセットアップ
A.1 すでにPythonがインストールされているかをチェックする
A.2 Anacondaのダウンロードとインストール
A.3 Pythonをインタラクティブモードで使う
付録B Pythonのヒントとコツ
B.1 Pythonでの数値と数学
B.2 Pythonのコレクション型データ
B.3 関数を使う
B.4 Matplotlib でデータをプロットする
B.5 Pythonによるオブジェクト指向プログラミング
付録C OpenGLとPyGameによる3次元モデルのロードとレンダリング
C.1 第3章の八面体を再現する
C.2 視点を変える
C.3 ユタ・ティーポットの読み込みとレンダリング
C.4 練習問題
数学記法リファレンス
著者情報
paul orland
起業家、プログラマー、数学の愛好家。マイクロソフトでソフトウェアエンジニアとして勤務した後、石油・ガス業界のエネルギー生産を最適化するための予測分析システムを構築するスタートアップ企業Tachyusを共同設立。Tachyusの創立CTOとして機械学習と物理学ベースのモデリングソフトウェアの製品化を主導し、後にCEOとして5大陸の顧客にサービスを提供するまでに会社を拡大させた。イェール大学で数学の学士号を、ワシントン大学で物理学の修士号を取得している。
松田晃一
博士(工学、東京大学)。NEC、ソニーコンピュータサイエンス研究所、ソニーなどを経て、大妻女子大学社会情報学部情報デザイン専攻 教授。著書に『Pythonライブラリの使い方』、『p5.jsプログラミングガイド』(カットシステム)、『学生のためのPython』(東京電機大学出版局)、『WebGL Programming Guide』(Addison-Wesley Professional)、訳書に『生成Deep Learning』、『詳解OpenCV3』、『行列プログラマー』(オライリー・ジャパン)、『デザインのためのデザイン』(ピアソン桐原)など多数。