関数・逆関数・合成|関数・指数・対数・総和

このページはプロモーション(広告)を含みます。

関数・指数・対数・総和(初級・読む22分+演習30分)

この授業のゴール

仕事でどう使うか

数式やコードの多くは、じつは関数の組み合わせです。「広告費を入れると売上の予測が出る」「単価を入れると税込み価格が出る」「特徴量を入れると予測確率が出る」。どれも入力から出力への規則です。

路線 この授業の使いどころ
DS(データサイエンティスト) 「売上=単価×数量」「税込み=1.1×税抜き」のような変換を式で書き、前処理の手順(関数の合成)として整理する
ML(機械学習エンジニア) モデルは「特徴量→予測」の関数。ニューラルネットは関数を何段も合成したもの。活性化関数や標準化の逆変換で元の単位に戻す
DX(DX推進・AI企画) 業務ルール(料金計算、割引、承認基準)を入力・出力・条件として仕様書に書く。順序(割引→税)で金額が変わることを明記する
RS(研究者) 論文の数式を読む入口。変換した値から元の値を復元できるか(逆関数があるか)は、解析の妥当性に関わる

実務では「その計算はどの順序で行うか」「元の値に戻せるか」を聞かれます。この授業はその2つに答えるための土台です。

前提

この授業では、四則演算、文字を使った式($x$ や $y$ に数を入れる)、方程式を1つ解く操作を使います。不安があれば先に戻ってください。

この授業のコードは 実行 ボタンで画面内で動きます。数値を書き換えて結果の変化を確かめてください。

身近な状況:税込み価格と割引クーポン

ネットショップの店員が、価格の計算を手元の表で確認しています。

税抜き価格(円) 税込み価格(円)
1000 1100
2000 2200
500 550

左の数を入れると、右の数がただ1つ決まります(税率10%とします)。この「入れると決まる」関係が関数(function)です。

さらに、会員には「500円引きクーポン」があります。クーポンは税込み価格から引くとします。税抜き1000円の商品なら、

の2段階で、支払額は600円です。もし順序を逆にして「先にクーポンで500円引き、その後で税をかける」と、(1000−500)×1.1=550円になり、50円違います。計算の順序で結果が変わることを、次の節で記号を使って正確に扱います。

直感的な説明:入力・規則・出力と、巻き戻し

関数は自動販売機のようなものです。ボタン(入力)を押すと、決まった商品(出力)が出ます。同じボタンで別の商品が出たら、それは関数ではありません。

逆関数は、出力から入力へ巻き戻す規則です。「2倍して3を足す」を巻き戻すには、「3を引いて2で割る」とします。足す→引く、掛ける→割る、の順序を逆にして戻ります。

合成は、機械を直列につなぐことです。税をかける機械の出力を、そのままクーポン機械に入れます。つなぐ順序を入れ替えると、別の装置になります。

正確な定義:関数・定義域・値域・逆関数・合成

関数 $f$ とは、入力の集合 $X$ の各要素 $x$ に、出力 $f(x)$ をちょうど1つ対応させる規則です。

例:$f(x)=2x+3$。全記号の意味は、$x$ が入力(単位は問題による)、$f(x)$ が出力です。$x=5$ を代入すると $f(5)=2\times 5+3=13$ です。

逆関数:$f$ の出力 $y$ から入力 $x$ を求める関数を $f^{-1}$ と書きます。$y=2x+3$ を $x$ について解くと $x=(y-3)/2$ なので、

$$f^{-1}(y)=\frac{y-3}{2}$$

です。確認:$f^{-1}(13)=(13-3)/2=5$ で、もとの入力5に戻ります。注意:$f^{-1}$ の「$-1$」は逆数ではありません($f^{-1}(y)\neq 1/f(y)$)。

逆関数が存在する条件は、異なる入力が異なる出力になること(1対1)です。同じ出力に戻り先が2つあると、巻き戻せません。

合成関数:$(g\circ f)(x)=g(f(x))$。内側の $f$ を先に計算し、その出力を $g$ に入れます。

税をかける $f(x)=1.1x$、クーポンを引く $g(y)=y-500$ とすると、$(g\circ f)(1000)=g(1100)=600$、$(f\circ g)(1000)=f(500)=550$ です。

def f(x):
    # x: 税抜き価格(円, float)  戻り値: 税込み価格(円, float)
    return 1.1 * x

def g(y):
    # y: 金額(円)  戻り値: 500円引いた後の金額(円)
    return y - 500

x = 1000
print("g(f(x)) =", g(f(x)))   # 先に税、後でクーポン
print("f(g(x)) =", f(g(x)))   # 先にクーポン、後で税

出力は g(f(x)) = 600.0 と f(g(x)) = 550.0 です(浮動小数点の表示は環境で多少揺れることがあります)。関数 f、g は数値1つを受け取り、数値1つを返します。

段階付き例題:逆関数を求めて合成と照合する

問題:$f(x)=3x-2$、$g(x)=x^2$ とする。(1) $f(4)$、(2) $f$ の逆関数と $f^{-1}(19)$、(3) $(g\circ f)(4)$ と $(f\circ g)(4)$ を求める。

ステップ1:入力→処理→出力。$f(4)=3\times 4-2=10$。

ステップ2:逆関数を作る。$y=3x-2$ を $x$ について解く。両辺に2を足して $y+2=3x$、3で割って $x=(y+2)/3$。よって $f^{-1}(y)=(y+2)/3$。

ステップ3:照合する。$f^{-1}(19)=(19+2)/3=7$。確認として $f(7)=3\times 7-2=19$ なので正しい。逆関数は、元の関数に通して入力に戻るかで必ず確かめる。

ステップ4:合成。$(g\circ f)(4)=g(f(4))=g(10)=10^2=100$。$(f\circ g)(4)=f(g(4))=f(16)=3\times 16-2=46$。

式 内側 外側 結果
$g(f(4))$ $f(4)=10$ $g(10)=100$ 100
$f(g(4))$ $g(4)=16$ $f(16)=46$ 46

意味:同じ2つの関数でも、順序で100と46に分かれます。仕様書に「割引→税」「税→割引」のどちらかを書かないと、金額が一致しません。

操作して理解する:逆関数の検算と定義域の制限

次のコードで、$f(x)=2x+3$ と逆関数を作り、往復して元に戻ることを確かめます。finv(f(x)) が x に戻れば正しい逆関数です。

def f(x):
    return 2 * x + 3

def finv(y):
    return (y - 3) / 2

for x in [-2, 0, 5, 10.5]:
    y = f(x)
    print("x =", x, " f(x) =", y, " finv(f(x)) =", finv(y))

次に $h(x)=x^2$ を考えます。$h(3)=9$ ですが $h(-3)=9$ でもあります。出力9から入力に戻ろうとすると、3と−3の2つが候補になり、1つに決まりません。

def h(x):
    return x ** 2

print([h(-3), h(3)])           # どちらも 9
import math
print(math.sqrt(9))            # 3.0 だけ。-3 には戻れない

直し方:定義域を $x\ge 0$ に制限すると、$h$ は1対1になり、逆関数は $h^{-1}(y)=\sqrt{y}$ になります。「どの範囲の入力を考えるか」を先に決めるのが定義域の役割です。

自分で試す問い:(1) f の係数 2 を 0 にすると、出力はいくつになり、逆関数は作れるか。(2) f に 1.5 を入れて逆関数で戻すと一致するか。答え:(1) 出力が常に3になり、どの出力からも入力が決まらないので逆関数はありません。(2) 一致します(ただし小数は表示に微小な誤差が出ることがあります)。

発展:1対1の条件、全単射、機械学習での逆変換

厳密には、逆関数が存在するための条件は、$f$ が単射(異なる入力が異なる出力になる)で、値域の全体を考えることです。値域を戻り先に選べば、単射であれば逆関数が作れます。

実数の1次関数 $f(x)=ax+b$ は、$a\neq 0$ のとき1対1で、$f^{-1}(y)=(y-b)/a$ です。$a=0$ なら定数関数で逆関数は存在しません。

機械学習での例:特徴量の標準化 $z=(x-\mu)/\sigma$ は1次関数で、逆変換 $x=\sigma z+\mu$ があります。予測値を標準化した単位で得たあと、元の単位(円など)に戻すときに使います。一方、四捨五入や切り捨ては多くの入力が同じ出力になるため、逆関数がありません。丸めたデータから元の値は復元できません。

また、合成は結合法則を満たします。$(h\circ g)\circ f = h\circ(g\circ f)$ です。しかし交換法則は一般に成り立ちません(本文の550と600)。深層学習の層を重ねる順序が重要なのもこの理由です。

よくある失敗

失敗1:合成の順序を逆に読む

$(g\circ f)(x)$ を「$g$ を先に計算する」と読むのは誤りです。内側(右側)の $f$ が先です。

def f(x): return 1.1 * x
def g(y): return y - 500
x = 1000
wrong = f(g(x))   # g を先にしてしまった誤り
right = g(f(x))   # g∘f は f が先
print(wrong, right)

誤りの結果は550、正しくは600です。直し方:g(f(x)) と書いて、括弧の内側から計算する。仕様書にも「先に税、次にクーポン」と文章で添える。

失敗2:逆関数を逆数と取り違える

$f(x)=2x+3$ のとき、$f^{-1}(13)$ を $1/f(13)=1/29$ としてはいけません。$f^{-1}$ は「巻き戻し」で、$f^{-1}(13)=(13-3)/2=5$ です。

f = lambda x: 2 * x + 3
finv = lambda y: (y - 3) / 2
print("逆数と取り違え:", 1 / f(13))
print("正しい逆関数 :", finv(13))
print("検算 f(5) =", f(5))

直し方:求めた逆関数は、必ず元の関数に通して入力に戻るか検算する。

失敗3:x² の逆関数を定義域なしで作る

$y=x^2$ から「$x=\sqrt{y}$」と書くと、$x=-3$ の場合に戻れません。

import math
xs = [-3, 3]
back = [math.sqrt(x ** 2) for x in xs]
print(back)   # [3.0, 3.0]  -3 が 3 に化ける

$x=-3$ を入れたのに戻り値は3で、元の入力と違います。これは $x^2$ が負の入力を区別できない(異なる入力が同じ出力)ためです。直し方:定義域を $x\ge 0$ に限定すると決める。実務では「年齢」「個数」のように負にならない量だけを扱うと明記する。

まとめ

用語

関数(function)

入力の各値に出力をちょうど1つ対応させる規則。

定義域・値域(domain / range)

入力として許す値の集合と、実際に出てくる出力の集合。

逆関数(inverse function)

出力から元の入力を求める関数。f(x)=y のとき f⁻¹(y)=x。

合成関数(composite function)

(g∘f)(x)=g(f(x))。f の出力を g に入れてつないだ関数。

よくある質問

なぜ関数という考え方が必要なのですか?

計算を「入力・規則・出力」に分けると、手順の再利用や検算ができるからです。コードの関数、表計算の式、モデルの予測式はすべて同じ形で、仕様の抜け(入力範囲や順序)を見つけやすくなります。

関数と方程式はどう違いますか?

関数は入力から出力を作る規則です。方程式 $f(x)=13$ は「出力が13になる入力を探す」問題で、解くことは逆関数を使うことに近い操作です。

逆関数が作れないとき、どうすればよいですか?

定義域を制限する($x\ge0$ のみ考える)か、「元に戻す」ことを諦めて別の方法(元データを保存する)を取ります。丸めたデータは元に戻せないので、元データを保持するのが実務の基本です。

合成の順序が大事な場面は、仕事ではどこですか?

割引と税、為替換算と手数料、欠損補完と標準化など、前処理の順序です。順序が違うと結果が変わるため、順序を仕様書や関数名に明記し、小さな数値で両方試して差を確認します。

$f^{-1}$ と $1/f$ の違いは何ですか?

$f^{-1}(y)$ は出力から入力を求める逆関数で、$1/f(x)$ は出力の逆数です。$f(x)=2x+3$ では $f^{-1}(13)=5$、$1/f(13)=1/29$ と全く違う値です。

プログラムの関数と数学の関数は同じですか?

ほぼ対応します。ただしプログラムの関数は、乱数や外部状態に依存して同じ入力で違う出力を返すことがあります。数学の関数(同じ入力なら同じ出力)に近づけると、テストしやすくなります。

確認問題

問1 関数の定義として最も適切なものはどれか。

  1. ① 入力と出力が必ず同じ値になる規則
  2. ② 1つの入力に対して、出力が複数通り対応してもよい規則
  3. ③ 入力の各値に、出力をちょうど1つ対応させる規則
  4. ④ 出力が常に整数になる規則
解答と解説

正解:③

関数は、定義域の各入力に出力をちょうど1つ対応させる規則です。出力が複数あると、入力が決まっても結果が決まりません。

問2 $f(x)=2x+3$ の逆関数 $f^{-1}(y)$ はどれか。

  1. ① $2y+3$
  2. ② $(y-3)/2$
  3. ③ $1/(2y+3)$
  4. ④ $(y+3)/2$
解答と解説

正解:②

$y=2x+3$ を $x$ について解くと $x=(y-3)/2$ です。

問3 $f(x)=1.1x$、$g(y)=y-500$ のとき、$(g\circ f)(1000)$ はいくつか。

  1. ① 1100
  2. ② 500
  3. ③ 550
  4. ④ 600
解答と解説

正解:④

$g\circ f$ は $f$ を先に計算します。$f(1000)=1100$、$g(1100)=600$ です。

問4 $h(x)=x^2$ を全実数で考えるとき、逆関数が作れない理由はどれか。

  1. ① $h(3)=h(-3)=9$ のように、異なる入力が同じ出力になるから
  2. ② 出力が負になることがあるから
  3. ③ 2乗は小数に使えないから
  4. ④ $h$ は計算できない関数だから
解答と解説

正解:①

異なる入力が同じ出力になると、出力から入力を1つに決められません。定義域を $x\ge 0$ に制限すれば逆関数 $\sqrt{y}$ が作れます。

問5 標準化 $z=(x-\mu)/\sigma$($\sigma\neq0$)と、四捨五入のうち、元の値に戻せるのはどちらか。

  1. ① どちらも戻せない
  2. ② どちらも戻せる
  3. ③ 標準化だけ戻せる
  4. ④ 四捨五入だけ戻せる
解答と解説

正解:③

標準化は1次関数で $x=\sigma z+\mu$ と戻せます。四捨五入は多くの入力が同じ出力になるため、元の値は復元できません。

問6 合成関数について正しい説明はどれか。

  1. ① $g\circ f$ は $g$ を先に計算する
  2. ② 合成すると定義域は必ず広がる
  3. ③ $g\circ f$ と $f\circ g$ は常に等しい
  4. ④ $g\circ f$ は内側の $f$ を先に計算する
解答と解説

正解:④

$(g\circ f)(x)=g(f(x))$ で、$f$ が先です。順序を入れ替えると結果が変わるのが一般的です。

次に学ぶこと

次は 指数と増減率 で、同じ割合で増減する量を表す指数を学びます。複利計算は、「1.1倍する」という関数を何度も合成したものです。

この授業の確認問題だけで習得とはしません。MA01 の総合テストと自力課題で判定します。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い