Pythonではじめる数学の冒険

―プログラミングで図解する代数、幾何学、三角関数

[cover photo]
TOPICS
Math , Python
発行年月日
PRINT LENGTH
380
ISBN
978-4-87311-930-4
原書
Math Adventures with Python
FORMAT
Print PDF
Ebook
3,300円
Ebookを購入する
Print
3,300円

数学を8年間、コンピュータサイエンスを3年間教えたことのある著者が、自らの経験に基づき、これからの時代に必要な数学とプログラミングの能力を身につけてもらいたいと筆をとった意欲作。定義や命題から入る伝統的なアプローチではなく、プログラミングによる視覚的アプローチで直感的な理解を促します。数学の視点からプログラミングを眺め、また逆にプログラミングの視点から数学を眺めることで、退屈な計算問題は、さまざまな工夫が可能なプログラミングの課題になり、プログラミングの文法は、数学の問題を解く上での強力な武器となり、それぞれの新たな魅力に気づかされるきっかけとなります。代数、幾何学、三角関数などの高校レベルの数学を使った数多くの例題を盛り込み、実際にProcessingでPythonプログラムを動かしながら、AI時代に求められる数学の能力を磨いていきます。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

p238、例9-18、下から


【誤】
for x  in range(0, width, patchSize):
for y in range(0, height, patchSize):
grassList.append(Grass(x,y,patchSize))

【正】インデントを追加
for x in range(0, width, patchSize):
    for y in range(0, height, patchSize):
        grassList.append(Grass(x, y, patchSize))

p255、例10-3


【誤】
def y(sz,level):
    if level > 0:
        line(0,0,0,-sz)
        translate(0,-sz)
        rotate(radians(angle))
        y(0.8 * sz, level - 1) #右の枝
        rotate(radians(-2 * angle))
        y(0.8 * sz, level - 1) #左の枝
        rotate(radians(angle))
        translate(0,sz)

【正】
def y(sz,level):
    if level > 0:
        line(0,0,0,-sz)
        translate(0,-sz)
        angle =30
        rotate(radians(angle))
        y(0.8 * sz, level - 1) #右の枝
        rotate(radians(-2 * angle))
        y(0.8 * sz, level - 1) #左の枝
        rotate(radians(angle))
        translate(0,sz)

目次

謝辞
はじめに

I部 Pythonを始めよう!

1章 turtleモジュールを使って多角形を描く
    1.1 Pythonのturtleモジュール
        1.1.1 turtleモジュールをインポートする
        1.1.2 カメを動かす
        1.1.3 向きを変更する
    1.2 ループを使ってコードを繰り返す
        1.2.1 forループを使う
        1.2.2 forループを使って四角形を描く
    1.3 関数を作ってショートカットする
    1.4 変数を使って図形を描く
        1.4.1 関数内で変数を使う
        1.4.2 変数エラー
    1.5 正三角形
        1.5.1 triangle()関数を作成する
        1.5.2 変数の値を変更する
    1.6 まとめ

2章 退屈な計算をリストとループで楽しくしよう
    2.1 基本の演算子
        2.1.1 変数に対する演算
        2.1.2 演算子を使ってaverage()関数を作る
        2.1.3 演算子の順番に注意!
        2.1.4 演算子と括弧を組み合わせる
    2.2 Pythonのデータ型
        2.2.1 整数と浮動小数点数
        2.2.2 文字列
        2.2.3 ブール値
        2.2.4 データ型の確認
    2.3 リストを使って値を保存する
        2.3.1 リストに項目を追加する
        2.3.2 リストに対する操作
        2.3.3 リストから項目を削除する
    2.4 ループ内でリストを使う
        2.4.1 リストのインデックスを使って要素を操作する
        2.4.2 enumerate()を使ってインデックスと値にアクセスする
        2.4.3 0から始まるインデックス
        2.4.4 リスト内の特定範囲の項目にアクセスする
        2.4.5 項目のインデックスを検索する
        2.4.6 文字列にもインデックスを使う
    2.5 総和
        2.5.1 総和変数を作成する
        2.5.2 mySum()関数を作成する
    2.6 リスト内の数字の平均を計算する
    2.7 まとめ

3章 条件分岐を使って予想・確認する
    3.1 比較演算子
    3.2 if/else文を使った判定
    3.3 条件文を使って約数を見つける
        3.3.1 factors.pyプログラムを作成する
        3.3.2 這い回るカメ
    3.4 数当てゲームを作成する
        3.4.1 乱数生成器を作成する
        3.4.2 ユーザーからの入力を受け取る
        3.4.3 ユーザーの入力を整数に変換する
        3.4.4 条件分岐を使って予想が当たったかどうか判定する
        3.4.5 ループを使って繰り返し推測する!
        3.4.6 推測のコツ
    3.5 平方根を見つける
        3.5.1 数当てゲームのロジックを応用する
        3.5.2 squareRoot関数を作成する
    3.6 まとめ

II部 数学の地に踏み込む

4章 代数を使った数の変換や保存
    4.1 1次方程式を解く
        4.1.1 1次方程式の解の公式を見つける
        4.1.2 equation()関数を作成する
        4.1.3 値を返す代わりに解をprint()で表示する
    4.2 高次方程式を解く
        4.2.1 quad()関数を使って2次方程式を解く
        4.2.2 plug()関数を使って3次方程式を解く
    4.3 方程式をグラフィカルに解く
        4.3.1 Processingの基本
        4.3.2 独自のグラフツールを作成する
        4.3.3 方程式をグラフ表示する
        4.3.4 数当ての要領で根を見つける
        4.3.5 guess()関数の作成
    4.4 まとめ

5章 幾何学で図形を変換する
    5.1 円を描く
    5.2 座標を使って位置を特定する
    5.3 変換用の関数
        5.3.1 translate()によるオブジェクトの移動
        5.3.2 rotate()を使ってオブジェクトを回転させる
        5.3.3 円からなる円を描く
        5.3.4 四角形を円周上に描く
    5.4 オブジェクトをアニメーションさせる
        5.4.1 変数tを作成する
        5.4.2 それぞれの四角形を回転させる
        5.4.3 pushMatrix()とpopMatrix()を使って方向を保存する
        5.4.4 中央を中心に回転する
    5.5 インタラクティブな虹色のグリッドを作る
        5.5.1 オブジェクトのグリッドを描く
        5.5.2 オブジェクトに虹色を付ける
    5.6 三角形を使って複雑な図形を描く
        5.6.1 30-60-90度からなる三角形
        5.6.2 正三角形を描く
        5.6.3 複数の回転する三角形を描く
        5.6.4 回転をフェーズシフトする
        5.6.5 デザインの最終形
    5.7 まとめ

6章 三角関数で振動を作る
    6.1 三角法を使って回転・振動させる
    6.2 多角形を描く関数を作る
        6.2.1 ループを使って六角形を描く
        6.2.2 正三角形を描く
    6.3 正弦波を作る
        6.3.1 跡を残す
        6.3.2 Pythonの組み込み関数enumerate()を使う
    6.4 スピログラフプログラムを作る
        6.4.1 小さい円を描く
        6.4.2 小さい円を回転させる
    6.5 ハーモノグラフを作る
        6.5.1 ハーモノグラフプログラムを作る
        6.5.2 リストを一度に埋める
        6.5.3 1つよりも2つの振り子
    6.6 まとめ

7章 複素数
    7.1 複素座標系
    7.2 複素数の足し算
    7.3 複素数にiを掛ける
    7.4 複数の複素数の掛け算
    7.5 magnitude()関数を作る
    7.6 マンデルブロ集合を作る
        7.6.1 mandelbrot()関数を作る
        7.6.2 マンデルブロ集合に色を付ける
    7.7 ジュリア集合を作る
        7.7.1 julia()関数を作る
    7.8 まとめ

8章 コンピュータグラフィックスや方程式の解法に行列を応用する
    8.1 行列とは?
    8.2 行列の足し算
    8.3 行列の掛け算
    8.4 行列の掛け算における順序
    8.5 2次元の図形を描く
    8.6 変換行列
    8.7 転置行列
    8.8 リアルタイムに行列で回転させる
    8.9 3次元画像を作る
    8.10 回転行列を作る
    8.11 行列を使って連立方程式を解く
        8.11.1 ガウスの消去法
        8.11.2 gauss()関数を作る
    8.12 まとめ

III部 これまでの学習内容の発展

9章 クラスを使ったオブジェクトの作成
    9.1 飛び回るボールのプログラム
        9.1.1 ボールを動かす
        9.1.2 ボールが壁で跳ね返るようにする
        9.1.3 クラスを使わずに複数のボールを作る
        9.1.4 クラスを使ってオブジェクトを作る
    9.2 食事する羊のプログラム
        9.2.1 羊を表すクラスを作成する
        9.2.2 羊が動き回るようにプログラムする
        9.2.3 体力プロパティを作る
        9.2.4 牧草をクラスとして定義する
        9.2.5 食べ終わった牧草を茶色にする
        9.2.6 羊の色をランダムにする
        9.2.7 羊が繁殖するようにする
        9.2.8 牧草が生え替わるようにする
        9.2.9 進化的な優勢を付ける
    9.3 まとめ

10章 再帰を使ってフラクタルを作る
    10.1 海岸線の長さ
        10.1.1 再帰とは?
        10.1.2 factorial()関数を作る
        10.1.3 フラクタルツリーを作る
    10.2 コッホ雪片
        10.2.1 segment()関数を作る
    10.3 シェルピンスキーの三角形
    10.4 四角形のフラクタル
    10.5 ドラゴン曲線
    10.6 まとめ

11章 セルオートマトン
    11.1 セルオートマトンを作る
        11.1.1 Cellクラスを作る
        11.1.2 セルのサイズを変更する
        11.1.3 CAを成長させる
        11.1.4 セルを行列内に置く
        11.1.5 セルのリストを作る
    11.2 Pythonのリストの不思議
        11.2.1 リストのインデックス記法
        11.2.2 CAを自動的に成長させる
    11.3 ライフゲームで遊ぶ
    11.4 初歩的なセルオートマトン
    11.5 まとめ

12章 遺伝的アルゴリズムで問題を解く
    12.1 遺伝的アルゴリズムで文章を推測する
        12.1.1 makeList()関数を作る
        12.1.2 makeList()関数をテストする
        12.1.3 score()関数を作る
        12.1.4 mutate()関数を作る
        12.1.5 乱数を生成する
    12.2 巡回セールスマン問題を解く
        12.2.1 遺伝的アルゴリズムを使う
        12.2.2 calcLength()関数を作る
        12.2.3 calcLength()メソッドの動作確認
        12.2.4 ランダムな経路
        12.2.5 メッセージ予想プログラムのテクニックを応用する
        12.2.6 2つの数のリストを交配させる
        12.2.7 経路を改善するために交配させる
    12.3 まとめ

索引