Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

【Pythonお悩み解決】一次式で書ける処理の判断方法

PyQチームのtsutomuです。

今日は、PyQのパート「数学のチャレンジ」のクエスト「ブラックボックスの処理から関数を考えよう」の内容を紹介します。

さらに、同じ処理を一次式で書けるかどうか判断する方法も紹介します。

クエストの問題

以下を満たす関数 func を作成してください。

func(0, 0) = 0
func(0, 1) = 1
func(1, 0) = 1
func(1, 1) = 0

解答と一次式についての考え方

解答は無数に考えられますが、ここでは2種の解答を紹介します。

# 解答その1
def func(x, y):
    return x ^ y
# 解答その2
def func(x, y):
    return x + y - 2 * x * y

これらの解答は、一次式以外(x ^ y2 * x * y)も使っていますが、一次式だけで書ければわかりやすくなるでしょう。 さて、xyの一次式だけでfuncを作成することはできるでしょうか?

実は、funcを一次式だけで作成することはできません。理由を説明します。

下記にあるように、一次式は直線や平面になります。

平面 - wikipedia

「一次式は直線や平面になる」の対偶を考えると、「直線や平面上でなければ一次式にならない」です。

(x, y, func(x, y)) を3次元で考えると、平面には乗りません。これは、Matplotlibを使って次のように3次元グラフ上に実際にプロットするとイメージしやすいです。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# プロットするデータの作成
points = [[0, 0, 0],  # func(0, 0) = 0
          [0, 1, 1],  # func(0, 1) = 1
          [1, 0, 1],  # func(1, 0) = 1
          [1, 1, 0]]  # func(1, 1) = 0

# 3次元のグラフを作成
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.view_init(30, 15)  # カメラの角度を調整

for x, y, z in points:
    ax.scatter(x, y, z)

plt.show()

これらの4点は三角錐の頂点なので、平面に乗りません。そのためfunc(x, y)の一次式だけでは表現できません。

まとめ

一次式で表現できるものは、直線や平面だけになります。

もっと問題を解いてみたい方へ

PyQのパート「数学のチャレンジ」では、以下のようなクイズみたいな問題を用意しています。

興味のある方は是非チャレンジしてみてください。

Copyright ©2017- BeProud Inc. All rights reserved.