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

数学・物理・プログラミングの 3 点セットで行こう

プログラミングで数学を 中高数学再入門

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次のように主張する人もいます.

表面的なプログラミング言語に選択に依存するのはよくない. 細かいミスにも対応でき, 自力でプログラムを書けるだけの力をつけること, 原理にまで遡って深く理解することが大事だ.

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

もっと言えば, 大人になってから勉強しようという人にとって, 勉強時間を確保するだけでも大変です. やっとの思いで確保した勉強時間が瑣末なバグ取りに費やされてしまうのでは, 勉強を続ける意欲もひどく削られます. 勉強しはじめの状態ではコピペでプログラムが動いただけでも感動するものです. 勉強を続けるため, 小さな感動を積み上げていくのは何より大事なことです.

もちろんこれは私自身の実体験でもあります. こうした思いを込めた作ったのが今回のコンテンツです.

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

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

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

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

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

イントロダクション

コンテンツの使い方

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

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

プログラミングの基礎

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

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

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

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

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

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

メールでコンテンツを配信する形式を取るため, お互い既にメールアドレスを知っている状態です. ふつう本の著者と簡単にコンタクトを取れる状態にあるのは少ないです. それがある分, 著者である私と受講者であるあなたの心理的距離が近いのがこのコンテンツのいいところでもあります.

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

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

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

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

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

行列とベクトル

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

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

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

極限・微分・積分

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

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

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

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

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

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

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

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

偏微分方程式

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

はじめ, 機械系をはじめたとした工学系の基本教養である流体力学にしぼって議論しようと思っていました. 目で見て楽しく, しかも身近で具体的な応用もある現象が多いからです.

しかしこのコンテンツは中高数学の学習を基盤に据えています. 流体力学の議論, 特にプログラムはその基準で触れるべきレベルを遥かに越えてしまいます. そこでシンプルに次の方程式を解くだけに留めました.

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

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

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

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

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

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

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

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

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

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

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

多少の数学的知識・耐性があるか?

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

テイストが合うか?

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

パソコンがあるか?

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

プログラミングスキル向上への過度な期待

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

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

数学の理論的な深い理解を求めるか?

この講座では理論面には深く踏み込みません. もしあなたが理論面の理解を深めることに強い興味があるなら, それもこのコンテンツの方向性とは合いません.

ここでいう理論は, 極端に言えば大学レベルの極限の理論や, 線型代数の抽象論・一般論です. ここではむしろ, そうした理論の前に具体例に触れ, 計算練習しつつ図示して感覚を掴み, 慣れ親しむことを目標にしています.

万能薬はない

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

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

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

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

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

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

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

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

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

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

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

実際に私がいろいろな勉強をしていて不便さを感じた部分です. 既存のコンテンツ, 特に書籍はそれ自体がメインコンテンツとしてある一方, プログラムは GitHub などで無料公開している状態です. 無料公開している部分にメインコンテンツは載せられません.

もちろん全ての人が PC を持っているわけでも使いこなせるわけでもない以上, 本単体で意味を持たせるのはとても重要ではあります. しかし PC を使いながら勉強したい人にとって, 突き合わせながら両方見ないといけないのでは勉強しにくいのも確かです.

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

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

時短できる, 他の本を買うコストカットになる

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

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

既に世にある本やコンテンツは確かに役に立つので無駄になったとは思っていません. しかし「まずは入門としてこういうコンテンツがほしい」というコンテンツにはいまだ巡り会えていません.

このコンテンツではそうした既存のコンテンツの不満点を紹介しています. 出版関係の方の目に止まれば, 今後はこの不満点を解消してくれるコンテンツも増えていってくれるでしょう. それを期待してコンテンツを作ったという経緯もあります.

それでもいまは私の視点で系統立った基礎的ないいコンテンツ, 私の視点で人にお勧めできるコンテンツがないのです. ここまで説明してきた事情に共感できるなら, このコンテンツはあなたにとって大いに参考になるはずです.

未来イメージ

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

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

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

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

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

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

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

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

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

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

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

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

お値段はいくら?

ここまで読み進めてきたあなたはこのコンテンツを手に入れる意志があるのだと思います. いろいろな理由がありますが, このコンテンツは有料で提供しています. 金額は19,800円 (税込) とします. もしあなたにご興味があり, この金額に納得できるならぜひご購入ください.

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

中高生の受講, それもお小遣いで受講できるようにと思うと, もっと安い費用を設定するべきとは思います. しかし質問に対しては回答する必要がありますし, コンテンツの配信用サーバーを含めた各種サービス管理費もかかります. 特にプログラムはメンテナンスが必要ですし, そうした点まで含めた費用です.

ただ, どう控えめに言っても安い金額ではありません. そして市販の書籍で勉強できるなら, もっと安い金額でおさえられます.

ここで改めてあなたに考えてほしいのは, 学部では早稲田の物理, 修士では東大の数学科 (数理科学研究科) で勉強した私でさえ, プログラミング学習が苦行であった事実です. アプリ開発やゲーム開発など既存のコンテンツでは面白くなく, かといって私が自然に熱中して取り組める数学・物理プログラミングのコンテンツは, 勉強するのがひどく大変だったのです. その数年単位の苦労の末に積み上げた成果をまとめたのがこのコンテンツです.

人にとって時間は本当に貴重な資源です. 大人であればなおさらです. たいていの大人にとって日頃は食べていくための仕事で多くの時間を奪われているからです. その時間をお金で買うのだと思ってください.

実際に勉強をはじめるといくつかの本を買い込み, 必要に応じてネットで検索して必要な情報を集めます. ここに使う金額, そして時間を足し込めば私が提示した金額は軽く越えるはずです. 高校生のアルバイトでさえ大雑把に言って時給 1000 円です. そこまで考えて総合的な判断を下してください.

もちろん上で注意したように, 万能のコンテンツはありません. 内容的に「これは違うな」と思ったら無理して買う必要はありません. ぜひ今のあなたにとって最善の判断をしてもらえれば, と思います.

再まとめ: このコンテンツで得られる未来

再掲になりますが, 改めて紹介しておきましょう.

このコンテンツは中高数学の先の姿まで幅広い応用を見据えながら勉強できます. これによって勉強のモチベーションが保てるようになりますし, 自分の興味に応じた視点で応用を意識しながら勉強できます. 特に物理中心の数学応用に強いのが特長です.

先に進むための基礎知識・体力が涵養されます. これは中高数学の先々の姿を散りばめたコンテンツでもあります. 応用のためには十分な基礎知識・知的な基礎体力が必要です. それを先を見据えながら勉強できるのが特長です.

コピペなしですぐ動き, Web 上で単独で勉強できる形でコンテンツを提供します. 実際に私がいろいろな勉強をしていて不便さを感じた部分を解消しています. 本や PC など意識を分散させることなく, PC 上で提供したコンテンツ単体に集中して勉強できます.

特に大人はまとまった時間が取りにくいでしょうし, 出先で復習したかったり, 細切れの時間を有効活用したいニーズもあります. そこでコンテンツを HTML 化してスマホで見られるようにもしてあります. 本を持ち運び, 勉強のときにいちいち取り出すよりも, いつも持ち運んでいてさっと取り出せるようにしているはずのスマホで勉強できるに越したことはありません. コンテンツ中でプログラムを実行しないと動画が見られないことがありますが, それは YouTube にアップロードしてあり, そのリンクもコンテンツに貼ってあります. いつでもどこでも勉強したいときに状況に合わせて勉強できるようにしてあるのが, このコンテンツの特長です.

時短もできますし, 他の本を買うコストカットにもなります. ここまでも何度か書いたように, このコンテンツは私自身が勉強してきた中で困った問題を解消するコンテンツです. そして大事なことは, この「勉強」は大学・大学院を出たあとの勉強であることです. つまり物理・数学を大学・大学院で専門に勉強した身であってもまだなお厳しい事情があるのです. プログラミングの勉強をしようにも自分が興味を持てるような形のコンテンツがなく, 一方で物理系の数値計算の本はプログラミングの観点からはひどく勉強しにくいのです. いろいろな本を買い漁り, ネット上の資料・情報を収集し, そして整理したのがこのコンテンツです.

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

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

こと稼ぐことに関して考えるとき, 必ずしも「高い」プログラミングスキル技術が必要なわけではありません. 大事なことは価値の交換という視点です. おなかが空いたときにほしいのは必ずしも高級店の一級品ではありません. 空腹が満たせればそれで十分なことも多いのです.

世の中にはいろいろなニーズがあります. 高い技術力が必要な仕事ばかりではありません. 何より, その仕事を頼める相手が見つけられるかどうか, マッチングの問題もあります. そうした身近な「すき間」を埋めるだけでも十分仕事になります. プログラミングと言わずもっとシンプルに, 単なる IT の知識だけでも助かるときと人は多いのです.

ここでプログラミングができるというのは, 世間からすれば IT 知識がある保証のようにはたらきます. 特に中高生にはそうした使い方もできることを伝えていきたいと思っています. 実際に役に立つ・稼ぎに直結する「勉強」があることを伝えたい, そして私の専門である数学・物理を絡めた形で何とかできないか. そう思ってどうコンテンツを構成すればいいか考えてできたのがこのコンテンツなのです.

決して安いコンテンツではありません. 中高生からすれば清水の舞台から飛び降りるような値段でさえあるでしょう. それでも, もしこのコンテンツを手に入れ, きちんと勉強してくれればその投資には十二分に見合う内容であると信じています.

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

ぜひ勇気を持って一歩を踏み出してください.

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

改めて大事な注意です. 最近は迷惑メール判定が厳しくなっていてあなたのメールボックスにメールが届かない可能性があります.

特に Apple 系のアドレスである icloud.com, me.com, mac.com はかなり厳しく, 迷惑メール以前にサーバーで弾かれているのではないかと疑うほどです. Gmail は比較的届きやすいようなので Gmail での登録をお勧めします. Gmail にしても迷惑メールに入っていないかご確認ください.

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

このコンテンツはあなた自身にいろいろ数値実験してもらって楽しんでもらうコンテンツです. そのための基本的な動くコードを提供しています. 面白い数値実験ができたら他の人にも共有していきたいので, ぜひ教えてください. メールでも構いませんし各ノートに貼ってあるアンケートからでも構いません.

ボリュームが多過ぎると逆に勉強が大変になることもあり, あえて削った内容や数値実験もあります. 削った内容についてもファイルは保管してあります. ご興味に応じてお渡しすることもできます. ぜひ遠慮なく問い合わせてください.

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

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

次はコンテンツの中でお会いしましょう.