付録 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 に,この対応を示す.

左の楕円は集合 A で,要素 1,2,3 を含む。右の楕円は集合 B で,要素 4,5,6 を含む。f と書かれた矢印が 1 から 4,2 から 5,3 から 6 へ向かう。
図 C.1: 関数 f: A \to B による対応。A の各要素から,ただ一つの B の要素へ矢印が出る。

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))  # 3
9
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))  # 3
3

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.718281828459045
2.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.0
3.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.718281828459045
1.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))   # -3
3
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() を使う.