プログラミングで数学を 中高数学虎の穴

このコンテンツはプログラミングをうまく活用して中高数学を勉強するためのコンテンツです.
プログラミングを知っている方がより深くコンテンツを活用できますが,
これから説明していくように,
現時点であなた自身が十分なプログラミングスキルを持っている必要はありません.
プログラミングについてもコンテンツ内に必要な解説をつけているので,
それを軸にプログラミングも勉強していけるようにしています.

今後の勉強の都合も考え,
プログラミング言語としては私が知る限りいま 1 番入門的な情報の量が多く,
情報を探しやすくもある Python を選んでいます.
これからこのコンテンツについて詳しく説明していきます.
このページを読むだけでも数学・物理・プログラミングを勉強する上で参考になるように作っています.
興味があるところからでも構いません.
ぜひ読み込んでみてください.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

数学を快適に勉強できるコンテンツ

1 番意識したのはこの点です.
実はこのコンテンツは無料展開していた通信講座の続編です.
そしてその中で得たコメントを活かした形にしています.
プログラミング利用もその 1 つです.

その無料講座では「中高数学駆け込み寺」というシリーズの一環として,
自然を再現しようというテーマで展開しました.
この講座は中高数学の大きな姿を掴むことを目的に,
中高数学を微分方程式を理解するという視点から解説しました.
微分方程式は理工系の核である物理の基礎数理であることはもちろん,
生物などの理工系の他の分野はもちろん,
考古学や経済のような人文・社会学にまで広い応用を持ちます.
実際にこうした応用を紹介しながら中高数学を解説したコンテンツです.

目で見てアニメで理解する

上記無料講座の中でもプログラミングを使っています.
具体的なコードも紹介しています.
受講された方は必ずしもプログラミングの知識があるわけではありませんでした.
しかし, それでも次のような声が届いています.

  • やはり図を目で見られるのが楽しい.
  • 単に図があるだけではなくアニメーションが見られるのがよかった.
  • これまで極限とは何なのか全くわからなかったが, アニメーションとして解説されることでようやく理解できた.
  • プログラム自体はよくわからないが, 気にはならなかった.
  • 中高数学がこんなに統一的な視点で理解できるとは思わず, 感動した.

1 つの核は単なる図ではなく,
コンテンツにアニメーションを搭載したことでした.
そこで新たなコンテンツでもこの点を非常に重要視しました.
特に従来のコンテンツは書籍がメインだった関係で,
本質的に静的な図しかありません.
中高数学, そして応用上の核である微分積分は動的なアニメーションと非常に相性がいいのです.
極限, 特に積分はアニメーションで見れば一発と言っていいほどです.
いまの技術を使えば, アニメーションも簡単に作れます.
中高生の頃の私がこんなのを見せられたらどう考えても飛び跳ねて喜んだでしょう.
昔の私の理想を丁寧に実現させた, 夢のようなコンテンツです.

自分でグラフやアニメを描けるようになる!

もちろん綺麗な図がたくさん載っているコンテンツもあります.
しかし, それらを見ていて私はいつも不満でした.

  • 自分でもこんな図やアニメを描いてみたい!
  • でも描き方・作り方がわからない!

凝った図・面白い図であるほど, 何かしらの工夫が必要です.
それは何かのアイデアかもしれないし, 器具かもしれません.
もちろん CG ならアイデアも器具 (コンピューター) も必要です.
アニメーションとなるともっと大変です.

作るだけではなく見るための工夫も必要です.
本しかなかった時代にアニメーションを見ることは至難の業です.
しかし, 現代は状況が大きく変わっています.
プログラムを書くのもその成果を使うのも圧倒的に楽になっています.

この楽になっている点にもいろいろあります.
プログラマーではない「素人」にとって,
自分が使っているマシンにプログラムが動く環境を整えるのは本当に大変なのです.
環境を整えたあとにプログラムを動かすのもまた大変です.
これは私自身がはじめてプログラムを動かそうとしたときに本当に苦労したことです.

実はいまはこの環境構築・実行というかつて高かったハードルは劇的に低くなっています.
これについてもコンテンツ中で補足しています.

プログラミングを楽にする

最近は統計学・機械学習・人工知能 (AI) の隆盛でプログラマー側からの数学学習意欲が高まっています.
そのため大分状況はよくなってきました.
しかし, かつてのコンテンツにはひどい欠点があったのです.
それはプログラムを自分で全て書かなければいけないという欠点です.
本にプログラムが書いてあって, それを自分で打ち込んで動かすのです.

そんなのは当たり前と思うかもしれません.
しかし, プログラムは 1 文字間違えただけで全く動きません.
少し数値が変わっただけで全く違った結果になります.
がんばって打ち込んでもどこかでミスしていて本に書いてあるような動きをしてくれず,
どこがどう間違っているかわからず挫折することはよくありました.
もっとひどいときは本に書いてあるプログラムが間違っていることさえあり,
本に書いてあるように書いても本当に動かないことがありました.
著者の手元にあるプログラムは正しくても,
本に載っているプログラムが間違っているのです.

現在これをどう解決しているか?
実は著者が書いたプログラムをそのまま配布しているのです.
著者が実際に動作確認したプログラムをそのまま配布すれば上のような問題が起こりません.
いまとなっては当たり前のことですが,
少し前まで全く当たり前ではありませんでした.
そしても今でもまだ当たり前ではありません.

上で書いたように,
本職のプログラマーが作ったコンテンツならまず確実にプログラムは公開されています.
しかし一般の理工系の人が書いた本だと必ずしもこうはならないのです.
数学やその応用のためのプログラミングならやはり本職の人が作ったコンテンツがいいでしょう.
それなのに本職の人達はなかなかこれをやってくれないのです.

私はこの両者の狭間で非常に苦労しました.
プログラマーが作ったコンテンツはプログラマーが興味を持つ内容のコンテンツしかなく,
数学・物理系の人が作ったコンテンツだとプログラムに落とし込むのが血を吐くほど大変なのです.
ひどい場合, 次のように書いてあることさえあります.

基本的にプログラミング言語や可視化についての具体的な記述方法については深入りはしていない.
その理由は, 日々アップデートされる描画ソフトについてはインターネットで検索して最新の方法を入手する方がよいことと,
描画ソフトやプログラミング言語の選択はユーザーの思考や経験に強く依存することである.

確かに言うことはごもっともです.
しかし, 動くコードがあるとないとでは大違いなのです.
数値計算のプログラムは非常にバグ取りしづらいこともそれに拍車をかけます.
新たに勉強する人にこの苦労を背負わせるのはあまりにも酷です.
そんな思いを込めた作ったのが今回のコンテンツです.

閉じた形でコンテンツを提供する

もう 1 つ, これも私が実際に感じた既存のコンテンツの面倒さです.
よくも悪くも, 既存のコンテンツは本が多いのです.
そして本は本, プログラムは GitHub で公開というスタイルが標準的です.
つまり本とプログラムが両方見られる状態でなければ勉強しづらいのです.

ここで 1 つ朗報があります.
同人誌は個人が個人で作って出しているため,
既存のコンテンツ供給の制約を受けません.
そしてコンテンツ本体とプログラムが一体になって配布されているケースが増えています.
もちろんそのための技術が生まれ, 整備され, 普及したことも大きな要因です.
もったいぶる必要もないので具体的に書くと,
Jupyter notebook (JupyterLab) です.
このコンテンツでも教材は Jupyter notebook (またはそれを HTML に変換したファイル) を配布します.

これの何がいいかを箇条書きにしておきます.

  • 教科書とプログラムが一体になっていて, あちらこちらに意識を飛ばす必要がない.
  • プログラムが動く形で配布されるので, 「写経」の手間がなく即実行できる.
    • 自分自身でプログラムを変えて実行するのも簡単.
  • MathJax との連携で式も綺麗に表示できる.
    • 式を綺麗に表示するための TeX の記法も学べる.
    • ネット上での文字入力ベースでの数学コミュニケーションでも意思疎通しやすくなる.
  • この講座でも採用している Python との相性がいい.
  • 画像やアニメーションも表示できる.

Jupyter notebook または JupyterLab は web ブラウザ上で動くアプリケーションなので,
プログラムを書くのは大変で, 欠点がないわけではありません.
しかし, 入門レベルの勉強のためには現状最高のメディアだとも思っています.
そんなわけでこれを採用して教科書・プログラムを一体にしたコンテンツを提供しています.
画像やアニメーションも見やすいメディアです.

中高数学の復習で重要な「厳密計算」にも対応

これは特にプログラマー勢が作る既存のコンテンツの不満点です.
最近注目されている統計学・機械学習・人工知能系のために数学を勉強しようとするプログラマー向けのコンテンツです.

ここでは具体的な数値を計算することが目的なので,
使っているライブラリも numpy が中心です.

しかし, 中高数学を勉強・復習しようという人にとってこれでは困ることがあります.
中高数学では厳密な計算が必要な場合があります.
例えば半径 1 の円の面積を求めたいとき,
\(3.141592…\) ではなく, 円周率を表す文字 \(\pi\) を出してほしいのです.
円周率ならまだしも, \(\pi / 2\) にあたる \(1.570796…\) などはやはりパッと見ではわかりにくいのです.

このコンテンツは実際に中高生にも使ってほしいと思って作っています.
中高生が勉強するときには \(\pi\) は \(\pi\) と書きたいのです.

これを実現する手段はあります: sympy というライブラリを使えばいいのです.
わかる人しかわからない話ではありますが,
こうした厳密計算をやりきるには限度があります.
(例えばその 1 つの制約としてはガロア理論が有名です.)

ここでまた問題があります: sympy の情報は極端に少ないのです.
もしかしたらプログラマー界隈からは次のような声が出るかもしれません.

  • 公式のページが充実しているのだからそれを見ればいい.

ただ, これを中高生, 特に中学生に要求するのは酷です.
1 つの理由は英語だからです.
小説などのようにスラングはなく,
学校英語の視点からは読みやすいタイプの英語ではあります.
しかしプログラミングの専門用語と数学の専門用語が散りばめられていますし,
語彙力の観点からは読みこなすのは相当に大変ですし,
大人でもきつい人はきついでしょう.

実は以前, sympy の公式ページの記述をいくつか日本語化していて,
自分のブログにもまとめています.
もちろんそれを見て勉強できる人もいるはずです.
しかし, ライブラリのリファレンスをそのまま持ってきただけで,
「こういうときにはこういう使い方をすればいい」という形ではまとめていません.
教科書やコンテンツは次のような存在意義があります.

  • これにはこういう使い方がある.
  • これはこういう順番で勉強すればいい.
  • これらはこういう視点でのまとめ方がある.

もちろんライブラリのリファレンスはこういう目的では作られていません.
そもそもコンテンツ自体がほぼない中,
このギャップを埋めることもこのコンテンツの目的です.

応用への意識: 物理のための数学・プログラミング

私の情報発信の内容からして,
メルマガ読者は数学と物理のどちらかまたは両方に興味がある人が集まっています.
そして最近は物理・工学・産業界でもプログラミングの重要性が高まっています.

最先端の話は抜きにしても,
目で見て・感じて現象に対する直観を養うのはとても大事なことです.
先程も少し書いたように, プログラミング利用の目的の 1 つは可視化です.
プログラミングを使ってうまいこと対象を可視化すれば,
数学・物理を勉強するのにとても役に立ちます.
そこでそれらそれぞれの応用先として物理を大きく取り上げることにしました.

いま注目の統計学を勉強するための基礎が身につく

もちろん, 私のメルマガ読者にはいわゆる文系出身プログラマーの人もいます.
こうした人から何かいいコンテンツがないかと聞かれたこともあります.
この方は上で紹介したプログラミング併用の無料講座を受講された方でした.
既存のコンテンツにも「文系出身でもわかる」といったコンテンツもあるので,
とりあえずそうしたコンテンツをお勧めはしました.
お勧めというより, 不満はあるがそれしかないというべきだったかもしれません.

もちろん私の講座を受講して,
それなりに気に入ってくれたからこそこうしたコメントを寄せてくれたはずです.
今回, ようやくそれに対する解答を 1 つ出した形です.
内容としても高校では触れないタイプの確率論・統計学や,
機械学習の入門の入門レベルの話も扱っています.
簡単な例をこってり計算して学習の進展の様子も見せています.

プログラミングでこそ身につく数学の基礎

上では数値計算系の議論には不足・不満があるとは書きました.
しかしそれは既存の中学・高校のカリキュラムと合わせた上での話です.
実際には中学・高校の数学を深く理解するためにこそプログラミングが使える場面もあるのです.
それは例えば中高数学のハイライトであり,
物理・工学だけではなく統計学への応用上も決定的に大事な微分積分の理解にとって重要です.

1 つは微分係数の近似数値計算です.
高校での極限はとてもふんわりしていて,
まともな理屈にはなっていません.
そして多項式の微分は指数の肩を落としてくればいい,
三角関数・指数関数・対数関数は謎の計算規則・記号運用ルールとしか捉えられていない人も多くいます.
実際, それで高校数学は乗り切れます.
しかし, こうした理解では物理・工学・統計学での実応用で困るのです.

ではどうすればいいか?
そこでプログラムによる数値計算や近似が役に立ちます.
実際に「十分に小さい極限を計算していけば本当に極限の値 (の近似値) が得られる」ことをいろいろな例で確認するのです.
極限をきちんと理解するには悪名高き \(\varepsion\)- \(\delta\) 論法が必要なことになっていて,
この理解を阻む要因はいくつかあります.
そのうちの 1 つ, 極限の直観的で具体的な理解はこの数値計算で磨けます.

そしてもう 1 つ大事なのは微分方程式への応用です.
無料講座でも説明しているように,
物理への応用としては微分方程式の数値計算があり,
この講座でも取り上げています.
微分方程式の数値計算では, 微分を定義にしたがって離散化して近似します.
高校の微分では微分の記号運用だけで何とかなってしまうので,
微分の定義と向き合う時間が少ないのが実情です.
数値計算では微分の定義と向き合わざるを得ないのです.
そしてこれこそが微分の感覚を肌感覚として叩き込むのに役に立つのです.

もう 1 つ, 積分の数値計算とアニメーションもそうです.
私自身, 高校の頃から納得いかなかった説明があります.

  • 微分と積分の逆の演算である.
  • 微分を使うと曲線の接線の傾きが求められる.
  • 積分を使うとグラフが囲む領域の面積が求められる.
  • 接線の傾きを求める演算と, 面積を求める演算が逆というのはどういうこと?

特に多項式に対して, 高校ではまさに積分を微分の逆演算として定義してしまっています.
実際には微分と積分にはそれぞれ別々の定義を与え,
それが互いに適当な意味で逆演算であることを示すことこそがいわゆる微分積分学の基本定理です.
微分と積分を単なる演算ルールとみなす立場からは,
高校の定義はわかりやすいのでしょう.
しかし, この凄まじい結果を先取りしているせいで,
逆にそれぞれの意義は見えにくくなり, 直観的な理解も難しくなるのです.

本来, 積分はいわゆる区分求積法で定義します.
高校だと区分求積法は面積を求めるためにぽっと出で出てくる印象もあり,
謎の計算法と捉えている人もいるようです.
実際にはこれこそが積分であり, これで面積を求められます.

教科書・参考書にも何となく図がついていて,
細かくすれば確かに該当の図形を埋め尽くせて面積も出そうと思えている人もいるでしょう.
しかし, 教科書にある静的な図ではどうしてもわからないという人もいます.
そこで使いたくなるのがプログラミングで作った近似のアニメーションです.
この近似アニメーションを見てようやく積分の気分がわかったという人もいます.

このアニメーションは慣れていないとなかなか作りづらいのです.
こういう場合, デファクトスタンダードのライブラリとして matplotlib があります.
この matplotlib がまた使いづらいのです.
私の物理系の知人でも, matplotlib は何となく使えるが,
細かい部分を調整しようと思うと途端に全くわからなくなり, 本当にきついとよく言っています.
何も知らないところから自力で何とかするのは本当に大変です.
そこでこのコンテンツは重要な例はおさえつつ,
できる限りいろいろな事例を具体的な動くコードで紹介しています.

プログラミングを勉強する目的を作る

これはどちらかと言えば実際の中高生向けの話です.
最近, プログラミングが重要と言われています.
オバマ前アメリカ大統領も演説で重要性を語っていますし,
学校教育にも本格的な導入されようとしています.

しかし, 教育現場ではどう教育していいか試行錯誤している段階です.
学校教育のみならず, 一般的なプログラマー向けの教育カリキュラムもまだ未発達と言っていいでしょう.
どう勉強していけばいいか, 社会として見えていないのです.

いま勉強の指針としてよく言われるのは次の 2 つです.

  • 実際に作りたいモノ (アプリケーション) を作ってみる.
  • ゲームを作る.

前者に関しては, 実際に何か世に不満があってそれを解決したかったり,
作りたいモノがある人にはいいのです.
後者もゲームが好きで, そして作ってみたいと思う人にはいいでしょう.
しかし, 皆が皆こういう趣味を持っているわけではありません.
何を隠そう, 私自身, こうした視点からのプログラミング学習には挫折したクチです.

別に作りたいアプリケーションがあるわけではなく,
ゲームを作りたいわけでもありません.
そんなとき, ふと気付いたのです.

  • 物理の数値計算・シミュレーションをやっている人がいる.
  • その蓄積もたくさんあり, コンテンツもたくさんある.
  • 私自身, 物理や数学には興味も知識も世間の水準を遥かに越えるレベルで持っている.
  • 興味がないところで無理にがんばるより, ダイレクトに物理・数学を使って勉強すればいい.

コンピューター自体, 本来計算機なのであって,
物理現象のシミュレーションのために生まれ, 発展してきた部分があります.
直接それをやればいいのです.
そしてこれまでの情報発信を通じて私と同じ趣味を持っている人も多くいるのはよくわかっています.
自分が面白いと面白いものを作ればそれで喜んでくれる人がいるのも知っています.
そこを愚直に詰めていこうというのがこのコンテンツです.

上でいろいろ説明した通り,
作る準備をしていて一筋縄で行かないことはうんざりするほどたくさんありました.
物理・数学で大学院まで出ていてそれでもなおうんざりするほど苦労したのです.
その苦労を解消しながら作った結晶がこのコンテンツです.
もしあなたが物理・数学系に興味があるなら,
かゆいところに手が届くコンテンツになっているはずです.

どうやって生きていくかを考える

これも中高生向けの内容です.
そしてプログラミング教育担当の先生や,
子どもにどうにかしてこれからの世界を生き抜いてほしいと願う保護者の方向けのメッセージでもあります.
それは職業教育としての数学・物理・プログラミングです.

これらは実際にお金を生む分野でもあるのです.
例えばゲームや映画の CG はコンピューターグラフィックスの名の通り,
コンピューターで計算させて描いています.
ごく簡単な状況に限定してはいますしそうせざるを得ませんが,
このコンテンツで扱っているのはまさに CG の基礎です.

これをなめてはいけません.
例えば世界的な企業であるピクサーでも直接応用されている技術です.
2019 年にはピクサー作品の制作工程を科学や数学などで紐解く「PIXARのひみつ展 いのちを生みだすサイエンス」という展示もあったほどです.
CG のための数値計算, そして関係する数学・物理・工学はとてもクリエイティブな営みなのです.
アニメや映画が巨大産業であることは論を待たないでしょう.
実際に鍛えに鍛え上げればこれで食べていけるのです.

他にもいろいろな産業応用があります.
ここでは直接的に物理・工学の話を持ってきます.
メーカーでものづくりをするとき, 品質保証はとても大事です.
1 番確かなのは現物を作ってテストすることです.
一方でいちいちモノを作ってテストしていては莫大な費用と時間がかかります.
それを少しでも減らすため, 実は各企業には数値計算・シミュレーション部隊があります.

そしてこのシミュレーションソフトを作っている会社もあります.
これがまたそれ相応の規模があるのです.
例えば 2019 年には 800 億円レベルの企業買収案件もありました.
物理・数学・プログラミングでこのくらいの規模のお金が動く業界が実際にあるのです.

  • 物理をやっていて何の役に立つ?
  • 数学をやっていて何の役に立つ?

こういう人はよくいますし, この言葉で言いたいことも人それぞれです.
しかし, 本当に疑問に思っている人もいて,
それさえわかれば真剣に打ち込めるという人もいます.
特に工学系の趣味・興味がある人はまさにそういう人です.
そうした人たち向けの具体的なメッセージと具体的に何をすべきか,
1 つの道を示したのがこのコンテンツです.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

「あなたは誰ですか?」

ここまで, 今回提案するコンテンツが何故どんな経緯で生まれたのか,
何を意識してどんな構成にしているのか,
このコンテンツを何を学び, どう活かしてほしいのかを説明してきました.
そして自分が中高の頃に困っていたことを解消するコンテンツにする,
そんなことも書いています.

当然, 私にそんなコンテンツが作れるのかと思っている方も多いでしょう.
あなたもそうかもしれません.
そこで簡単に私の話もしておきます.

大学・大学院は早稲田・東大

まず大学は早稲田の理工学部 (当時) で物理学科に進学し,
修士では東大の数理科学研究科で量子系の数理を専攻し, 研究していました.

この講座では数学とその物理への応用が軸になっています.
まさにそこを守備範囲として勉強・研究してきたのが私です.
一流の学者の背中を見て,
彼ら・彼女らの取り組み方を学び, 実践してきました.

院を出たあと: 数学・物理の継続

修士を出たあとは数学や物理とは関係ない一般企業に就職しました.
それでも趣味で数学や物理を続けていて,
SNS で大学教員を含めた数学・物理・その他専門的な訓練を積んだ人々と交流していました.
その中で早稲田・東大・京大・東工大などの大学生相手に数学や物理のセミナーをしたり,
京大の数学イベントで講演したり,
高知工科大では教員から正式に招待されて大学の公式のホームページに載るような講演をしたこともあります.

つまり社会人として働きながら数学や物理の勉強を続け,
インプットに留まらずいろいろなアウトプットもしてきています.
こうした中での工夫も,
同じく社会人として働きながら数学や物理の勉強が必要な方の参考になるようで,
いろいろな要望を受けて勉強法などのコンテンツも作って販売しています.

中高生向け教育への展開

最近プログラミングが公教育に取り入れられる話がよく取り沙汰されています.
そして教育の現場で実際にどう対処していけばいいか困り果てているという話も出ています.
これを書いている時点で大人向けにも流行りの人工知能・機械学習の話もあれば,
もっと気楽にゲームを作る話もあれば,
興味のあるテーマに対してウェブサイトを作る話もあるようです.

私自身プログラミングを勉強する上でいろいろなことを考え実践してきました.
ゲームならそれ自身で遊べます.
ゲーム内の敵の動きに関する「人工知能」の話もあります.
敵キャラの動きと言えばシューティングゲームでは弾道に関する数学の話もあり,
やりようによっては総合格闘技の趣さえある非常に魅力的なテーマです.

しかし私自身が勉強しようとしてみてこれらの勉強は続きませんでした.
どうしても興味が持てず, 飽きてしまったのです.
人によって趣味嗜好は違います.
上で紹介したテーマで楽しめる人はもちろんそれで構いません.
既にコンテンツもたくさん供給されているのでむしろよい環境が提供されています.

そんな私が飽きずに打ち込めたテーマが何かといえば,
物理・工学で表れる微分方程式の数値計算です.
あくまで私の場合のケースにすぎませんが, 私はこれなら一日中でもやっていられます.
こうした人が多いとは思いません.
しかし, 数学や物理は世間では蛇蝎のごとく嫌われている一方,
大学・大学院ではそれらを愛してやまない熱狂的な人が一定数確実に存在することもわかっています.
そうした人々もかつては中高生だったわけで,
同じように感じる現役中高生も一定数いるはずです.

さらには大人になってプログラミングではなく,
中高の数学や物理を再勉強したいと思っている人達も多くいます.
そうした人たちからの要望を聞いていくと視覚的・直観的な理解を重視したい人も多いのです.

視覚的・直観的な理解というテーマについては数学でも大事な話があります.
フィールズ賞受賞者であり, 超直観型の幾何学者であるサーストンは自分の幾何学的なイメージが誰にも通じないことに業を煮やし,
自分が感じている幾何学的直観を誰にとっても明らかにするため,
CG の研究をはじめたというエピソードがあります.
つまり視覚的・幾何的直観がほしいなら,
自分でほしい図を描けるようになればいいのです.
そこでプログラムを使って自力で描けるようになってもらおうというのが 1 つの大きなテーマです.

そうは言っても何からどうはじめればいいのか, という話もあるでしょう.
そこで中高数学をテーマにしていろいろなグラフを描くことが 1 つの目標です.
そしてもう 1 つ, 物理と深い関係があり工学的応用・企業活動上も大事な微分方程式の議論で,
物理現象を目で見る形で視覚的・直観的理解を磨いてもらいたいと思っています.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

コンテンツについて詳しく!

コンテンツの説明

そろそろこのコンテンツの詳細を説明します.
まず大きな章立ては次の通りです.

  1. イントロダクション: コンテンツの使い方, 学習環境・プログラミング環境について
  2. プログラミングの基礎, Python の基礎, 数値計算用プログラミングの基礎
  3. 線型代数: ベクトルと行列の話
  4. 極限・微分・積分
  5. 確率論, 統計学, 機械学習
  6. 常微分方程式とその数値計算
  7. 偏微分方程式とその数値計算

コンテンツの使い方

第 1 章はこのコンテンツの勉強の仕方についてです.
大事な注意です.
プログラムの読み書きができなくても勉強できるように注意して作っています.
プログラムで描いた図を挿入していますし,
プログラムを実行しなければ動画が見られない場合も YouTube へのリンクを貼ってあります.
もちろんプログラムを読み書きできた方がより楽しめますが,
できなければできないなりの活用法があります.

一方でプログラムを読み書きできるようにしたい人も多いでしょうし,
実際に読み書きできた方が学習効果が高いのも事実です.
初学者にとって鬼門なのは実はこのプログラミング環境構築です.
最近はいろいろ便利な仕組みも増えています.
それらも紹介しています.

プログラミングの基礎

第 2 章は参照用です.
必要なときに参照してもらえればよく,
初読では読み飛ばしてしまっても構いません.
何ができるのか視覚的に確認する上で役に立つので,
最初にざっと眺めてもらった方が助かる人も多いはずなので,
はじめの方に盛り込んでいます.

第 3 章以降は数学または物理を軸に議論を進めますし,
こちらこそが本編です.
しかしプログラムの視点からのまとめもあると便利ですし,
私自身ほしかったコンテンツです.
そこで, サンプルプログラム集の形で数学の解説抜きにいろいろまとめてあります.
これは頭からみっちり勉強するよりも,
大きく眺めて「こんなこともできるのか!」とわくわくしてもらいたい部分です.

プログラミングは日進月歩で 1 年前のコードが動かなくなること,
書き直さなければならなくなることも多いのです.
つまりプログラミング解説パートはすぐに陳腐化してしまいます.
なるべく激しい変化がないように気をつけてはいますが限度があります.

それでもこのコンテンツを楽しむ上で必要最小元の内容はないとよくないでしょう.
特にこのコンテンツで重要なライブラリについて,
どうすれば何ができるのかをまとめています.

上で書いた通り, 第 3 章以降が本番です.
中高数学, そして応用上大事な分野をプログラムを使って計算し,
その結果を可視化するという視点から解説しています.
理論面は既にいいコンテンツがたくさんあるので,
餅は餅屋に任せてなるべく多くの具体例を扱うつもりで作っています.

もちろん, 具体例はあなた自身でどんどん作っていってください.
あなた自身で改変しやすい形で作っています.
面白い例ができたらぜひ教えてほしいですし,
「こんな例が作りたいが作れない」というのがあればぜひ相談してください.
作者と受講者の心理的距離が近いのがこのコンテンツのいいところでもあります.

常微分方程式とその数値計算

上の順番を無視してこれを先に紹介しておきます.
この常微分方程式は章は上でも紹介した無料講座です.
この講座でも紹介するべき重要な内容がたくさん含まれているので,
Jupyter notebook の形式に整理し直して再録しました.

この講座の基礎知識のまとめにもなっていますし,
既に受講されている方にとってもいい復習になるでしょう.
イントロダクションが終わったら真っ先に読んでもいいほどです.

常微分方程式には多彩な応用があるので,
物理への応用だけではなく, 経済や生物の事例も盛り込んでいます.
他の部分でベクトル・数列・関数の理論的な取り扱いが薄いのは,
この章 (無料の通信講座) で気持ちと視覚的理解を重視しながらゆったり議論しているからです.

微分方程式というと凄まじくごつい対象のように聞こえるでしょう.
しかし, 数値的に解くという視点から見ると,
四則演算しか扱っていません.
四則演算で微分を理解するという重要なテーマにはぜひ触れてほしく,
無料講座で積極的に取り上げた理由です.

行列とベクトル

人によっては 1 番の興味関心かもしれません.
いま流行りの機械学習や統計学でよく言及されるテーマだからです.

このコンテンツではプログラムにどうやって載せるかを議論したあと,
統計学などの応用上でも大事な固有値・固有値ベクトルの計算を議論します.
線型代数単独の内容としてはここにフォーカスしています.

無料講座の内容である常微分方程式の章で,
高校で議論する矢印としてのベクトルの話をしています.
微分積分のうち特に微分は本質的に線型代数の議論とも言えます.
理論・計算・直観・プログラムによる図示といった様々な点から見て,
他のところでカバーしている内容も多く,
線型代数の章として, 特に 2 次元の手計算でも処理できる固有値・固有ベクトルがメインです.

極限・微分・積分

ここがこのコンテンツの特徴的な章です.
なぜかと言えば数式処理のプログラムの話をしているからです.
具体的にはコンピューターに具体的に計算させる数値計算では到達できない,
極限の処理を sympy を使って実現しています.

特に中高生が実際に高校の勉強と併用して使う場合,
教科書に書いてある厳密な式をプログラムでも確認したくなるはずです.
しかし既存の本に多い numpy による数値計算ではそうした厳密な表式を計算できません.
そこで sympy を使った数式処理, いわば記号処理で厳密な値を出すプログラムを紹介しています.

積分については面積と結びつけるためのアニメーションを用意しています.
高校では積分は微分の逆演算として導入されてしまうせいで,
積分との直観的な対応づけに苦労している人をよく見かけます.
それをフォローするためにプログラムと動画を使っています.

コピペと簡単な修正でいろいろ遊び倒せるようにしているので,
ぜひプログラムを勉強してぜひ読み書きできるようになってください.

確率論, 統計学, 機械学習

確率論・統計学については概念的な基礎づけをかなり重視しました.
世にあるコンテンツの説明が全くわからず,
私自身勉強にものすごく苦労したからです.
その分, 内容が難しい部分もあります.
どちらかと言えばこの講座の主眼はプログラムに計算させる部分です.
概念的な部分が難しければどんどん飛ばして,
数値計算とグラフを描く部分を楽しんでください.

機械学習は入門の入門の入門くらいの位置づけです.
最近の応用状況からすると, 機械学習は現実的すぎて非常に難しいコンテンツが多いように思います.
そこで暴力的に単純な 1 ニューロンのニューラルネットワークの学習過程をグラフを見ながら確認するだけにしました.

しかしこれは馬鹿にしたものではありません.
私自身, 具体的に計算して図示して, ようやく気分が掴めた部分もあります.
理屈ではわかっていたものの,
実際に具体的に計算してみたことがない部分だったので,
とても勉強になりました.
こういう具体的な計算の重要性を見てもらうのが目的です.
具体的な計算をしようにも自力ではどうにもならない量があるとき,
プログラムを使う・使わざるを得ないことも見てもらいたいと思います.

偏微分方程式

最後は 6 章の常微分方程式以上に現実的な例に迫ります.
工学的応用上も重要な物理に出てくる偏微分方程式を議論します.

はじめ, 機械系をはじめたとした工学系の基本教養である流体力学にしぼって議論しようと思っていました.
しかし中高数学の学習を基盤に据えたこのコンテンツで触れるべき複雑を遥かに越えてしまったため,
シンプルに次の方程式を解くだけに留めました.

  • 1 次元の移流方程式
  • 1 次元の波動方程式
  • 1 次元の拡散方程式
  • 1 次元のラプラス方程式
  • 2 次元の波動方程式

この方向性でもっと勉強したいという人も多いでしょう.
あなたもそうかもしれません.
読みやすいかどうかはともかく,
この方向なら既に世にコンテンツはたくさんあります.
とりあえずそれを勧めて間をしのげるので,
このコンテンツでやりすぎることは控えました.

もしあなたが流体系の専門教育を受けたことがないのなら,
そんなあなたの想像を遥かに越えたレベルで重要な分野です.
ネット上にはプログラムつきの無料の資料もたくさん転がっています.
本も本当に掃いて捨てるほどあるので,
それらのコンテンツを勉強してもらえれば十分ではあります.

しかしというかもちろんというか,
それが軽くできたら苦労はしません.
まず上で説明したようなプログラミングから見た欠点があります.
それらのコンテンツは最終的に工学に使うことを意図していますし,
大学院レベルのコンテンツも多いので,
そのレベルの物理・工学の知識を要求してもいます.
応用上必要な水準を保つため,
きちんと議論するにはベクトル解析などこの講座本編で扱っていない数学の分野も必要です.

このコンテンツではそうした物理や難しすぎる数学要素は排除し,
偏微分方程式を解いてアニメーションを眺めて楽しもうという視点で整理しています.
何より, 微分方程式の数値計算は四則演算しか使いません.
四則演算をぎりぎり限界まで使い倒すと何ができるか,
それがどれだけ難しいか,
だからこそ人・才能・お金がいるのだと知ってもらうことも大事な目的です.

ここでは議論しきれませんでしたが,
流体現象は見て楽しめる要素もたくさんあります.
YouTube などネット上には実験動画も数値シミュレーションの動画もたくさんありますし,
私もいくつか公開しています.

数学とプログラミングに議論を絞り込んだとはいえ,
それでもかなり難しい部分です.
一方でアニメーションの楽しさでは 1 番です.
あなた自身の状況に応じていろいろな楽しみ方があります.

どんな人に向いているか?

次のような人に向いています.

  • ある程度中高数学の大枠が掴めていて, もっと詳しく勉強してみたい人.
  • 既存のいろいろな本やコンテンツで数学を勉強してきたが, もっと視覚的・直観的な理解がほしい人.
  • 物理に必要な数学という視点から勉強してみたい人.
  • 勉強や研究で数値計算系のプログラミングが必要になったが, いいコンテンツが見当たらないという人.
  • 物理・工学への応用を意識しながら数学・プログラミングを勉強したい人.
  • プログラミングを勉強してみたいが, 何からどうはじめればいいかわからない人.
  • プログラミングができなくても, そのパートをうまいこと読み飛ばして進められるパワーがある人.

このコンテンツはいま流行りの統計学・機械学習系の応用ではなく,
実際に学校で勉強する中高の数学, そして物理への応用を強く意識しています.
実際, 最後に物理に関わる偏微分方程式の数値計算まで紹介しているので,
もしあなたが物理を勉強するために中高数学を復習したいと思っているなら大いに参考になるはずです.

どんな人に向いていないか?

逆に次のような人には向いていません.

まず, これは無料講座の続編という位置づけで作っています.
この講座は中高数学再入門の無料講座で紹介した程度の内容は知っていることにしています.
数学を本当に 1 からやろうという人には向いていません.
ただし副読本として使うなら問題ないでしょう.
うまく使ってください.

無料講座の内容はこの講座にも盛り込んではいます.
しかしそれだけなら無料で受講できます.
先にそちらをお試ししてテイストが合うかどうかも含めて確認してください.

もしあなたが実際にこの講座でプログラミングまで勉強しようと思っているなら,
パソコンが必要でしょう.
プログラミングにまできちんと取り組みたいなら,
パソコンを買ってもらう必要があります.
そしてパソコンのいろいろな操作などもできてもらわないと困ります.

タブレットならまだしもスマホだとさすがに厳しいでしょう.
そして 1 からプログラミングを勉強する・書けるようになることに関しては過剰な期待は避けてください.
本来それだけで 1 つコンテンツが必要な内容です.
プログラム未経験でも計算機に計算をさせるという意味でプログラムの雰囲気はつかめると思うので,
そういう意味でのプログラミング入門にはかえっていいのかもしれません.
しかし保証はできません.

プログラミングは本もありますし,
ネット上にいろいろな資料やコースもあります.
まずはそれを 1 回通してやってみて,
数値計算の上ではどうしていけばいいか,
このコンテンツで具体的に見ていくのはとてもいい流れでしょう.

この講座では理論面には深く踏み込みません.
もしあなたが理論面に強い興味があるというなら,
それもこのコンテンツの方向性とは合いません.
ここでいう理論は, 極端に言えば大学レベルの極限の理論や,
線型代数の抽象論・一般論です.
ここではむしろ, そうした理論の前に具体例に触れ,
計算練習しつつ図示して感覚を掴み,
慣れ親しむことを目標にしています.

どんな状況のどんな人にも合う万能のコンテンツはありません.
もしこのコンテンツがあなたにとって最適と思えないなら,
無理に手に取るのは控えてください.

このコンテンツで勉強するメリット

すでにあるコンテンツと同じならわざわざ作る必要はありません.
改めて整理しておきます.

中高の先の姿まで幅広い応用を見据えながら勉強できる

  • 勉強のモチベーションが保てる
  • 自分の興味に応じた視点で応用が意識できる

この 2 点が重要なポイントです.
何度か書いているように,
特に既存のプログラミング系コンテンツでは抜けがちな物理中心の数学応用に強いのが特長です.
物理はおよそ理工系なら必ず必要になる分野です.

先に進むための基礎知識・体力が涵養される

すぐ上で説明したようにこれは中高数学の先々の姿を散りばめたコンテンツです.
応用のためには十分な基礎知識・知的な基礎体力が必要です.
何だかんだいっても, 広く理工系では数学と物理は基礎教養です.

例えば看護を含めた医学ではレントゲンによる診断があります.
このレントゲンの原理には電磁気学のかなりハードな議論が出てきます.
看護や医学でどこまで深く勉強するかはともかく,
実際に裏では物理が使われているのです.
最近はガンに関しても粒子線による医療もあります.
この粒子線は量子力学などにも踏み込んでいます.
医療の高度化に合わせて使う物理も高度化しています.

そして実は薬学でもレントゲンの議論は重要です.
何故かというと薬の解析をするときに X 線分析が必要で,
それがまさにレントゲンと同じ原理なのです.
実際, 私は薬学部に進んだ高校の頃の友人から
X 線分析がよくわからないから教えてほしいと相談を受けたことがあります.
詳しい理論は知らなくても使えるから問題はないのだが,
すっきりしなくて気持ち悪い, そう言っていました.

看護・医学のところでも書いたように知らなくても困らないかもしれません.
しかし直接使いはしなくても, 陰に陽に世の中は物理で動いています.

コピペなしですぐ動き, 本を読まずに Jupyter 単独で見られる

実際に私がいろいろな勉強をしていて不便さを感じた部分です.
既存のコンテンツ, 特に本は本がメインコンテンツとしてある中でプログラムは
GitHub などで無料公開している状態です.
無料公開している部分にメインコンテンツは載せられません.
もちろん全ての人が PC を持っているわけでも使いこなせるわけでもない以上,
本単体で意味を持たせるのはとても重要ではあります.
しかし PC を使いながら勉強したい人にとって,
突き合わせながら両方見ないといけないのでは勉強しにくいのも確かです.

プログラムを実行すると動画形式になっているコンテンツもありますが,
もちろんプログラム実行環境が必要で,
これはこれで本だけでコンテンツが閉じていません.

どうせプログラム利用でパソコンが必要なら,
いっそはじめからパソコンでの受講を前提にしてコンテンツを作り切ってしまうのは一手です.
そして実際にそうしたのがこのコンテンツです.

定量化する: 時短できる, 他の本を買うコストカットになる

ここまでも何度か書いたように,
このコンテンツは私自身が勉強してきた中で困った問題を解消するコンテンツです.
そして大事なことは, この「勉強」は大学・大学院を出たあとの勉強であることです.
つまり物理・数学を大学・大学院で専門に勉強した身であってもまだなお厳しい事情があるのです.

プログラミングの勉強をしようにも自分が興味を持てるような形のコンテンツがなく,
一方で物理系の数値計算の本はプログラミングの観点からはひどく勉強しにくいのです.
いろいろな本を買い漁り, ネット上の資料も収集して整理したのがこのコンテンツです.

既に世にある本やコンテンツは確かに役に立つので無駄になったとは思っていません.
しかし「まずは入門としてこういうコンテンツがほしい」というコンテンツにはいまだ巡り会えていません.
ここで既存のコンテンツの不満点を紹介しているので,
今後はこの不満点を解消してくれるコンテンツも増えていってくれることを期待してはいます.
それでもいまは私の視点で系統立った基礎的ないいコンテンツがないのです.
ここまで説明してきた事情に納得できるなら,
このコンテンツはあなたにとって大いに参考になるはずです.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

未来イメージ

いろいろなモノで遊べるようになる

このコンテンツをくり返し勉強し, あなたの血肉にしてもらえれば,
あなたには物理系の応用を意識した中高数学の基礎が身についています.
この基礎があると世の中の「遊べる」対象が飛躍的に増えます.
たいていの理工系のネタに触れられるようになるからです.

応用数学を含めた数学系に進んでもいいでしょうし,
機械工学のような工学まで含めた物理・応用物理もありえます.
プログラミングの視点からは情報系に進んでもいいでしょう.
高速計算という視点から情報の理論系に進む道もあれば,
高速計算を実現するためのハードウェアに進む道もあります.
少し突っ込んだ世界に進むと計算の高速化は非常に重要です.

映像系やゲームプログラミングなどへの展開もある

最近の映像には CG が広く使われています.
ゲームプログラミングに留まりません.
それらしく見えればいいので現実の物理を忠実に CG で再現する必要はありません.
しかし「それらしく」見えるようにするにはそもそもの物理を知っている必要があります.
そういうときにもこのコンテンツの内容は役に立ちます.

この CG 技術は特に Pixar のような超一流企業などでも重要な技術です.
数学・物理・プログラミングを制圧していればそうした道さえも開けます.
もしあなたが中高生なら,
まず間違いなくこの 3 つはあなたの想像以上に社会に広く深く浸透しています.
ぜひ多様な視点を持って勉強してください.

プログラミングの技術はお金になる

あえてこの話もしておきましょう.
特に中高生には重要です.
数学・物理に限らずプログラミングの高度な技術はそれだけでお金になります.
商品を作れるからです.
あなたに何かのアイデアがあれば, それを形にできる技術なのです.
それが多くの人の役に立つならそれで感謝され,
その感謝がお金の形であなたに届きます.

現実問題として生きていく上でお金は本当に大事です.
このコンテンツを中高生向けに展開するときに本当に意識したことです.

このコンテンツを整備しようと思った 1 番の動機は,
実は私の地元の中高生向けの理工系教育用のコンテンツです.
率直に言って, 私の地元は教育事情だけではなく収入事情も厳しいのです.
私自身も現実問題として学費をどうするかは非常に大きな問題でした.
私は中学 3 年で白血病になったため体力がなく,
肉体労働が絡むようなアルバイトは全くできなかったのです.
実は世の中にはプログラミングでできるアルバイトや仕事もあります.
実際に将来の仕事に直結した形でお金が稼げます.
プログラミングを基礎にした学生起業さえあるのです.

実際に起業するかどうかは人によります.
しかし, 実際に役に立つ・稼ぎに直結する「勉強」があることを伝えたい,
そして私の専門である数学・物理を絡めた形で何とかできないか.
そう思ってどうコンテンツを構成すればいいか考えてできたのがこのコンテンツなのです.

このコンテンツを手に入れたいなら

しばらく無料公開します

もともとこのコンテンツは有料のコンテンツとして提供する予定でした.
相応の力を持つ人間が相応の労力をかけて作ったコンテンツだという自負もあります.
しかし昨今の事情もあるのでこのコンテンツはしばらく無料公開します.
次のリンク先の登録フォームから登録してもらえればメールでコンテンツの URL をお届けします.
現状無料です.
ぜひ気軽に登録してコンテンツを Get してください.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

迷惑メールになっていないか確認してください

改めて大事な注意です.
最近は迷惑メール判定が厳しくなっていてあなたのメールボックスに届かない可能性があります.
特に Apple 系のアドレスである icloud.com, me.com, mac.com はかなり厳しく,
迷惑メール以前にサーバーで弾かれているのではないかと疑うほどです.
Gmail は比較的届きやすいようなので Gmail での登録をお勧めします.
Gmail にしても迷惑メールに入っていないかご確認ください.

面白い具体例ができたらぜひ教えてください

このコンテンツはあなた自身にいろいろ数値実験してもらって楽しんでもらうコンテンツです.
そのための基本的な動くコードを提供しています.
一方, ボリュームが多過ぎると逆に勉強が大変になることもあり,
あえて削った内容もあります.
面白い数値実験ができたら他の人にも共有していきたいので,
ぜひ教えてください.
メールでも構いませんし各ノートに貼ってあるアンケートからでも構いません.

私自身, 最近はいろいろな数値実験を GitHub で公開しつつ,
YouTube にその動画をアップロードしていますし,
随時メルマガや SNS で報告しています.
そうした「補足コンテンツ」もあなたの勉強に活かしてください.

プログラミングで数学を (中高数学虎の穴) の登録はこちらから

RETURN TOP

記事の編集ページから「おすすめ記事」を複数選択してください。