付録 C — 関数
本章では,数学における関数を定義し,プログラミングにおける関数の使い方を学ぶ.さらに,絶対値,指数,対数,床関数と天井関数を扱う.
Python の関数の定義や条件分岐には,チャプター 2 で学んだ書き方を用いる.
C.1 関数の定義
A と B を集合とするとき,関数(function)f は,A の各要素に対して B の要素をただ一つ対応させる規則であり,
f: A \to B
と書く.
例 C.1 A = \{1, 2, 3\},B = \{4, 5, 6\} とするとき,f(1) = 4,f(2) = 5,f(3) = 6 と定義される関数 f: A \to B がある.図 C.1 に,この対応を示す.
f(x) という記号は,入力 x に対して関数 f が出力する値を表す.入力 x と出力 y の関係を y = f(x) と書く.この対応を x \mapsto f(x) と書くこともある.
C.2 区分的に定義される関数
入力の値によって異なる式を使う関数を,区分的に定義される関数という.Python では,if 文を使って場合分けを表す.
例 C.2 次のような関数を考える.
f(x) = \begin{cases} x^2 & (x \geq 0) \\ -x & (x < 0) \end{cases}
この関数は,x が 0 以上のときは x^2 を出力し,x が 0 未満のときは -x を出力する.Python で定義するには,次のようにする.
def f(x):
if x >= 0:
return x ** 2
else:
return -x
print(f(3)) # 9
print(f(-3)) # 39
3
f(3) = 9 であり,f(-3) = 3 である.
練習 C.1 次の関数を Python で定義せよ.
f(x) = \begin{cases} -1 & (x < 0) \\ 0 & (x = 0) \\ 1 & (x > 0) \end{cases}
C.3 標準関数
数学でよく使われる関数には,Python にあらかじめ用意されているものがある.ここでは,組み込み関数と math モジュールの関数を使う.
import math以降のコードでは,このインポートがすでに行われているものとする.
C.3.1 絶対値関数
例 2.1 で扱った絶対値 |x| は,Python の組み込み関数 abs() で計算できる.
例 C.3 |-3| = 3 である.Python では次のように計算できる.
print(abs(-3)) # 33
C.3.2 指数関数
e^x は,ネイピア数 e を底とする指数関数(exponential function)である.e は約 2.71828 の値を持つ定数である.
Python では,math.exp() 関数を使う.
例 C.4 x = 1 のとき,e^x = e となる.
print(math.exp(1)) # 2.7182818284590452.718281828459045
C.3.3 対数関数
a > 0,a \ne 1,b > 0 とする.対数 \log_a b は,a を何乗すると b になるかを表す.べき乗との関係は次の通りである.
a^x = b \iff x = \log_a b
対数を計算するには,math モジュールの log() 関数を使う.math.log(b, a) と書くと,底を a とする b の対数を求められる.引数の順序に注意しよう.
例 C.5 2^3 = 8 であるため,\log_2 8 = 3 となる.
print(math.log(8, 2)) # 3.03.0
底を e とする対数を自然対数といい,\ln x と書く.指数関数との関係は,x > 0 に対して次のように表される.
e^y = x \iff y = \ln x
Python では,math.log(x) のように底を省略すると,自然対数を計算できる.
例 C.6 \ln e = 1 と e^1 = e を Python で確かめる.
print(math.log(math.e)) # 1.0
print(math.exp(1)) # 2.7182818284590451.0
2.718281828459045
練習 C.2 \log_3 81 の値を計算し,print() 関数で表示せよ.
C.3.4 床関数と天井関数
床関数(floor function)\lfloor x \rfloor は,x 以下の最大の整数を返す関数である.天井関数(ceiling function)\lceil x \rceil は,x 以上の最小の整数を返す関数である.
Python では,math.floor() 関数と math.ceil() 関数を使う.
例 C.7 \lfloor 3.7 \rfloor = 3,\lceil 3.3 \rceil = 4 である.負の数についても,同じ定義に従って計算する.
print(math.floor(3.7)) # 3
print(math.ceil(3.3)) # 4
print(math.floor(-3.7)) # -4
print(math.ceil(-3.3)) # -33
4
-4
-3
練習 C.3 床関数と天井関数を計算する関数 floor_val(x) と ceil_val(x) を定義せよ.ただし,math モジュールを使わないこと.
ヒント:int(x) は,小数部分を取り除いて整数に変換する.例えば,int(3.7) は 3,int(-3.7) は -3 となる.
C.4 総合練習
練習 C.4 次の関数を Python で定義し,f(3, 1) と f(1, 3) の値を表示せよ.ただし,x \ne y とする.
f(x, y) = \frac{x^2 + y^2}{x - y}
C.5 まとめ
本章では,関数の数学的な意味と,代表的な関数の計算方法を学んだ.
- 関数は,集合の各要素に対して出力をただ一つ対応させる規則である.
- 区分的に定義される関数の各条件は,
if文による場合分けに対応する. - 絶対値には
abs(),指数と対数にはmath.exp()とmath.log()を使う. - 床関数と天井関数には
math.floor()とmath.ceil()を使う.