0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

微分をPythonを使って学習してみる

Posted at

はじめに

学生時代、数学が苦手になったのはいつでしょうか?

早い人なら変数、定数、関数辺りが出てきたとき、そして次に多いのが微分・積分です。

それはなぜなのか?

それは「解くまでに覚えることが多すぎる」、そして「解法や計算手順に特化し過ぎていて、本質的な意味や活用法が見えにくい」からではないでしょうか。

Pythonを使うことで、人間が本当に理解すべき「概念」と機械に任せるべき「計算」を分離し、微分の本質をより直感的に学べます。

DevContainerで環境構築する

FROM python:3.13-slim-bookworm

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app

# Set work directory
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    curl \
    git \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# apt-get update
RUN apt-get update

# Upgrade pip
RUN pip install --upgrade pip

RUN pip install sympy

# Copy project
COPY . /app

# Command to run when container starts
CMD ["python", "-m", "venv", "--help"] 

簡単な微分をやってみる

関数 $f(x) = 3x^2 - 4x + 5$ について、$x = 2$ における導関数 $f'(2)$ の値を求めよ。

解き方を考える

  • まず関数 $f(x)$ を微分して、導関数 $f'(x)$ を求める
  • 次に導関数に $x = 2$ を代入して $f'(2)$ の値を計算する

Pythonでやること

from sympy import symbols, diff

# xを数式で使うxとして定義する
x = symbols('x')

# 微分をする関数を定義する
f = 3*x**2 - 4*x + 5

# 微分する
df = diff(f, x)
print(f"f'(x) = {df}")  # 微分した関数を表示

# 微分した関数に値を代入する
f_prime_at_x_2 = df.subs(x, 2)

# 答えを出力する
print(f"f'(2) = {f_prime_at_x_2}")

ここから見る人間が覚える必要のないこと

  • 導関数を使った時の微分計算($f'(x) = 6x - 4$ という変換)
  • 微分した関数へ値を代入するときの計算

数学の授業では計算過程に重きを置き過ぎています。微分の本質は「関数の振る舞いを理解する」「変化率を求める」ことにあります。今回でいえば「指定した点の傾き」を求めることが目的であり、その計算過程を手動でやることには本質的な価値はありません。

もう少し難しい問題

次の関数について、$x = 3$ における導関数 $f'(3)$ の値を求めよう:

$$f(x) = \frac{2x^3 - 5x^2 + 4x - 7}{x^2 + 3x - 2} + \ln(e^x + 2) - \sin(x^2)$$

解説

この問題は手計算では非常に複雑です。なぜなら:

  1. 第1項は「有理関数」なので、商の微分公式 $(u/v)' = \frac{u'v - uv'}{v^2}$ を使う必要がある
  2. 第2項は対数関数と指数関数の合成
  3. 第3項は三角関数と二次関数の合成

それぞれの項を微分すると:

  • 分数関数: $(u/v)' = \frac{u'v - uv'}{v^2}$ を適用
  • 対数関数: $(\ln(g(x)))' = \frac{g'(x)}{g(x)}$ より、$(\ln(e^x + 2))' = \frac{e^x}{e^x + 2}$
  • 三角関数: 合成関数の微分法により、$(\sin(x^2))' = \cos(x^2) \cdot (x^2)' = 2x\cos(x^2)$

しかし、これらの計算は本質的ではありません。Pythonで微分を行い、結果を確認しましょう。

Pythonで計算してみる

from sympy import symbols, diff, sin, log, exp, simplify

# 変数の定義
x = symbols('x')

# 関数の定義
f = (2*x**3 - 5*x**2 + 4*x - 7)/(x**2 + 3*x - 2) + log(exp(x) + 2) - sin(x**2)

# 微分
df = diff(f, x)

# 微分式を整理して表示
df_simplified = simplify(df)
print(f"f'(x) = {df_simplified}")

# x = 3 での値
df_at_3 = df.subs(x, 3)
print(f"f'(3) = {df_at_3}")
print(f"f'(3) ≈ {float(df_at_3)}")  # 数値近似も表示

人間のやるべきこと・やるべきでないこと

やるべきこと:

  • 微分の概念や応用を理解すること
  • 関数の性質を理解すること
  • 結果の解釈と応用方法を考えること

やるべきでないこと:

  • 複雑な微分の計算を手動で行うこと
  • 大量の公式を暗記すること

Pythonのコードからわかる通り、複雑な微分でもコンピュータを使えば簡単に計算できます。これにより、計算に時間を取られず、微分の概念や応用に集中できるのです。

まとめ:微分を学ぶ本当の楽しさ

微分で多くの学生が苦労するのって、計算や公式暗記に時間取られすぎて、「これって実際何の役に立つの?」ってところまで辿り着けないからじゃないでしょうか。

Pythonみたいなツールを使うと、こんな良いことがあります:

  1. 本質が見えてくる - 計算の苦労から解放されて、「あ、微分って要するに変化の仕方を調べるものなんだ!」って腑に落ちる
  2. 実際に使えるスキルが身につく - 今どきの科学や技術の世界では、パソコンで計算するのが当たり前
  3. 難しい問題も怖くなくなる - 手計算じゃ挫折しちゃうような複雑な問題も、Pythonなら「やってみよう!」って気になれる

数学の授業って「どう計算するか」ばかりじゃなくて、「これ使うとどんなことができるんだろう?」「結果から何がわかるの?」みたいな好奇心を大事にしたいですよね。Pythonは単なる計算ツールじゃなくて、数学の面白さと実用性を一気に体験できる強い味方なんです!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?