SymPy Examples 技術ドキュメント
プログラムの動作
sympy_examples.py は、Pythonのシンボリック数学ライブラリ SymPy の主要な機能を網羅的に示すデモンストレーションスクリプトです。このプログラムは、以下の数学的処理を具体的なコード例を通じて解説し、SymPyを用いた数学的解析の基本を学ぶことを目的としています。
総和と極限: 無限級数の計算や、関数の特定の点における極限値の計算。
微分と積分: 関数の導関数や不定積分の計算。
式変形: 数式の簡約化、展開、因数分解。
代入と関数: 数式への値の代入、および区分関数の定義。
方程式と解: 代数方程式のシンボリックな解法。
変換: ラプラス変換などの数式変換。
級数展開: 関数のテイラー(マクローリン)級数展開。
数値解: 方程式の数値的近似解の探索。
常微分方程式: 常微分方程式の解析解の導出。
このスクリプトは、特定の課題を解決するのではなく、SymPyライブラリが提供する広範な機能セットを紹介し、各機能の基本的な使用方法をユーザーが理解するための参照点として機能します。
原理
sympy_examples.py は、Python言語で実装されたシンボリック数学ライブラリである SymPy を利用しています。SymPyは、数値を扱う代わりに、数学的なシンボル(変数)を直接操作し、厳密な数学的処理を実行する記号計算(シンボリック計算)の原理に基づいています。これにより、浮動小数点誤差のない正確な結果を得ることが可能になります。
プログラム内で使用される主要な数学的原理とアルゴリズムは以下の通りです。
総和 (Summation): 級数の和を計算します。 例:無限幾何級数 \(\sum_{i=0}^{\infty} x^i\)
極限 (Limit): 関数が特定の点に近づくときの値、または無限大に近づくときの値を求めます。 例:\(\lim_{x \to 0} \frac{\sin x}{x} = 1\)
微分 (Differentiation): 関数の導関数を計算します。 例:\(\frac{d}{dx} f(x)\)
積分 (Integration): 関数の不定積分または定積分を計算します。 例:\(\int f(x) dx\)
式変形 (Simplification, Expansion, Factorization):
簡約化 (cancel): 数式を最も単純な形に変換します。例えば、有理式の分子と分母の共通因数を約分します。
展開 (expand): 多項式や数式を展開します。
因数分解 (factor): 多項式を因数の積に分解します。
代入 (Substitution): 数式中の変数に特定の値を代入します。
区分関数 (Piecewise): 定義域によって異なる式を持つ関数を表現します。
方程式の解法 (solve): 代数方程式のシンボリックな解を求めます。 例:\(f(x) = 0\) を満たす \(x\) を探す。
ラプラス変換 (Laplace Transform): 時間領域の関数 \(f(t)\) を周波数領域の関数 \(F(s)\) に変換します。 $\(\mathcal{L}\{f(t)\}(s) = \int_0^\infty e^{-st} f(t) dt\)$
級数展開 (Series Expansion): 関数を無限級数(例えばテイラー級数)の形で表現します。 例:\(f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n\)
数値解 (nsolve): 代数方程式や超越方程式の数値的な近似解を、ニュートン法のような反復アルゴリズムを用いて求めます。シンボリックな解が得られない場合や、数値的な結果が求められる場合に有用です。
常微分方程式 (dsolve): 常微分方程式の解析解を導出します。 例:\(y'(x) + y(x) = 0\) のような方程式を解く。
これらの機能は、背後にある数学的なアルゴリズム(例:Rischアルゴリズムによる積分、Gröbner基底による多項式方程式の解法、様々なODE解法など)によって実現されていますが、ユーザーは高レベルなAPIを通じてこれらを簡潔に利用できます。
必要な非標準ライブラリとインストール方法
このプログラムは SymPy ライブラリに依存しています。
SymPy はPythonの標準ライブラリではないため、使用する前にインストールが必要です。
以下の pip コマンドを使用してインストールできます。
pip install sympy
必要な入力ファイル
このプログラムは、外部の入力ファイルを必要としません。すべてのデータと数式はスクリプト内部で定義されており、自己完結型で動作します。
生成される出力ファイル
このプログラムは、いかなるファイルも生成したり保存したりしません。すべての計算結果は標準出力(コンソール)に直接表示されます。
コマンドラインでの使用例 (Usage)
sympy_examples.py は引数を取らずに実行されます。
python sympy_examples.py
コマンドラインでの具体的な使用例
以下のコマンドでプログラムを実行します。
python sympy_examples.py
実行すると、SymPyの各機能の計算結果が順に標準出力に表示されます。以下にその出力の一部を示します。
1. Sum and Limit
summation(x**i, (i, 0, oo)): 1/(-x + 1)
Limit(sin(x)/x, x, 0): 1
2. Diff and Integral
diff(sin(x)*exp(x), x): exp(x)*sin(x) + exp(x)*cos(x)
integrate(x**2 * sin(x), x): -x**2*cos(x) + 2*x*sin(x) + 2*cos(x)
3. Simplify & Expand
cancel (x**2 - 1)/(x - 1): x + 1
expand((x + 1)**2): x**2 + 2*x + 1
factor(x**2 + 2*x + 1): (x + 1)**2
... (以下、他のセクションの出力が続きます) ...
7. Series
series(exp(x), x, 0, 5): 1 + x + x**2/2 + x**3/6 + x**4/24 + O(x**5)
8. Solve equation
nsolve(cos(x) - x, x, 1.0): 0.7390851332151606
9. Solve differential equation
dsolve(Eq(y(x).diff(x) + y(x), 0), y(x)): Eq(y(x), C1*exp(-x))
この出力は、各セクションで示された数式操作の厳密な結果や数値解、解析解を表しています。例えば、「1. Sum and Limit」セクションでは、無限幾何級数の和が \(1/(1-x)\) であること、および \(\lim_{x \to 0} \frac{\sin x}{x} = 1\) であることが確認できます。また、「8. Solve equation」セクションでは、\(x = \cos(x)\) の数値解が約 \(0.739085\) であることが示されています。