投稿者「fujiwara」のアーカイブ

ネイピア数の数値計算

PDFファイル

ネイピア数e=2.71828…を計算機で数値計算しました。使用したプログラミング言語はPythonで、試した計算方法は約20通りです。計算方法、ソースコード、出力結果をPDFファイルにまとめました。ネイピア数eは数学において普遍的な定数なので、今回紹介した計算方法以外にも数多くの手法があると思います。
PDFファイル

数値計算の様子

方法Bの出力結果

Pythonのプログラムは、数列を第1項, 第2項, 第3項,…と順に計算していきます。例として、方法Bの出力結果を示します。表の各行は数列の各項を表しており、01行目が数列の第1項, 02行目が数列の第2項, 03行目が数列の第3項,…となっています。数列の値は、小数点以下100桁を表示しました。数列の計算が進むにつれて、数列の値がネイピア数e=2.71828…に近づいていることが分かります。数列の各項で、ネイピア数eの真値に一致する部分を黄色で塗りました。したがって表の黄色部分の面積が広いほど、数列の収束速度が速いと言えます。

全計算手法の出力結果まとめ

次に, 全計算手法の出力結果まとめを示します。表の各行はそれぞれの手法に対応しており、上から方法A, 方法B, …, 方法Lとなっています。各手法の数列の第30項を記載しました。各手法で黄色部分の長さが全く異なります。つまり、手法によって収束速度が全く異なります。方法L及び方法Aの収束速度は遅いです。一方、方法F11及び方法Eの収束速度は速いです。

参考資料

下記のWikipediaの記事では、ネイピア数eに関する数式が数多く紹介されています。とても参考になりますが、出典が明記されていない箇所がいくらかあります。
https://en.wikipedia.org/wiki/List_of_representations_of_e

作成: 藤原大樹
更新: 2020年10月3日

アークタンジェント公式

PDFファイル

数学のアークタンジェント公式をイラスト化し、PDFファイルにまとめました。
PDFファイル

イラストの見方

例を用いてイラストの見方を説明します。上図では、アークタンジェント公式「pi/4 = arctan(1/2) + arctan(1/3)」をイラスト化しました。緑色と青色の2つの直角三角形があり、原点においてそれらの2つの内角の合計が角度pi/4になっています。緑色の直角三角形がarctan(1/2)に, 青色の直角三角形がarctan(1/3)にそれぞれ対応しています。

他のイラストも同じようにアークタンジェント公式を表しています。複数の直角三角形があり、それらの内角の合計が数式の左辺と右辺の値に一致しています。

アークタンジェント公式はタンジェントの加法定理を用いて代数的に確認できます。しかし、イラスト化することで視覚的な証明ができました。いわゆるProof Without Wordsです。

作成: 藤原大樹
更新: 2020年9月19日

 

定規とコンパスによる作図

はじめに

定規とコンパスを用いて幾何学的な図形を作図しています。数学用ソフトウェアのGeogebraを用いて、作図手順をPDFファイルにまとめました。

おすすめの作図技法

作図技法の中で特におすすめなのは、線分を3等分する技法の方法4(3つの円と2本の直線)です。

線分を3等分する

線分ABを3等分します。AF = AB / 3の関係が成立します。

・方法1, 4つの円と2本の直線
参考文献: Sutton(2009)の図94
PDF

・方法2, 2つの円と4本の直線
参考文献: Styer(2009), Nelsen(1993)の13ページ
PDF

・方法3, 2つの円と3本の直線
参考文献: Styer(2009)
PDF

・方法4, 3つの円と2本の直線
参考文献: Styer(2009)
PDF

・方法5, 4つの円
参考文献: Styer(2009)
PDF

・方法6, Mohr-Mascheroni
参考文献: Styer(2009)
PDF

線分を5等分する

・方法1
参考文献: Sutton(2009)の図95
線分ABを5等分します。CD = AB / 5の関係が成立します。
PDF

線分を8等分する

・方法1
参考文献: Sutton(2009)の図102
線分ABを8等分します。AF = AB / 8の関係が成立します。
PDF

正5角形

・方法1, 近似手法
参考文献: Posamentier(2003)の5.13節
線分ABを1辺とする正5角形を近似的に作図します。
PDF

参考文献

Nelsen, R. B. (1993). Proofs without words: exercises in visual thinking. Math. Assoc. of America.

Posamentier, A. S. (2003). Math wonders to inspire teachers and students. Association for Supervision and Curriculum Development.

Styer, R. (2009). Trisecting a Line Segment (With World Record Efficiency!). https://doi.org/10.4169/loci003342

Sutton, A. (2009). Ruler & compass: practical geometric constructions. Wooden.

作成: 藤原大樹
更新: 2020年8月19日

Pythonの文法

はじめに

プログラミング言語のPython(パイソン)を勉強しています。文法の中でややこしくて理解しずらいテーマが3点ありました。1点目はリストにおける代入とコピーの違い、2点目はミュータブルとイミュータブルの違い、3点目は浅いコピーと深いコピーの違いです。教科書の文章だけで理解しようとしても無理があるので、イラストでの説明を試みました。

3項目それぞれで、ソースコードは類似していてもプログラムの挙動は全く異なるという特徴があります。そこで、2つのソースコードを対比し、プログラムの挙動をイラストで表し、差異を明確にしました。イラストは、厳密なプログラムの挙動を表しているわけではありません。しかし、イラストとソースコードをじっくり見比べると、概要を把握できると思います。

ソースコードを読むときの注意点

Pythonにおいて、変数名はオブジェクトを指す名前です。変数はオブジェクトのデータを持たず、データのメモリ位置を持っています。したがって、ソースコードを読むとき、次の2点に注意する必要があります。1点目は、異なる変数名が同じオブジェクトを指す状況があることです。2点目は、ある変数を通してオブジェクトを変更すると、その影響が別の変数に出る場合と出ない場合の両方があることです。

オブジェクトはコンピュータのメモリ内に存在します。id(x)は、変数xが指すオブジェクトのメモリ位置を返します。メモリ位置は、オブジェクトがメモリ内のどの位置に存在するかを表す住所のようなものです。変数xとyに対して、id(x)とid(y)の値を比較することで、xとyが同じオブジェクトを指しているかいないかを判断できます。

リストにおける代入とコピー

「y = x」と「y = x[:]」は見た目が似ていますが、意味は全く異なります。代入文「y = x」の意味は、変数xが指すオブジェクトを変数yも指すようにするです。リストのコピー文「y = x[:]」の意味は、変数xが指すオブジェクトをコピーし、そのコピーされたオブジェクトをyが指すようにするです。

===== list_assign.py リストの代入 =====

===== list_assign.pyの出力 =====
===== list_copy.py リストのコピー =====

===== list_copy.pyの出力 =====

リストの代入(list_assign.py)
xとyは同じオブジェクトを指しています。x[2]を’cup’に変更すると、その影響がyに現れます。

リストのコピー(list_copy.py)
xの変更前からxとyは異なるオブジェクトを指しています。x[2]を’cup’に変更しても、yに影響しません。

ミュータブルとイミュータブル

オブジェクトの値を変更することが不可能なことを、イミュータブルといいます。イミュータブルなオブジェクトの例として、数値や文字列等があります。オブジェクトの値を変更することが許可されていることをミュータブルといいます。ミュータブルなオブジェクトの例として、リストや辞書型等があります。

===== mutable.py ミュータブル =====

===== mutable.pyの出力 =====
===== immutable.py イミュータブル =====

===== immutable.pyの出力 ====

ミュータブル(mutable.py)
リストはミュータブル(変更可能)です。 x[1]を変更しても、xとyは同じオブジェクトを指したままです。つまり、xを変更したことで、yに影響が出ます。

イミュータブル(immutable.py)
数値はイミュータブル(変更不能)です。xを変更すると、新しいオブジェクトが作成され、xはyと異なる新しいオブジェクトを指すようになります。つまり、xを変更しても、yに影響が出ません。

浅いコピーと深いコピー

浅いコピーと深いコピーはネスト構造のオブジェクトをコピーするときに重要になってきます。ネスト構造とは、リストの要素としてリストがあるなどの入れ子構造のことです。浅いコピーは、ネスト構造内の深さ1の浅い部分のみをコピーします。深いコピーは、ネスト構造の深い部分を含めたデータのすべてをコピーします。

リストの浅いコピーは、「y = x.copy()」,「y = list(x)」,「y = x[:]」,「y = x + []」, 「y = x * 1」で実現できます。一方、深いコピーは、copyモジュールを用いて「y = copy.deepcopy(x)」で実現できます。

===== shallow.py 浅いコピー =====

===== shallow.pyの出力 =====
===== deep.py 深いコピー =====

===== deep.pyの出力 =====

浅いコピー(shallow.py)
xとyで[2, 〇]の浅い部分はコピーされますが、[3, 4]の深い部分はコピーされません。そのため、x[0]の変更はyに影響しませんが、x[1]の変更はyに影響します。

深いコピー(deep.py)
xとyで[2, 〇]の浅い部分だけでなく、[3, 4]の深い部分もコピーされます。そのため、xを変更してもyに全く影響しません。

参考資料

喜多一著、プログラミング演習 Python 2019のPDFファイル
http://hdl.handle.net/2433/245698
本編の10.11節から10.13節まで及びコラム編の13.2節が参考になります。

作成: 藤原大樹
更新: 2020年7月3日

無料の学術書 数学とコンピュータサイエンスを中心として

はじめに

インターネット上で無料で公開されている学術書をまとめました。分野は数学とコンピュータサイエンスが中心です。このリンク集では、著者や出版社自らが内容を公開している公式ホームページを選定しました。個人使用の限りでは著作権の侵害にはならないので、安心して下さい。

なぜ学術書がインターネット上で無料で読めるのか? その理由は、「オープンアクセス」による出版です。オープンアクセスとは、学術情報をインターネットを通じて誰もが無料で閲覧可能な状態にすることです。(参考サイト[1] ) 個人や研究機関にとって学術論文・学術書が高価すぎるという問題を改善し、多くの人が学術情報を利用できるようにするため、オープンアクセスによる出版が推進されています。

参考サイト
[1] Eriko Amano, 学術書のオープンアクセスを考える

学術書のリンク集

書名: The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition
著者: Trevor Hastie, Robert Tibshirani, Jerome Friedman
出版社: Springer; 2nd edition (2016)
公式HP
ダウンロード
分野: 機械学習

書名: Understanding Machine Learning: From Theory to Algorithms
著者: Shai Shalev-Shwartz, Shai Ben-David
出版社: Cambridge University Press; 1 edition (May 19, 2014)
公式HP
ダウンロード
分野: 機械学習

書名: Mathematics for Machine Learning
著者: Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong
出版社: Cambridge University Press (April 23, 2020)
公式HP
ダウンロード
分野: 機械学習

書名: Geometry in Figures
著者: A. V. Akopyan
出版社: CreateSpace Independent Publishing Platform (August 1, 2011)
公式HP
ダウンロード
分野: 平面幾何学
コメント: first editionのみダウンロード可能.

書名: Discrete Choice Methods with Simulation
著者: Kenneth E. Train
出版社: Cambridge University Press; 2 edition (June 30, 2009)
公式HP
ダウンロード
分野: 経済学

書名: Automate the Boring Stuff with Python, 2nd Edition: Practical Programming for Total Beginners
著者: Al Sweigart
出版社: No Starch Press; 2 edition (November 12, 2019)
公式HP
分野: プログラミング言語のPython


書名: Elementary Number Theory: Primes, Congruences, and Secrets: A Computational Approach
著者: William Stein
出版社: Springer; 2009 edition (December 3, 2008)
公式HP
ダウンロード
分野: 初等整数論

書名: Introduction to Applied Linear Algebra: Vectors, Matrices, and Least Squares
著者: Stephen Boyd & Lieven Vandenberghe
出版社: Cambridge University Press; 1 edition (August 23, 2018)
公式HP
ダウンロード
分野: 線形代数とその応用

合計8冊を紹介しました。

作成: 藤原大樹
更新: 2020年4月18日