LoginSignup
39
21

Elixirで学び直す高校数学①:第3章「方程式で図形を描く」前半 ~PythonからElixirの世界へようこそ~

Last updated at Posted at 2023-11-11

この記事は、Elixir Advent Calendar 2023 シリーズ11 の1日目です


piacere です、ご覧いただいてありがとございます :bow:

「Pythonで学び直す高校数学」(以降、本書)を買い、Elixirに書き直そう…と思って早4年、なかなか暇が無くて書けないでいましたが、やっと書く機会が訪れました :smile:
image.png

なお、本書の内容は割愛するため、お手元に書籍をご用意してください

進行としては、第2章まではPython基礎のためスッ飛ばし、第3章「方程式で図形を描く」から始めていきます

しょっぱなからグラフを扱うため、Livebookを使って実現していきます

Livebookの構築方法は下記の通りです

Elixirのインストールからであれば、下記をご覧ください

あと、このコラムが、面白かったり、役に立ったら、image.png をお願いします :bow:

:ocean::ocean: Elixir Advent Calendar 言語カテゴリ1位 & 全カテゴリ2位! :ocean::ocean:

例年を遥かに超える盛り上がりを見せ、堂々のトップ獲得ッ! :qiita: :tada: :confetti_ball:

https://qiita.com/advent-calendar/2022/elixir
https://qiita.com/advent-calendar/2022/ranking/feedbacks
https://qiita.com/advent-calendar/2022/ranking/feedbacks/categories/programming_languages
image.png

1️⃣ matplotlib相当の「VegaLite」でグラフを描く

Elixirでグラフを書く方法は色々ありますが、Livebook上で「VegaLite」を使うのが、今はもっとも手っ取り早いです

早速、本書P88をElixir化していきます

VegaLiteでグラフを描く準備として、SmartCellで「Chart」を選んでください
image.png

下記が表示されたら、「Elixir」をクリックすることでコードブロックを上側に追加してください
image.png

追加されたコードブロックに、本書の「# データ」部分と等価な下記コードを入れます

my_data = %{
  x: [1, 2, 3, 4, 5, 6, 7], 
  y: [64.3, 63.8, 63.6, 64.0, 63.5, 63.2, 63.1]}

実行した結果は、この通りです
image.png

その後、SmartCellで生成された下記ノーコードブロックの「CHARTING」に上記で定義した変数、「WIDTH」「HEIGHT」に適当な幅/高さを入れ、「Chart」を "line" に設定し、実行すると、グラフが描かれます
image.png

ただし、グラフのY軸のスケールが微妙なので、「Convert to Code cell」で、一度Elixirコード化し、カスタマイズしていきます
image.png

「Convert」ボタンをクリックします
image.png

すると、SmartCellで生成されたノーコードブロックが、Elixirコードに変換されます
image.png

Y軸をオートスケールにするには、下記のように scale: %{zero: false} を追加します

VegaLite.new(width: 800, height: 300, title: "my_data")
|> VegaLite.data_from_values(my_data, only: ["x", "y"])
|> VegaLite.mark(:line)
|> VegaLite.encode_field(:x, "x", type: :quantitative)
|> VegaLite.encode_field(:y, "y", type: :quantitative, scale: %{zero: false})

実行すると、本書と全く同じグラフが出せます
image.png

なお、「Convert to Code cell」だとSmartCellに戻せないので、「Toggle source」でElixirコード表示し、別のElixirコードブロックにコピペしてカスタマイズするのもオススメです
image.png

2️⃣ 方程式からグラフへ

2.1 方程式

(Pythonコードが無いため割愛)

2.2 関数

本書P94の y = 3x - 24 のPythonコードをElixir化すると以下の通りです

Pythonコードと異なり、添字でアクセスする必要は無く、値をそのまま使えます

x = 1..11
y = for xi <- x do
      3 * xi - 24
    end
my_data = %{x: x, y: y}

上記コードを実行し、ノーコードブロックも実行すると、下記のようになります
image.png

最後に

「Pythonで学び直す高校数学」では、matplotlibを使ったPythonコードを全量、記述することでグラフ描画していましたが、Elixir/Livebookはデータだけを準備すればノーコードだけでグラフ描画できました

ノーコードからElixirコード化することでカスタマイズもできました

数式部分のコードを差し替えるだけでグラフ化できることも確認できました

次回は、「2.3 関数とグラフ」から「4.4 三角比と角度」までをElixir化していきます


明日は、私で「Elixirで学び直す高校数学②:第3章「方程式で図形を描く」中盤 ~ノーコード戦法でグラフ描けるElixir~」 です

p.s.このコラムが、面白かったり、役に立ったら…

image.png にて、どうぞ応援よろしくお願いします :bow:

39
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
21