はじめに|レポート
私が毎月開催している桜井進の算数・数学教室(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(絶対値)を加えることで膨大な組合せの数式をつくることができます。したがって悩むことなくどしどし一行数式グラフのデザインを楽しむことができます。こうして誕生したのが冒頭の最優秀賞の作品だったというわけです。
このたたき台で経験と勘を磨くことで、より自由に作品をデザインできるようになります。ぜひみなさんも一行数式グラフのデザインにチャレンジしてみてください。