Scratch(微分と積分)

Calculus_titleプログラム

今回はScratchで高校数学で学ぶ微分・積分について考えみましょう。子供向けプログラミングの世界を逸脱していますが、数学というイメージしづらい世界をScratchを使って可視化するというのもプログラミング教育の重要な役割ではないでしょうか。

微分・積分・嫌な気分。中学数学で嫌になるのが、X・Yといった変数であったとしたら、高校数学ででくわす嫌なものTOP3はおそらく微分・積分でしょう。そもそも微分・積分って何の役に立つの?勉強して意味があるの?というところが、さらに勉強する気が減ってしまう要因です。

ということで今回はScratchを使って微分・積分プログラムをつくり、そのイメージをつかんでみましょうというのがお題です。

微分・積分って何?

微分とは何か? まず微がついているとおり、生物、粒子、軽な、顕鏡、風などにみられるとおり微というのはものすごく小さいものという意味があり、それに分けるとついているので、ものすごく小さく分けるというのが微分です。そして、そして積分は分けたものを積み上げるというものであり、まるでシュレッダーで細かい短冊にしたものを集めてくるような行為です。

で、結局、微分・積分って何を意味するものなのというとこうなります。

 微分は「傾き」 積分は「面積

 

何の役にたつの?

傾きを知ったり、面積を知ることが一体、何の役に立つのか?これは正直、私も微分・積分を積極的に使う仕事をしていないので、社会人になって役に立つの?と真顔で言われると困るところですが、研究職やメーカー勤務の方は非常に使うのではないでしょうか、特に物理の世界では積極的につかわれます。

身近な例で行けば、例えば電力計算。電力を一番使った時、電力消費が急激に上がった時、一日の電力の総使用量はという時に微分・積分の考えが役に立ちます。

微分は傾きと述べましたが、例えば一日の電力使用は常に一定というわけではありません。いまの夏場は暑いですよねエアコンを使ってお昼時は電力をたくさん消費する一方、早朝の陽が出る前は涼しく窓を開けていればOKということもあります。当然、一日の電力をグラフ化するとあがったりさがったりといくつかの山や谷がある曲線になるはずです。

この時、微分を使えば、この複雑な曲線におけるあるタイミングでの傾きがわかるので、傾きが0になった時が電力のピーク(傾きが0が複数あるときは、その時のY座標つまり電力値をみて比較)、傾きが一番大きいところが、短時間で電力使用量が増えた時間帯ということがわかります。

一方、この電力使用のグラフを12時間なり、24時間なりの期間で積分すると、その時間において使用した電力の総量がわかるのです。正確にはこのグラフを数式で表せるように近似曲線にしないといけないですが、このような形で微分・積分が使われます。

これは一例ですが、微分・積分のもっと例をみるにはこういった本を参考にするのがいいでしょう。

微分のイメージをつかむ

では、Scratchを使って微分のイメージをつかんでいきましょう。

1次関数を微分する

1次関数を描いて、それを微分してみましょう。

中身を確認したい場合はこちら

https://scratch.mit.edu/projects/562729833

ええ、実行すると右肩あがりの直線が描かれますが、微分した後の傾きはずっと0.5のままで一定ですよね。微分した傾きを示す切片もずっと一直線です。正直、一次関数を微分してもあんまり意味がないです。X座標のどの地点であっても傾き(変化量)が一定だからです。わかることとしては傾きがプラスなら変位はプラス方向に増加しているんだなぁとわかることぐらいです。

2次関数を微分する

では次に二次関数を描いて、微分してみましょう

中身を確認したい場合はこちら

https://scratch.mit.edu/projects/562536549

2次関数は曲線ですので、微分の本領はこの次元から発揮されます。今回、二次関数は-0.006x2+150 という式ですので、これを微分すると-0.012x つまりXの値によって傾きが変わっていきます。x<0の時は傾きはプラス(+)になるので、変位は上昇、x>0の時は逆に傾きがマイナス(ー)になるので変位は下降となります。そしてX=0の時に傾きが0つまり、最高点に達するということが見て取れます。

これは次回やろうと思っているボールを斜め上に投げたときの放物線の近似曲線でもあります。つまり、この考え方がわかるとボールがいつ最高点に達するのか、どのくらいのスピードで上昇・下降するのかが予測できるようになります。

3次関数を微分する

では、最後に3次関数について考えましょう。


中身を確認したい場合はこちら

https://scratch.mit.edu/projects/562777008

 

3次関数はプラスからマイナスに変位する箇所が2か所ある関数になります。今回はこの三次関数をえがきました -0.00002x3+0.6x これを微分すると-0.00006x2+0.6 となり、同じようにXの値によって傾きがかわります。そしてx=-100と100の時に傾きは0となりますが、その前後で傾きがプラス(+)、マイナス(ー)と変わります。ここまで複雑になってくると微分を使う意味って何となく出てくよるような気もしてきますよね。

人間の目なら、「あっ、ここが頂点だ、底だ」と間隔でわかりますが、これを機械で判断させようとするとこのように傾きが0になるといった具体的なもので示してやる必要があります。

Scratchを使った微分について

今回はScratchでの微分プログラムの中身を説明するようなことはあまりしません。自分も作りたいなとおもったら中身をみてコードを確認してみてください。

今回、ポイントを挙げるとすると関数の書き方は高校数学で学ぶとして、Scratchの場合、X座標が-240から240、Y座標が-180から180までの範囲なので、X3に単純に整数をかけるととんでもないY座標がでてしまい画面の外に飛び出てしまいます。なのでX3の係数は0.00002などのとんでもなく小さな少数点以下の数値をかけているというところがキモです。

そして、次に切片となる直線の表現の仕方。グラフを微分したら傾きがわかるのに、これを元にどうやって曲線に接する直線を引けばいいのだ?と単純に傾きから直線を描画すると描画に時間がかかる。

ここは、まず直線のスプライトを用意して、それを、〇〇度に回転させることによって切片を表現するという手法を使っています。この時、傾きから角度を求めるのがatan(アークタンジェント)です。傾きをこの関数にいれることで角度が求められます。

 

積分のイメージをつかむ

では、今度は積分のイメージをScratchでつかんでみましょう。積分は面積と言いました。では、その面積はどうやって出しているのでしょう。それは区分求積法といって、曲線に細長い長方形をあてていき、その長方形の面積の合計が曲線とX軸がかこまれた面積を求めるというものです。

手書きの曲線をつかった積分イメージ

まずは手書き曲線をつかった積分イメージです。なんで手書き曲線なのかというと、関数をつかった曲線の場合、最初の曲線描画に時間がかかり、それから長方形を描くというところにさらに時間がかかり長方形の幅(分割の幅)を色々、変更して試してみるというのに時間がかかってイライラするからです。共有もターボモードで動かせればいいけれど、どうやら共有ではそれができないみたい。なので関数となる曲線は背景に手書きで書いてあるバージョンです。最初にどのくらいで分割する?と聞かれるので2~50までの値を入れてみましょう。


中身を見たい場合はこちら

https://scratch.mit.edu/projects/562452442

さて、これを試してみると分割の幅を50にしたときよりも、4の時の方が圧倒的に曲線に沿った長方形が並べられるということがわかりますよね。じゃ、1の時はもっとすごいのかというと、どうやらScratchのあたり判定では、そこまでうまく表現できず、ここがScratchの限界かともおもってしまいます。とはいえ何となく、分割幅が狭い方がより近似されるというのがイメージできますよね。この分割の幅を極限まで狭くしていくのが積分です。もう0.000000001とか物凄い小さく分割するとほぼ曲線の面積ですよね。とはいえ、幅を0にすることはできないので、この極限まで近づけるという考えが微分・積分の世界なのです。

関数をつかった曲線の積分イメージ

一応、関数を使った積分イメージも貼っておきます。なおいらいらしますよ。幅は変数をスライダー式にしていますのでそこでスタート前に変更してください。


中身をみたい場合はこちら

https://scratch.mit.edu/projects/562470332

 

なお、関数で書いたとはいえ、Y軸がマイナスからも方形を描いているので、このグラフをつかって正確な積分値を算出することはできません。あくまでイメージであることをご理解ください。

Scratchを使った微分について

同じようにScratchの中身を細かく解説するようなことはしないため知りたい人は各自中をみてください。

まとめ

どうでしたか?積分・微分のイメージがつかめましたか? このイメージで少しでも数学に興味を持ってもらえたら幸いです。

ちなみに、これらの数学公式を自分でプログラムで表現してみるというのは、プログラムの上達と数学への興味という点でダブルで効果があります。今回、傾きから切片を描くというところで、私も久しぶりだったので、atan(アークタンジェント)を使うのかーと、アハっ、やったーという感じでした。

こうやって、自分でやってみる、でもうまくいかない。うまくやるにはどうすればいいのか?この関数があるぞ、つかった、うまくいった。やったー。こんな感じで自分で手を動かし、壁にぶち当たり、調べて成功するという体験を繰り返すとプログラムが好きになるだけでなく数学にも興味を持つようになると思いますよ。なのでプログラミング学習は数学好きになる近道でもあるのです。

皆さんもチャレンジしてみてください。きっと最初はうまくいかないので、作りなおしていくうちに自分で調べて気が付いたら数学に強くなっていますよ。

 

コメント

タイトルとURLをコピーしました