#初めに
数学というのは「数学」というルールに基づいて式を組みたてていく、言わばパズルのようなものです。木組みのパズルとは違い、これほどまでに難しいのは、3つほどの理由があるでしょう。
まず1に、素材が大きすぎるのです。そりゃ、自然と並走するような形で数学という概念を成り立たせているわけなのですから、木組みのパズルよりも大きくないということはないのです。なんせ比較対象たる木組みのパズルさえも、自然の集合の要素に過ぎないのですからね。
そして2に、パズルの複雑さでしょう。木組みのパズルは、どれがハマりどれがはまらないのかを見ずとも、パターンをたった数百通り組み合わせるというのに、自然という正解の形に数学を整えるには、何億も何兆も複雑なパズルを解かなくてはいけないのです。
最後の3は、記憶の難しさでしょうか。上2つの例を納得していただいた方なら解ると思いますが、パズルというのは大きくなるほど、また複雑になるほど頭を使い、なお何かしらを記憶しなくてはいけないのです。
それで、数学の難しさを解いて何がしたいのかというと…。
ただ難しいなと感じた問題を解きたかっただけなんですよね^^;(どうしよ)
###そ、そんなことはともかく!
今回は数学を解き明かすという数学の難しさを払拭してくれるコンピューターという名の偉大な発明品を利用して、とにかく難しい(というには役不足だけれど)問題を解いて行こうと思います。
#数学 IIIα
積分の教科書に存在している問題から数問引っ張ってきます。
##第一問 次の定積分を解け
\int_{2}^{3} \sqrt{4x-x^2}dx\
これを数学で普通に計算しようと思ったら、定数の2乗引くf(x)の2乗という形にルートの中を変形させて、積分の公式を使用することで求めることが出来ます。しかしそんな途中計算ミスってしまいそうな問題も、pythonを使うことでなんと!
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=sqrt(4*x-x**2)
>>> integrate(y,(x,2,3))
√3 π
── + ─
2 3
という風に簡単に求めることが出来ます。ただ、やはり仕事が多いみたいで、処理完了までに時間がかかるみたいです。
##第二問 次の不定積分を求めなさい。
三角関数の積和の公式などは公式を覚えないとどうしても計算として使うのは難しいです。ピタゴラスの定理などは導出を覚えるのが簡単ですが、三角関数の積和の公式は導出を覚えるのが難しいですからね。
\int \cos4xsin3xdx\qquad\int \cos3xcos2xdx\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=cos(4*x)*sin(3*x)
>>> integrate(y)
4⋅sin(3⋅x)⋅sin(4⋅x) 3⋅cos(3⋅x)⋅cos(4⋅x)
─────────────────── + ───────────────────
7 7
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=cos(3*x)*cos(2*x)
>>> integrate(y)
2⋅sin(2⋅x)⋅cos(3⋅x) 3⋅sin(3⋅x)⋅cos(2⋅x)
- ─────────────────── + ───────────────────
5 5
という風に求めることが出来ます。
ただこれは本来を求めようとしている答えとは違うんですが、しかし、三角関数というのは色んな形に変形できるもんですし、多分合ってるんでしょう!(ちゃんと確認してない)
##第三問 次の不定積分を求めなさい。
先と続いて三角関数の積分です。
\int \frac{1}{sinx}dx\qquad\int \frac{1}{cosx}dx\
左の問題を本来求めようとすると、(僕が知っているものでは)分子と分母にsinxをかけて、分母のsinxの2乗を1ーcosxの2乗と書き換えて、媒介変数t=cosxと置き、積分をtについての積分に変更して、部分分数分解をして、定積分を求める、と。それはlogーlogという形になるのでlogの中身が分数になる結果に収まります。こうして文として打ってみても、中々にめんどくさい処理をしなくてはいけないのがわかりますね。
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=1/sin(x)
>>> integrate(y)
log(cos(x) - 1) log(cos(x) + 1)
─────────────── - ───────────────
2 2
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=1/sin(x)
>>> integrate(y)
log(sin(x) - 1) log(sin(x) + 1)
- ─────────────── + ───────────────
2 2
答えはこのとおりです。
#最後に
今回はどれも都合よく求めることが出来ましたが、しかし、sympyというのも完璧というわけではないので、数式を求められないことがあります。それはやはり、自分でsympyを拡張するか、自分でsympyとは違うプログラムを作るか、それか紙とペンを持って自身でやってみるか、などが必要だということです。
しかし、実際に自分で理論値を出してみようというところにも、matplotlibなどで近似値をプロットして理論値の目印にする使い方も出来るでしょう。やはりpythonは便利ということです。
今回は時間がなくて適当な仕上がりですが、今後は夏休みが来るので、そのときにはwebサイトの本格的な運用とか、人工知能の研究とか、ドローンの操作するためのraspberrypiでプログラムを組んだりとかしたいです。すべてを一人では出来ないのがほんとに悔しい…人生というのは「何もかもをなすには短すぎる」とはよく言ったものです。