预购商品
书目分类
特别推荐
代碼和數學是相知相惜的好夥伴,它們基於共同的理性思維,數學公式的推導可以自然地在編寫代碼的過程中展開。本書帶領程序員使用自己熟知的工具,即代碼,來理解機器學習和遊戲設計中的數學知識。通過Python代碼和200多個小項目,讀者將掌握二維向量、三維向量、矩陣變換、線性方程、微積分、線性回歸、logistic回歸、梯度下降等知識。
第1章 通過代碼學數學 1 1.1 使用數學和軟體解決商業問題 2 1.1.1 預測金融市場走勢 2 1.1.2 尋找優質交易 4 1.1.3 構建三維圖形和動畫 6 1.1.4 對物理世界建模 8 1.2 如何高效學習數學 9 1.2.1 Jane想學習數學 9 1.2.2 在數學課本中苦苦掙扎 10 1.3 用上你訓練有素的左腦 11 1.3.1 使用正式的語言 11 1.3.2 構建你自己的計算器 12 1.3.3 用函數建立抽象概念 13 1.4 小結 14 第一部分 向量和圖形 第2章 二維向量繪圖 16 2.1 二維向量繪圖 16 2.1.1 如何表示二維向量 18 2.1.2 用Python繪製二維圖形 20 2.1.3 練習 23 2.2 平面向量運算 25 2.2.1 向量的分量和長度 28 2.2.2 向量與數相乘 29 2.2.3 減法、位移和距離 31 2.2.4 練習 34 2.3 平面上的角度和三角學 41 2.3.1 從角度到分量 42 2.3.2 Python中的三角學和弧度 46 2.3.3 從分量到角度 47 2.3.4 練習 50 2.4 向量集合的變換 57 2.4.1 組合向量變換 59 2.4.2 練習 60 2.5 用Matplotlib繪圖 61 2.6 小結 62 第3章 上升到三維世界 63 3.1 在三維空間中繪製向量 64 3.1.1 用座標表示三維向量 66 3.1.2 用Python進行三維繪圖 66 3.1.3 練習 68 3.2 三維空間中的向量運算 70 3.2.1 添加三維向量 70 3.2.2 三維空間中的標量乘法 72 3.2.3 三維向量減法 72 3.2.4 計算長度和距離 73 3.2.5 計算角度和方向 74 3.2.6 練習 75 3.3 點積:測量向量對齊 78 3.3.1 繪製點積 78 3.3.2 計算點積 80 3.3.3 點積的示例 82 3.3.4 用點積測量角度 83 3.3.5 練習 85 3.4 向量積:測量定向區域 88 3.4.1 在三維空間中確定自己的朝向 88 3.4.2 找到向量積的方向 89 3.4.3 求向量積的長度 91 3.4.4 計算三維向量的向量積 92 3.4.5 練習 93 3.5 在二維平面上渲染三維物件 96 3.5.1 使用向量定義三維物件 97 3.5.2 二維投影 98 3.5.3 確定面的朝向和陰影 99 3.5.4 練習 101 3.6 小結 102 第4章 變換向量和圖形 103 4.1 變換三維物件 105 4.1.1 繪製變換後的對象 105 4.1.2 組合向量變換 107 4.1.3 繞軸旋轉對象 110 4.1.4 創造屬於你自己的幾何變換 113 4.2 線性變換 117 4.2.1 向量運算的不變性 117 4.2.2 圖解線性變換 119 4.2.3 為什麼要做線性變換 121 4.2.4 計算線性變換 124 4.2.5 練習 127 4.3 小結 132 第5章 使用矩陣計算變換 134 5.1 用矩陣表示線性變換 135 5.1.1 把向量和線性變換寫成矩陣形式 135 5.1.2 矩陣與向量相乘 136 5.1.3 用矩陣乘法組合線性變換 138 5.1.4 實現矩陣乘法 140 5.1.5 用矩陣變換表示三維動畫 141 5.1.6 練習 142 5.2 不同形狀矩陣的含義 148 5.2.1 列向量組成的矩陣 149 5.2.2 哪些矩陣可以相乘 151 5.2.3 將方陣和非方陣視為向量函數 152 5.2.4 從三維到二維的線性映射投影 154 5.2.5 組合線性映射 156 5.2.6 練習 157 5.3 用矩陣平移向量 163 5.3.1 線性化平面平移 163 5.3.2 尋找做二維平移的三維矩陣 167 5.3.4 在四維世界裡平移三維物件 170 5.4 小結 174 第6章 高維泛化 176 6.1 泛化向量的定義 177 6.1.1 為二維座標向量創建一個類 178 6.1.3 使用同樣的方法定義三維向量 179 6.1.4 構建向量基類 180 6.1.5 定義向量空間 182 6.1.6 對向量空間類進行單元測試 185 6.2 探索不同的向量空間 188 6.2.1 枚舉所有座標向量空間 188 6.2.2 識別現實中的向量 190 6.2.3 將函數作為向量處理 192 6.2.4 將矩陣作為向量處理 194 6.2.5 使用向量運算來操作圖像 195 6.2.6 練習 198 6.3 尋找 小的向量空間 205 6.3.1 定義子空間 205 6.3.2 從單個向量開始 207 6.3.3 生成 大的空間 207 6.3.4 定義“維度”的概念 209 6.3.5 尋找函數向量空間的子空間 210 6.3.6 圖像的子空間 212 6.3.7 練習 214 6.4 小結 220 第7章 求解線性方程組 222 7.1 設計一款街機遊戲 223 7.1.1 遊戲建模 223 7.1.2 渲染遊戲 224 7.1.3 發射鐳射 225 7.1.4 練習 226 7.2 找到直線的交點 227 7.2.1 為直線選擇正確的公式 227 7.2.2 直線的標準形式方程 229 7.2.3 線性方程組的矩陣形式 231 7.2.4 使用NumPy求解線性方程組 233 7.2.6 識別不可解方程組 234 7.2.7 練習 236 7.3 將線性方程泛化到 高維度 240 7.3.1 在三維空間中表示平面 240 7.3.2 在三維空間中求解線性方程組 243 7.3.4 計算維數、方程和解 245 7.3.5 練習 246 7.4 通過解線性方程來改變向量的基 253 7.4.1 在三維空間中求解 255 7.4.2 練習 256 7.5 小結 257 第二部分 微積分和物理模擬 第8章 理解變化率 261 8.1 根據體積計算平均流速 262 8.1.1 實現average_flow_rate函數 263 8.1.2 用割線描繪平均流速 264 8.1.3 負變化率 265 8.1.4 練習 266 8.2 繪製隨時間變化的平均流速 266 8.2.1 計算不同時間段內的平均流速 267 8.2.2 繪製間隔流速圖 268 8.2.3 練習 270 8.3 暫態流速的近似值 271 8.3.1 計算小割線的斜率 272 8.3.2 構建暫態流速函數 274 8.3.3 柯裡化並繪製暫態流速函數 277 8.4 體積變化的近似值 278 8.4.1 計算短時間間隔內的體積變化 279 8.4.2 將時間分割成 小的間隔 280 8.4.3 在流速圖上繪製體積變化的圖形 280 8.4.4 練習 283 8.5 繪製隨時間變化的體積圖 283 8.5.1 計算隨時間變化的體積 283 8.5.2 繪製體積函數的黎曼和 285 8.5.3 提升近似結果的 度 286 8.5.4 定積分和不定積分 288 8.6 小結 290 第9章 類比運動的物件 291 9.1 模擬勻速運動 291 9.1.1 給小行星設置速度 292 9.1.2 新遊戲引擎,讓小行星運動 292 9.1.3 保持小行星在螢幕上 293 9.1.4 練習 295 9.2 類比加速 295 9.3 深入研究歐拉方法 296 9.3.1 手動計算歐拉方法 297 9.3.2 使用 Python 實現演算法 298 9.4 用 小的時間步執行歐拉方法 300 9.5 小結 305 第10章 使用符號運算式 306 10.1 用計算機代數系統計算 的導數 309 10.2.1 將運算式拆分成若干部分 310 10.2.3 使用Python語言實現運算式樹 311 10.2.4 練習 313 10.3 符號運算式的應用 315 10.3.1 尋找運算式中的所有變數 317 10.3.3 運算式展開 319 10.3.4 練習 321 10.4 求函數的導數 323 10.4.1 冪的導數 324 10.4.2 變換後函數的導數 324 10.4.3 一些特殊函數的導數 326 10.4.4 乘積與組合的導數 327 10.4.5 練習 328 10.5 自動計算導數 330 10.5.1 實現運算式的導數方法 330 10.5.2 實現乘積法則和鏈式法則 332 10.5.4 練習 334 10.6 符號化積分函數 335 10.6.1 積分作為反導數 335 10.6.2 SymPy庫介紹 336 10.6.3 練習 337 10.7 小結 338 第11章 模擬力場 339 11.1 用向量場對引力建模 339 11.2 引力場建模 342 11.2.1 定義一個向量場 343 11.2.2 定義一個簡單的力場 344 11.3 把引力加入小行星遊戲 345 11.3.1 讓遊戲中的物件感受到引力 346 11.3.2 練習 349 11.4 引入勢能 350 11.4.1 定義勢能標量場 351 11.4.2 將標量場繪製成熱圖 352 11.4.3 將標量場繪製成等高線圖 354 11.5.1 用橫截面測量陡度 354 11.5.2 計算偏導數 356 11.5.3 用梯度求圖形的陡度 357 11.5.4 用勢能的梯度計算力場 359 11.5.5 練習 361 11.6 小結 364 第12章 優化物理系統 365 12.1 測試 彈模擬器 367 12.1.1 用歐拉方法建立模擬器 368 12.1.2 測量彈道的屬性 369 12.1.3 探索不同的發射角度 370 12.1.4 練習 371 12.2 計算 射程 373 12.2.1 求 彈射程關於發射角的函數 373 12.2.2 求 射程 376 12.2.3 確定 值和 小值 378 12.2.4 練習 379 12.3 增強模擬器 381 12.3.1 添加另一個維度 381 12.3.2 在 彈周圍建立地形模型 383 12.3.4 練習 386 12.4 利用梯度上升優化範圍 388 12.4.1 繪製射程與發射參數的關係圖 388 12.4.2 射程函數的梯度 389 12.4.3 利用梯度尋找上坡方向 390 12.4.4 實現梯度上升 392 12.4.5 練習 395 12.5 小結 399 第13章 用傅裡葉級數分析聲波 400 13.1 聲波的組合和分解 401 13.2 用Python播放聲波 402 13.2.1 產生第 一個聲音 402 13.2.2 演奏音符 405 13.2.3 練習 406 13.3 把正弦波轉化為聲音 406 13.3.1 用正弦函數製作音訊 406 13.3.2 改變正弦函數的頻率 408 13.3.3 對聲波進行採樣和播放 409 13.3.4 練習 411 13.4 組合聲波得到新的聲波 412 13.4.1 疊加聲波的樣本來構造和絃 412 13.4.2 兩個聲波疊加後的圖形 413 13.4.3 構造正弦波的線性組合 414 13.4.4 用正弦波構造一個熟悉的函數 416 13.4.5 練習 419 13.5 將聲波分解為傅裡葉級數 419 13.5.1 用內積確定向量分量 420 13.5.2 定義週期函數的內積 421 13.5.3 實現一個函數來計算傅裡葉係數 423 13.5.4 求方波的傅裡葉係數 424 13.5.5 其他波形的傅裡葉係數 424 13.5.6 練習 426 13.6 小結 428 第三部分 機器學習的應用 第14章 數據的函數擬合 431 14.1 衡量函數的擬合品質 433 14.1.1 計算數據與函數的距離 434 14.1.2 計算誤差的平方和 436 14.1.3 計算汽車價格函數的代價 440 14.2 探索函數空間 441 14.2.1 繪製通過原點的直線的代價 442 14.2.2 所有線性函數的空間 443 14.2.3 練習 445 14.3 使用梯度下降法尋找 擬合線 445 14.3.1 縮放數據 445 14.3.2 找到並繪製 擬合線 446 14.3.3 練習 447 14.4 非線性函數擬合 448 14.4.1 理解指數函數的行為 448 14.4.2 尋找 擬合的指數函數 451 14.5 小結 453 第15章 使用logistic回歸對數據分類 455 15.1 用真實數據測試分類函數 456 15.1.1 載入汽車數據 457 15.1.2 測試分類函數 458 15.1.3 練習 458 15.2 繪製決策邊界 460 15.2.1 繪製汽車的向量空間 460 15.2.2 繪製 好的決策邊界 461 15.2.3 實現分類函數 462 15.2.4 練習 463 15.3 將分類問題構造為回歸問題 464 15.3.1 縮放原始汽車數據 464 15.3.2 衡量汽車的“寶馬性” 465 15.3.3 sigmoid函數 467 15.3.4 將sigmoid函數與其他函數組合 468 15.3.5 練習 470 15.4 探索可能的logistic函數 471 15.4.1 參數化logistic函數 472 15.4.2 衡量logistic函數的擬合品質 472 15.4.3 測試不同的logistic函數 474 15.4.4 練習 475 15.5 尋找 logistic函數 477 15.5.1 三維中的梯度下降法 477 15.5.2 使用梯度下降法尋找 擬合 478 15.5.3 測試和理解 logistic分類器 479 15.5.4 練習 481 15.6 小結 483 第16章 訓練神經網路 484 16.1 用神經網路對數據進行分類 485 16.2 手寫數位圖像分類 486 16.2.1 構建64維圖像向量 487 16.2.2 構建亂數字分類器 488 16.2.3 測試數字分類器的表現 489 16.2.4 練習 490 16.3 設計神經網路 491 16.3.1 組織神經元和連接 492 16.3.2 神經網路數據流 492 16.3.3 計算啟動值 495 16.3.4 用矩陣標記法計算啟動值 498 16.4 用Python構建神經網路 499 16.4.1 用Python實現MLP類 500 16.4.2 評估MLP 502 16.4.3 測試MLP的分類效果 503 16.4.4 練習 504 16.5 使用梯度下降法訓練神經網路 504 16.5.1 將訓練構造為 小化問題 505 16.5.3 使用scikit-learn自動訓練 507 16.6 使用反向傳播計算梯度 509 16.6.1 根據 一層的權重計算代價 509 16.6.2 利用鏈式法則計算 一層權重的偏導數 510 16.6.3 練習 512 16.7 小結 513 附錄A 準備Python(圖靈社區下載) 附錄B Python技巧和竅門(圖靈社區下載) 附錄C 使用OpenGL和PyGame載入和渲染三維模型(圖靈社區下載) 附錄D 數學符號參考(圖靈社區下載)
保羅·奧蘭德(Paul Orland) 矽谷創業公司Tachyus的聯合創始人兼CEO,擁有耶魯大學數學學士學位和華盛頓大學物理學碩士學位,曾任微軟公司軟體發展工程師,近10年來一直致力於使用數學和函數式程式設計來優化能源生產。
客服公告
热门活动
订阅电子报