数学×Pythonプログラミング入門 ― 中学・高校数学で学ぶ

数学×Pythonプログラミング入門 ― 中学・高校数学で学ぶ

羽山 博

中学や高校で学んだ数学を題材にして、Pythonによる数学×プログラミングを学んでみよう。数学の教科書に載っている定理や公式だけに限らず、興味深い数式の例やAI/機械学習の基本となる例を取り上げながら、数学的な考え方を背景としてプログラミングを学べる連載。

第1回 中学・高校数学で学ぶ、数学×Pythonプログラミングの第一歩(2021/07/05)

  • 1. 問題解決の方法を学ぶための最強のツールとは
  • 2. 文法からアルゴリズムへ
    ・コラム 良いアルゴリズムと数学の知識
  • 3. 数学×Pythonを学ぶことの相乗作用
  • 4. 前提知識と目標
  • 5. Pythonプログラミングの準備と便利なライブラリ

第2回 中学数学だけでフェルマーの小定理をプログラミングしてみよう(2021/07/26)

  • 目標: フェルマーの小定理をプログラミングしてみる
  • 1. サンプルプログラム(演算子の利用)
    ・【まとめ】演算と演算子
  • 2. サンプルプログラム(変数の利用)
  • 3. サンプルプログラム(関数にする)
    ・【まとめ】関数の書き方
  • 4. 最大公約数(G.C.D)を求める
  • 練習問題と解答例
    ・(1)アンドリカの予想をプログラミングする
    ・(2)超球の体積を求める
    ・コラム ガンマ関数とは

第3回 中学・高校数学でオイラーのγの近似値を求めるプログラミング(2021/08/19)

  • 目標: オイラーのγの近似値を求める
  • 1. 数列のおさらいをかねたサンプルプログラム
    ・【まとめ】for文による繰り返し、range関数による値の並びの作成
    ・コラム 数学の文字とプログラミングの変数名の微妙な違い
  • 2. 調和数列の和を求めるプログラム
    ・コラム 個数を求めるためのお決まりのパターン
  • 3. オイラーのγの近似値を求めるプログラム
  • 4. 可処分所得の前年度比を求めるサンプルプログラム
  • 練習問題と解答例
    ・(1)ネイピア数(e)の近似値を求める
    ・(2)共分散を求める
    ・(3)株価のn日移動平均を求める
    ・コラム 共分散から相関係数を求めるには

第4回 Matplotlibで折れ線グラフ(正規分布など)を描こう(2021/10/04)

  • 目標1: シグモイド関数のグラフを描く
  • 1. シグモイド関数の定義とグラフの簡単な描き方(基礎知識)
    ・ステップ1: シグモイド関数を定義する
    ・ステップ2: グラフを描く
    ・コラム リスト内包表記を使ってコードを簡潔に書くには
  • 2. シグモイド関数のグラフを描く(プログラムの作成)
    ・ステップ1: シグモイド関数sigmoidを定義する(実装済みなので省略)
    ・ステップ2: xとyの値を用意する: xの値を0.01ずつ増やしながら、対応するyの値を求める
    ・ステップ3: plot関数にxとyを指定してグラフを描く
  • 目標2: 任意の関数のグラフを任意の刻み幅で描く(関数を引数として渡す)
  • 3. 任意の関数のグラフを任意の刻み幅で描く(プログラムの作成)
    ・ステップ1: 関数normdistと関数betadistを定義する
    ・ステップ2: xとyの値を用意する:xの値を増分値ずつ増やしながら、対応するyの値を求める
    ・ステップ3: plot関数にxとyを指定する(実装済みなので省略)
  • 4. 可変個の引数を使って、関数の係数や定数項を自由に指定する
  • 5. 3Dグラフの作成
  • 練習問題と解答例
    ・(1)フーリエ級数を利用して矩形波を描画する例
    ・(2)多変数関数で表された曲面のグラフを描く

第5回 Pythonでグラフを描こう ― 棒グラフ/ヒストグラム/散布図/ヒートマップ(2021/10/11)

  • 目標3: さまざまなグラフを描画する
  • 6. さまざまなグラフを描画する(プログラムの作成)
  • [1]棒グラフの作成
  • [2]ヒストグラムの作成
    ・コラム pandasでもグラフが作成できる
  • [3]箱ひげ図を作成する
  • [4]散布図の作成
  • [5]ヒートマップを作成する
    ・ステップ1: モノクロ(グレースケール)画像を作る方法を知る
    ・ステップ2: カラー画像を作る方法についても知っておく(ちょっと脇道)
    ・ステップ3: ヒートマップの画像を作って表示する
  • [6]複数のグラフを並べて表示する
  • 練習問題と解答例
    ・(1)3D散布図と個別の2D散布図を並べて描画する
    ・(2)回帰分析を行い、散布図に回帰直線を重ねて描画する

第6回 微分法の数値計算をプログラミングしてみよう(2021/11/25)

  • 目標1: 微分の数値計算を行って導関数をグラフ化しよう
  • 1. 導関数の定義をコードとして表す
  • 目標2: 微分方程式の数値計算を行う
  • 2. 簡単な微分方程式の解き方
  • 3. 微分方程式の数値計算を行う(1) 〜 オイラー法を使う
  • 目標3: ルンゲ・クッタ法を使って微分方程式の数値計算を行う
  • 4. 微分方程式の数値計算を行う(2) 〜 ルンゲ・クッタ法を使う
  • 5. ローレンツの方程式のグラフを描く
  • 練習問題と解答例
    ・(1)勾配降下法で関数の最小値を求める
    ・(2)2変数の微分方程式をルンゲ・クッタ法で解く
    ・(3)偏微分の数値計算を行い、平面のグラフを描く

第7回 積分法の数値計算をプログラミングしてみよう(2022/01/20)

  • 目標1: 台形公式を使って積分を行う
    ・コラム 定積分の計算方法
  • 1. 台形公式による積分をプログラミングする
    ・刻み値を指定する方法
    ・範囲をいくつに分けるかを指定する方法
    ・NumPyのlinspace関数の使い方
  • 目標2: シンプソンの公式を使って積分を行う
  • 2. シンプソンの公式による積分をプログラミングする
  • 目標3: モンテカルロ法により定積分の近似計算を行う
  • 3. モンテカルロ法による積分をプログラミングする
    ・モンテカルロ法の可視化
    ・コラム NumPyの機能を活用して繰り返し処理を排除する
  • 目標4: モンテカルロ法により標準正規分布のサンプリングを行う
  • 4. モンテカルロ法によるサンプリングをプログラムとして表す
  • 練習問題と解答例
    ・(1)台形公式とシンプソンの公式で標準正規分布の累積確率を求める
    ・(2)曲線の長さを求める
    ・(3)マルコフ連鎖モンテカルロ法により標準正規分布のサンプリングを行う

第8回 [数学×Python]再帰呼び出しをマスターしよう(2022/03/17)

  • 目標1: 漸化式を立てる
  • 1. 複利計算の漸化式を立て、再帰でコードを書く
    ・コラム 再帰のロジックを追いかける
  • 目標2: メモ化により計算量を減らす
  • 2. メモ化により計算量を減らすコードを書く
  • 目標3: 動的計画法を利用して最小のコストを求める
  • 3. 最小のコストで済ませるためのコードを書く
  • 練習問題と解答例
    ・(1) 経路の数を求める
    ・(2) 最短経路の距離を求める(やや難)

第9回 Pythonで線形代数! 〜ベクトル編〜(2022/05/23)

  • 目標1: ベクトルの和・差・スカラー倍
  • 1. ベクトルの和/差/スカラー倍のコードを書く
    ・コラム 配列の次元とベクトルの次元
  • 目標2: ベクトルの大きさ
  • 2. ベクトルの大きさを求める
    ・コラム ベクトルの大きさにはいろいろな計算方法がある
  • 目標3: ベクトルの要素ごとの積と内積
  • 3. ベクトルの要素ごとの積と内積を求める
  • 目標4: ベクトルの外積と直積
  • 4 ベクトルの外積と直積を求める
  • 練習問題と解答例
    ・(1)ある点と直線や平面との距離を求める
    ・(2)ニューロンの活動をシミュレートする

第10回 Pythonで線形代数!〜行列編(基礎・前編)(2022/07/27)

  • 目標1: 行列とは ― 行列とスカラーの四則演算を行う
  • 1. 配列を作成し、配列とスカラーの四則演算を行うコード
  • 目標2: 配列同士の四則演算を行う
  • 2. 配列同士の四則演算を行うコード
    ・コラム 配列に対してReLU関数を適用する
    ・コラム 要素ごとの積を数式で表す
  • 目標3: 配列とベクトル、配列同士のブロードキャスト
  • 3. 配列とベクトル、配列同士のブロードキャストを行うコード
  • 目標4: 一部の行や列を取り出す、行や列の合計/平均を求める
  • 4. 一部の行や列を取り出す(スライス機能)
    ・コラム 配列を結合するには
  • 5. 行や列の合計・平均を求める
    ・コラム 行方向/列方向と軸について
  • 練習問題と解答例
    ・(1)共通鍵方式によって画像を暗号化・復号するコード
    ・(2)カラー画像をRGBにチャンネル分解するコード

第11回 Pythonで線形代数!〜行列編(基礎・後編)(2022/07/21)

  • 目標1: 行列の内積を求める
  • 1. 行列の内積を求めるコードを書く
    ・コラム 基底ベクトルと一次変換で内積を理解する
  • 目標2: 二次元配列での@演算子、dot関数、inner関数の違いを確認する
  • 2. 二次元配列で@演算子、dot関数、inner関数の違いを確認するためのコードを書く
  • 目標3: 三次元以上の配列での@演算子とdot関数の違いを確認する
  • 3. 三次元以上の配列で@演算子、dot関数、inner関数の違いを確認するためのコードを書く
  • 練習問題と解答例
    ・(1)ニューラルネットワークの入力値を求める
    ・(2)指定した点を中心にベクトルを回転させる

第12回 Pythonで線形代数!〜行列・応用編(行列式・固有値)(2022/09/28)

  • 目標1: 行列式の値を求め、基本的な性質を確認する
  • 1. 行列式の値を求め、基本的な性質を確認するためのコードを書く
  • 目標2: 行列式を使っていびつな形の面積を求める
  • 2. 行列式を使っていびつな形の面積を求めるコード
    ・コラム χ2検定の中に現れた行列式
  • 目標3: 固有値と固有ベクトルを求める
  • 3. 固有値と固有ベクトルを求めるコードを書く
  • 目標4: 行列を対角化して、行列のべき乗を簡単に求める
  • 4. 行列を対角化してべき乗を求めるためのコードを書く
  • 練習問題と解答例
    ・(1)行列式を使ってハート形の面積を求める
    ・(2)分散・共分散行列の固有値と固有ベクトルを求めて主成分分析を行う

第13回 Pythonで三角関数!〜サウンドも作成してみよう(2022/11/28)

  • 目標1: 弧度法による角度の表し方を確認する
  • 1. 弧度法による角度の表し方を確認するためのコードを書く
  • 目標2: 単位円を描いて余弦(cos)と正弦(sin)は何かを確認する
  • 2. 単位円を描くためのコード
  • 目標3: 周期や周波数を変えてsin関数のグラフを描く
  • 3. 周期や周波数を変えてsin関数のグラフを描くためのコードを書く
    ・コラム 複素数平面でcosθとsinθをプロットする
  • 練習問題と解答例
    ・(1)2つのベクトルの成す角の\(cos\theta\)の値を求める
    ・コラム 相関係数はcosθそのもの
    ・(2)sin関数を使ってサウンド(「ラ」の音)を作る
    ・(3)WAVファイルを読み込んで情報や波形を表示する
    ・応用発展: 離散フーリエ変換により周波数成分を取り出す

第14回 Pythonで統計・データ分析!〜基本統計量の活用と機械学習の基本(2023/01/23)

  • 目標1: pandasデータフレームの行や列を取り扱う
  • 1. pandasデータフレームの行や列を取り扱うためのコード
    ・コラム さまざまな形式のCSVファイルを読み込む
    ・コラム Excelのファイルを読み込む
    ・データフレームから単一の列を取り出す
    ・データフレームから複数の列を取り出す
    ・データフレームから行と列を取り出す
    ・単一の条件に一致する行や列を取り出す
    ・複数の条件に一致する行や列を取り出す
  • 目標2: 基本統計量と相関行列を求める
  • 2. 基本統計量と相関行列を求めるためのコード
  • 目標3: 分布や関係を可視化する
  • 3. 分布や関係を可視化するためのコード
    ・データの特徴を可視化する(ヒストグラムでデータの範囲を見る)
    ・データの特徴を可視化する(ヒストグラムで度数の分布を見る)
    ・データの特徴を可視化する(散布図で変数同士の関係を見る)
    ・コラム 地図を使ってデータを可視化する
  • 目標4: 機械学習(重回帰分析)を行う
  • 4. 重回帰分析を行うためのコードを書く
    ・コラム ロジスティック回帰による分類を行う
  • 練習問題と解答例
    ・(1)築年数のヒストグラムを作成する
    ・(2)築年数が52年以上のデータを除外して重回帰分析を行う
    ・(3)新たな特徴量を作成して重回帰分析を行う

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。