準備
使用したPythonのバージョンは3.5.1です。パッケージとしてnumpy・(scipy・)matplotlib・sympyをインストールすると便利ですが、今回は使用しません。
LinuxでパッケージでPythonをインストールした場合は同じくパッケージからインストールできます。それ以外の人はpipを使用します。(Windowsの場合は予め管理者権限でコマンドプロンプト・パワーシェルを起動し、pipでwheelパッケージをインストール(pip install wheel
)します。pipでのインストールに失敗する場合には https://pypi.python.org/pypi/wheel/ からPythonのアーキテクチャ(32/64ビット)・バージョンに合ったwheelを予めダウンロードしてから「pip install
」に食わせてください)
関数電卓代わりに使用する
Unix系の場合は端末から起動します。(python3
)
Windowsの場合はパスさえ通せばコマンドプロンプト・パワーシェルから起動できますが、鷗などShift-JISにない文字列が使用できません。
まずは基本的な演算です。
>>> 1 + 1
2
>>> 2**3
8
>>> 1/2
0.5
>>> 1 % 2
1
>>> 5 % 3
2
>>> 0.5 * 0.25
0.125
変数の設定・使用・削除は次のようになります。
>>> x = 5
>>> x ** 2
25
>>> del(x)
次に各種関数を使用します。
まず、
$\sin \frac{\pi}{4}$
を求めてみます。
>>> import math as MT
>>> MT.sin(MT.pi * 0.25)
0.7071067811865476
次に、610!を求めてみます。
$n! = \prod_{k=1}^n k = \prod_{k=2}^n k\qquad(n \geq 2)$
の両辺に常用対数を取って
$\log_{10} n! = \sum_{k=2}^n \log_{10} k$
$n = 610$を代入して
$\log_{10} 610! = \sum_{k=2}^610 \log_{10} k$
610!をそのまま求めると桁数がヤバイことになるので、$a\times 10^b\quad(1\leq a < 10 \wedge b \in \mathbb{Z})$の係数で求めます。
$610! = a \times 10^b $
の両辺に常用対数を取って
$\log_{10} 610! =\log_{10} a + b$
$0 \leq \log_{10} a < 1 \wedge b \in \mathbb{Z}$から、
$\begin{cases}
\log_{10} a & = \log_{10} 610! - \lfloor\log_{10} 610!\rfloor\newline
b & = \lfloor\log_{10} 610!\rfloor
\end{cases}$
すなわち、
$\begin{cases}
a & = 10^{\log_{10} 610! - \lfloor\log_{10} 610!\rfloor}\newline
b & = \lfloor\log_{10} 610!\rfloor
\end{cases}$
となります。
これをPythonに書き下すと次のようになります。
>>> val = 0
>>> for i in range(2,611):
val += MT.log10(i)
>>> print("610! = ", 10 ** (val - MT.floor(val)), "×10^", MT.floor(val), sep = "")
610! = 8.382616099017579×10^1435
うわ~マクドボッタクリだ~(棒読み)
numpy・scipy・sympy・matplotlib
numpy・scipyを使用すると行列・ベクトル演算をはじめさらに高度なことができます。(e.g. numpy.array
)
また、sympyは変数式の変形・方程式の求解などができます。(e.g. sympy.symbols
)
matplotlibはグラフの描画ができます。すなわちgnuplotの仕事を奪えます。