Amit Saha :Python からはじめる数学入門

いろいろ難しい数学

作成日:2021-05-28
最終更新日:

概要

原書の副題は“Use Programming to Explore Algebra, Statistics, Calculus and More!”

感想

この本は対話環境として Idle を用いているが、私は JupyterLab を使って本書の例を試した。 両者による決定的な違いはないはずだ。

1章は「数を扱う」という表題だ。この最初の章から、いろいろな問題が出てくる。 まず p.3 で、Python では普通に、括弧、指数、掛け算、割り算、足し算、引き算の順序で演算を行います。 とある。そしてこの文には訳注があり、PEMDAS rule と言う。とある。 ウーム、この叙述は問題がある。というのも、掛け算と割り算には順序の序列はない。掛け算と割り算があれば、 左から順に行われる。足し算と引き算の関係も同様だ。だから、ここでは、 括弧、指数、掛け算・割り算、足し算・引き算とするのがいいだろう。もし、掛け算を割り算より先に計算するのであれば、
5 / 5 * 5
は 0.2 になるはずだが、一般の計算では当然 5 だし、Python の計算でも 5.0 である。 訳注には、このことを入れてほしかった。

p.19 では、25.5 インチをメートルに変換するために、次の計算を表示している。

>>> (25.5 * 2.54) / 100
0.6476999999999999

もし誰かが、「なぜ答が 0.6477 じゃないんですか」と尋ねたら、どのように答えたらいいのだろうか。 計算機における数値の内部表現と誤差のことを解説すべきなのだろうか。

2章は「データをグラフで可視化する」という表題だ。この章にも、いちゃもんをつけよう。 p.44 の図は、ニューヨーク市の月平均気温を表す折れ線グラフに軸の説明ラベルと題名を追加した結果を示している。もちろん、 何も追加しないよりいい。しかし、縦軸に Temperature とだけあるのは解せない。 Temperature (℉) とすべきだろう。グラフを見ると、1月の寒い時でも気温が 30 以上, 7月の暑いときには気温が 80 近くなっていると、「ニューヨークも地球温暖化でここまで暑くなったか」 と(少なくとも日本の単位系で暮らしている人は)驚くだろう。もちろん、 この数値は華氏であることを表している。私はここに、アメリカ合衆国に住む人の傲慢さを感じる。 こう書いたら、著者はオーストラリアのブリスベンに住んでいることがわかった(p.139)。 訂正すべきなのだろうが、傲慢さを感じることに変わりはない。

3章の表題は「データを統計量で記述する」である。いろいろと突っ込みたいところはあるが、 「アンスコムの4つ組の散布図」を知っただけでよしとしよう。

4章は「Sympy で代数と式を計算する」という表題だ。代数を計算するという表現がどうにもしっくりこない。 計算代数ということばなら気にならないのは、なぜだろう。
ところで p.114 に次の式がある。初速度が `u` で一定の加速度 `a` で `t` 時間異動する物体の移動距離 `s` の式である。
`s = ut + 1/2 at^2`
この式は問題ない。さて、`s, u, a` が与えられたとして、`t` を求める式は何か。p.115 ではこうなっている
`[{t:1/a(-u+sqrt(2.0as + u^2))}, {t:-1/a(u+sqrt(2.0as + u^2))}]`
わたしの環境ではこうなった。
`[{t:1/a(-u+ 1.4142135623731⋅sqrt(a⋅s + 0.5⋅u^2))}, {t:-1/a(u+1.4142135623731⋅sqrt(a⋅s + 0.5⋅u^2))}]`
私の環境では、sympy のバージョンは 1.8 だった。本書の結果のほうが美しい。

5章は「集合と確率を操作する」という表題である。たいしたことはない突っ込みだが、 地球上の重力加速度を表す定数について、本書は、 重力加速度の異なる3つの値{9.8, 9.78, 9.83}について結果を計算することを意味します。 としている。9.78 (m/s2) は赤道上の値、 9.83 (m/s2)は北極での値である。では9.8はどこの値か。まあ、どこの値でもいいが、 実測値として扱うのが普通だろうから有効数字を明らかにする意味で 9.80 としてほしい。

6章は「幾何図形とフラクタルを描画する」というタイトルだ。 いくつもコードがあるが、図形を描くときのモジュールの読み込みが
import matplotlib.pyplot as plt
と書かれているのもあれば、 from matplotlib import pyplot as plt
と書かれているのもあり、どちらがいいのかわからない。 検索するとどちらでもいいようだ。だとすれば、どちらかに統一してくれれば迷わずにすむのに、と思う。

7章は「初等解析問題を解く」という表題である。ここでは数学が主体なので、 細かなことは言うべきではないだろうが言いたくなった。

p.218 で次の値 `I` を計算している。

`I = int_11^12p(x)dx`
ここで `p(x) = 1 / sqrt(2pi) e^(-{:(x-10)^2:}/2)`

本書ではこの式通り数値積分を sympy の Integral を用いて計算している。 もちろんこれでもいいのだが、 数値積分を表に出さずに、
>>> from scipy import stats
>>> stats.norm.cdf(x=12.0, loc=10) - stats.norm.cdf(x=11.0, loc=10)
0.13590512198327787
とすることもできる。scipy.stats は統計関係のモジュールで、 stats.norm.cdf は、正規分布関数の累積分布関数 (Cumulative distribution function) である。 引数は、cdf(x, loc=0, scale=1) である。 これは、確率変数 X がある値 x 以下となる確率を計算する。loc は期待値であり、 デフォルトは 0 である。今回は平均が 10 の確率分布関数なので、平均は 10 とする。 scale は標準偏差であり、ここでは 1 であるから、デフォルトで問題ない。上記では省いている。

そのほか

Python についての本も参照のこと。

書誌情報

書 名Python からはじめる数学入門
著 者Amit Saha
訳 者黒川 利明
発行日2016 年 5 月 20 日 初版第1刷
発行所オライリー・ジャパン
発売元オーム社
定 価2800 円(税別)
サイズ
ISBN978-4-87311-768-3
その他越谷市立図書館で借りて読む
NDC

まりんきょ学問所コンピュータの部屋数学の部屋数学の本 > Amit Saha:Python からはじめる数学入門


MARUYAMA Satosi