【技術本】Pythonからはじめる数学入門
https://amzn.to/46L6dc2
【技術本】Pythonからはじめる数学入門
へポスト
Python3環境(Mac)にてプログラムを動作検証済み。
Pythonで数学計算用ライブラリとグラフ表示ライブラリなどを用いて下記を学ぶことができる。
[Pythonの技術的内容]
・コマンドラインからの入出力及び例外処理
・File入出力処理(データ読み込み用: txt, csv)
・Matplotlib:グラフ生成(折れ線、棒グラフ、ベン図など)ライブラリの利用
・SymPy:代数式計算、集合計算、微分積分などのライブラリの利用
[主な数学計算の公式orアルゴリズム]
・万有引力の法則
・投射運動(投射軌跡)
・フィナボッチ数列と黄金比の関係
・ピアソンの相関係数
・集合と確率
・幾何学図形とフラクタル
=>バーンスレイのシダ
=>シェルピンスキーの三角形
=>マンデルブロ集合
・初等解析
Pythonの言語仕様や使用する数学用ライブラリの仕様などを実践を踏まえて事細かに紹介しながら実装例を示している。
Pythonの技術的な事に関しては実践で利用するライブラリの使い方以外は基本的な機能利用に留めている。従って、Python初心者でも十分に習得できる内容だと感じた。
著書の中で出てくる数学の公式なども、基本的にグラフ化などの可視化を併せて行っているので、理解が及ばないという問題は極力回避できていると思う。
将来的にさらに高度な数学計算ライブラリの利用への足がかりとして、導入から勉強したい人にとって価値が出てくる著作だと感じた。
注意事項:
各章に章末課題が用意されているが、解答はサイトから取得できる。(ダウンロードのみ)
想定作業環境:windows,mac,linux
対応バージョン:Python 3.x
記載されている概要及び補足メモは以下の様です。
-------------------------------------
1: 数を扱う
Python IDLE shellで操作し、下記数学計算を行う。
※利用するFractionは標準ライブラリ
・四則演算、累乗、ルート、分数、複素数の計算
・2次方程式の計算
メモ:
・分数を扱う
>>>from fractions import Fraction
>>>Fraction(3,4) + 1 + Fraction(1/4)
Fraction(2, 1)
・複素数を扱う
>>>a = 2 + 3J
>>>a
(2+3j)
>>>a = complex(2,3)
>>>a
(2+3j)
・累乗
>>>2**24
16777216
・math.sqrt(4)
>>>4**0.5
2.0
-------------------------------------
2.データをグラフで可視化する
matplotlibライブラリでデカルト平面を使ったグラフを作る
メモ:matplotlibライブラリ
※付録A記載のpip install matplotlib-venn なら一発で全てインストールできたかもしれない
実行メモ:
pip install matplotlib
pip install pylab
pip install show
pip install stuf
※プログラム初動実行で
from pylab import plot,show行の処理の時点で、初回は初期化に数分かかる
グラフの保存
データ形式:PNG,PDF SVG
式のプロット
・万有引力の法則
・投射運動
・フィナボッチ数列と黄金比の関係
-------------------------------------
3.データを統計量で記述する
平均、中央値、最頻値
散らばりの程度
分散、標準偏差
ピアソンの相関係数:2つの数集合の性質と強さ示す統計量
matplotlibライブラリで散布図による可視化
pythonの基本のファイル入出力処理で計算用データを読み込む(付録Bに紹介あり)
・改行で分けられたテキスト
・CSV
-------------------------------------
4.SymPyで代数と式を計算する
・SymPy(サードパーティライブラリ)を使用した数値計算
>>>from sympy import Symbol
>>>x = Symbol('x')
>>>y = Symbol('y')
>>>s = x*y + x*y
>>>s
2*x*y
・factor()による式の因数分解
>>>from sympy import factor
>>>expr = x**2 - y**2
>>>factor(expr)
(x -y)*(x + y)
・expand()で因数分解した式を元の式に展開
・代数式に値を代入
>>>expr = x*x + x*y + x*y + y*y
>>>res = expr.subs({x:1,y:2})
>>>res
9
・打ち消す項がある場合の簡略化
simplify(expr)
・コマンドライン入力からの文字列を数式に変換
sympify(input_data)
・方程式を解く
solve(expr)
・解が複数ある場合辞書リストで受け取る方法
solve(expr, dict=True)
※複素数も解ける
・連立方程式
両辺がイコール0になるように片方の辺に寄せて整形してから計算
>>>from sympy import Symbol, solve
>>>x = Symbol('x')
>>>y = Symbol('y')
>>>expr1 = 2*x+3*y-6
>>>expr2 = 3*x+2*y-12
>>>solve((expr1,expr2), dict=True)
[{x:24/5, y:-6/5}]
正誤表p113
(3) [{x: -4}, {x: -1}]
=> (4) [{x: -4}, {x: -1}]
-------------------------------------
5.集合と確率を操作する
SymPy(サードパーティライブラリ)を使って下記計算を行う。
集合
・部分集合、上位集合、べき集合
・真部分集合、真上位集合
・集合演算
=>和、積、直積
確率
・サイコロの目の確率、複数事象の和の確率
※一様確率、一様乱数:同程度に出やすい
※非一様乱数:特定の値が出やすいように細工したもの
章末課題
集合をmatplotlibライブラリのベン図で可視化
インストールメモ:
pip install matplotlib_venn
-------------------------------------
6.幾何図形とフラクタルを描画する
matplotlibライブラリで計算結果の可視化
・アニメーション表示
=>投射軌跡など
・フラクタルの描画
=>バーンスレイのシダ
=>シェルピンスキーの三角形(章末課題)
=>マンデルブロ集合(章末課題)
など
-------------------------------------
7.初等解析問題を解く
関数の極限値を求める
関数の微分を求める:Derivative関数
高階微分と極大極小の計算
勾配上昇法を用いて最大値を求める
関数の積分を求める
確率密度関数
-------------------------------------
付録A ソフトウェアのインストール
-------------------------------------
付録B Pythonについて
以上。
へポスト