コラム 人と星とともにある数学 数学

一行数式グラフコンテスト|Pythonで数学を学ぼう! 第19回

はじめに|レポート

私が毎月開催している桜井進の算数・数学教室(Zoomオンラインセミナー)ですが、1月と2月の桜井進の算数・数学教室3クラス(魔法の算数教室・数学浪漫紀行・数学プログラミングコース)のテーマは「一行数式グラフコンテスト」でした。

たった一行の数式でどれだけ面白いグラフをデザインができるかを競うコンテストです。

1月の教室でグラフ計算機の使い方と基本関数のグラフを紹介しました。それから1ヶ月間オリジナル一行数式グラフのデザインにチャレンジしてもらい、2月の教室で参加者自身による作品発表会を行いました。

その中から最優秀賞に選ばれたのが次の作品です。

桜井進の数学浪漫紀行クラスのY.M.氏のデザインです。
x2+y2+sin(3y)+cos(3x)=1

グラフ計算機として何を使うか

Webアプリケーション

おすすめはGeoGebra(ジオゲブラ)の関数グラフです。

ユーザーインターフェースが洗練されていて初心者でもすぐに使い始めることができます。グーグルアカウントでログインすればデータ保存もできて便利です。

GeoGebraと同じようなユーザーインターフェースを持つWebアプリケーションにdesmosやmathwayがあります。

「グラフ計算機」で検索すればその他にも山ほどWebアプリケーションが見つかります。

Python

前回紹介した2Dグラフ計算機「2dgraph.py」はデザインしたグラフ出力を保存するのが面倒でした。そこでPNG画像として自動保存できるように改良しました。

ファイル名に一行数式も含まれるようにしてあるので大量にグラフを出力してもファイリングが楽になります。

私はこの自作のグラフ計算機を使うことで効率良く、楽しくたくさんグラフをデザインできました。

プログラム「2dgraph2.py」

>> # 2D平面グラフ(陰関数)
>> # 2dgraph2.py
>> import numpy as np
>> from numpy import sin, cos, tan, exp, log, abs
>> import matplotlib.pyplot as plt
>> import japanize_matplotlib # pip install japanize-matplotlib
>>
>> print('f(x, y)=0 のf(x, y)を入力します')
>> print('関数の定義 sin(), cos(), tan(), exp(), 自然対数log(), abs()')
>> print('例 x^2+y^2=1 -> f(x, y) = x**2 + y**2 -1 (= 0)を入力')
>> print('例 sin(xy)=1 -> f(x, y) = sin(x*y) -1 (= 0)を入力')
>> f = input('f(x, y) >>> ')
>> a = int(input('-a≦x≦a, -a≦y≦a, a >>> '))
>>
>>
>> fig = plt.figure()
>> axis = fig.add_subplot(1,1,1)
>> x, y = np.mgrid[-a: a: 4001j, -a: a: 4001j]
>>
>> axis.set_title('陰関数 (implicit funtion) '+f+'=0')
>> axis.set_xlabel(r'$x$', fontsize=12)
>> axis.set_ylabel(r'$y$', fontsize=12)
>> axis.tick_params(axis='both', length=10, which='major')
>> axis.tick_params(axis='both', length=5, which='minor')
>> axis.minorticks_on()
>> axis.set_aspect('equal', 'box')
>> axis.set(xlim=(-a, a), ylim=(-a, a))
>>
>> axis.contour(x, y, eval(f),[0], colors="magenta")
>>
>> filename = '2dplot_'+f+'=0_a='+str(a)+'.png'
>> filename = filename.replace('**', '^')
>> filename = filename.replace('*', '*')
>> filename = filename.replace('/', '/') # ファイル名の**部分があればリネーム primelist_10e+4.binaryfile
>>
>>
>> plt.grid()
>> plt.show()
>> fig.savefig(filename, transparent=False)

このプログラムファイルは次からダウンロードできます。
https://drive.google.com/file/d/18IztCvIEY87rfpa72FriBuR1gfMeNkY3/view?usp=sharing

グラフ関数電卓

ヒューレット・パッカードのGraphing Calculator、テキサス・インスツルメンツのGraphing Calculatorが有名です。日本ではカシオのグラフ関数電卓が有名です。

「桜井進の魔法の算数教室」参加者で最年少6歳の方が一行数式グラフコンテストを機にグラフ関数電卓を購入しました。

授業の中で、最新のfx-CG50を使って極座標でデザインしたグラフを得意満面に私に見せてくれたのにはびっくりしました。極座標については前回の連載をご覧ください。

画面こそ小さいですが、3D、2D、XY座標、極座標、パラメータ形式、複数グラフの同時出力、統計グラフと機能は満載です。

これなら手の中でいつでもどこでも気軽にグラフをデザインできます。

実践「一行数式グラフコンテスト」

グラフ計算機をどれにするかを決めたら、さっそく数式を入力してグラフを出力させてみましょう。

とは言え、いきなり自由にデザインしてみてといわれても手がかりがないままデザインすることは難しいです。

そこでたたき台になる一本の数式を準備することにしました。それが次の数式とグラフです。

x2+y2+sin(7x)+cos(7y)=1

これはまさに私が一行数式グラフコンテストを開催しようと思うきっかけになったグラフでした。数式からはまったく想像もできないグラフの形です。

前回、手計算でグラフを描くことの面白さ、大変さの思い出を語りました。

さてこの数式を手計算によって攻略してグラフを描いてみようとは思いません。できないことはありませんが、膨大な計算量が必要なのではないでしょうか。

それが計算機を使えば一瞬でグラフが出現します!

この数式をたたき台にいろいろといじってみるだけでたくさんのグラフがデザインできることに気づきました。

以下私のお気に入り一行数式グラフです。

x、y、sin、cos、7x、7yにexp、abs(絶対値)を加えることで膨大な組合せの数式をつくることができます。したがって悩むことなくどしどし一行数式グラフのデザインを楽しむことができます。こうして誕生したのが冒頭の最優秀賞の作品だったというわけです。

このたたき台で経験と勘を磨くことで、より自由に作品をデザインできるようになります。ぜひみなさんも一行数式グラフのデザインにチャレンジしてみてください。

  • この記事を書いた人
  • 最新記事

桜井進(さくらいすすむ)様

1968年山形県生まれ。 サイエンスナビゲーター®。株式会社sakurAi Science Factory 代表取締役CEO。 (略歴) 東京工業大学理学部数学科卒、同大学大学院院社会理工学研究科博士課程中退。 東京理科大学大学院非常勤講師。 理数教育研究所Rimse「算数・数学の自由研究」中央審査委員。 高校数学教科書「数学活用」(啓林館)著者。 公益財団法人 中央教育研究所 理事。 国土地理院研究評価委員会委員。 2000年にサイエンスナビゲーターを名乗り、数学の驚きと感動を伝える講演活動をスタート。東京工業大学世界文明センターフェローを経て現在に至る。 子どもから大人までを対象とした講演会は年間70回以上。 全国で反響を呼び、テレビ・新聞・雑誌など様々なメディアに出演。 著書に『感動する!数学』『わくわく数の世界の大冒険』『面白くて眠れなくなる数学』など50冊以上。 サイエンスナビゲーターは株式会社sakurAi Science Factoryの登録商標です。

あわせて読みたい

-コラム, 人と星とともにある数学, 数学
-,