第5章 数学3 手続きによる定義と微分積分

要約

手続きによる定義、という数学用語は無いと思うが、このような概念は数学のいたるところに出てくる。手続きによってどんなに長い桁の数字を使っても書ききれない数や、どんなに多くの数を使っても書ききれない数列などを定義できる。また、手続きを通して収束や極限を定義し、数列や関数の収束といった概念を定義することができ、微分や積分といった解析学を始めることができるようになる。

目次

5.1 手続きによる数の定義

5.1.1 手続きによる定義

日常生活の中でも具体的な作業を指定するよりも、手続きを指定した方がより一般的な作業を指定できます。 例えばちらばった本を本棚に片付ける作業を人に頼む時、どの本をどの本の横にしまうか全てを指定するよりは、大きい順に並べる、といったように手続きを指定した方が一般的になります。 例えば大中小の3冊の本があるとき、大きな本を左端に、次に中くらいの本、最後に一番小さい本を並べるように作業を人に頼めば、本棚にちらばった本をきれいに並べてしまうことができます。 ですが、この頼み方では本が4冊に増えたら、またいちいちどの本の次にどの本を並べるのかを言いなおさないといけません。 それに対し、ちらばっている中から一番大きな本を選び、それを本棚にしまって、それを最後の本がしまわれるまで続けるように作業を頼めば、本が3冊でも4冊でも、大きさの順に本が本棚の中に並ぶことになります。 この違いは、指示を直接的に実際の動作を指示することによって与えるか、作業の手続きを指示するかの違いです。 作業を抽象化して手続きで指示すると、より一般的な場合に当てはまるようになり、様々な場合に同じ指示を与えることができます。 (後で手続きによる定義の日常的な例をもう一個ぐらい書く。)

5.1.2 分数の定義

1/3を定義する

このように、何をするのかを指示する時に、することをいちいち全部指示するよりも手続きを指示すると便利な場合がある。 数学においても同じようなことが起こるときがある。 数字を定義する時に、こういう計算の結果得られる数、という言い方で数字を定義することができる。 例えば1/3などがそうである。 これは、1を3で割った結果得られる数、という意味で、手続きによって定義されている。 それがどのような数になるかは今のところ分からないが、1は数で3も数なのだから、1を3で割ることはできるしその結果も数になる。 そうして得られる数を1/3と書いて表す。 これが手続きによる数字の定義である。

さて、ではもう少し具体的に1/3について考えてみる。 1を3で割っても割り切れないのでこれは0.333333...と、どこまでも3の並び続ける数になる。 この0.333...と0.333...を足したら0.666...になる。 これはどこまでも6が並び続ける数を意味している。 0より下の桁では3が並び続ける数同士を足すのだから、それぞれの桁で3+3をして結果は6になる。 つまり

0.333...+0.333=0.666...

ということである。 同じように、0.666...に0.333...を足したら0.999...になる。 これはどこまでも9が並び続ける数という意味である。 実はこれは1と等しい。 つまり0.999...=1である。

これは一見すると不思議である。 0.999...は延々と9が並び続ける数であり、決して1.000...ではないように見える。 だが本当に0.999...は1と等しい。 まず0.999...は0.333...を3つ足した数である。 そして0.333...は1を3で割った数である。 つまり、0.999...は1を3で割った数を3つ足した数、だということになる。 同じ数を3つ足すというのは3倍するということで、つまり3を掛けるのと同じことである。 つまり0.999...は1を3で割った数に3を掛けた数、ということになる。 1を3で割って3を掛けたら、割り算と掛け算で打ち消しあって1に戻る。 つまり

0.999...=0.333...+0.333...+0.333...

=0.333...×3
=1/3×3
=1.

ということで、完全に筋が通っている。

1/9と1/3の関係

ここで重要なのは、0.999...=1という豆知識ではなく、1を3で割った数、という具体的にはいまいち何のことだかよく分からない数でも、そういう手続きを実行して得られる数が存在すると定義して議論を進めていくことができ、一見しただけでは正しくないような事実を導き出すことができたということである。 手続きによって定義された数について、計算を定義することができ、普通の数との間の関係式を見つけることができるということである。 このように割り算によって定義された数は他にもいくらでもある。 例えば1を9で割った数も割り切れないので0.111...というように1がどこまでも並び続ける数になる。 さき程と同じように0.111...と0.111...を足してみる。 そうすると結果は0.222...となる。 0より下の全ての桁で1+1=2という計算をすればいいだけである。 これにもう一度0.111...を足すと0.333...になる。 ここで、もう一度0.333...が出てきた。

0.333...は先ほど出てきた、1を3で割った数で、それが、1を9で割った数となんらかの関係があることが示唆されている。 その関係がきちんと理にかなった関係でなければ、矛盾が起こりこのような議論が意味の無いものになってしまうが、今回の関係はきちんと矛盾の無い関係なので安心である。 0.111...を3つ足したら、3倍するということなので、1を9で割った数に3を掛けた数になる。 9で割って3を掛けるのだから、全体としては3で割ったのと同じになる。 つまり0.111...を3つ足したら1を3で割った数になる、ということで、

0.111...×3=0.333...

ということで、どこにも矛盾はない。

このように、割り算を実行して得られる数という、手続きによる定義によって定義される数にはきちんとした数学的構造がある。 読者のみなさんも1を7で割った数とか、1を13で割った数などを定義して、それが他の数とどのような関係を持つのかを調べてみたりすると面白いかもしれない。

5.1.3 無理数の定義

2の平方根について

他にも無理数を手続きによって定義することができる。 無理数とは分数で表すことができない数のことである。 例えば2の平方根などである。 ある数の平方根というのは、2乗してその数になる数字のことで、例えば2は4の平方根だし、3は9の平方根である。 それでは2乗して2になる数は存在するだろうか。

2の2乗が4で1の2乗が1なので、2乗して2になる数があるなら1と2の間にありそうである。 とりあえず1.5を2乗してみると、2.25になる。 だいぶ2に近い数だが、少し多い。 なので1.4を試してみると、1.4を2乗したら1.96になる。 今度は2よりも小さい数になってしまった。 ということは、2乗して2になる数は1.4より大きく1.5よりも小さいことになる。 なので、今度は1.4より0.01大きい1.41を試してみると、1.41を2乗したら1.9881になる。 さっきよりも2に近づいた。

この調子でどんどん調べていくと、1.41421356の2乗が1.999999993となることが分かる。 ほとんど2に近いですが、やはりまだ2ではありません。 でもその差はたったの0.000000007なので、根気よく調べていけばいつかは2乗してぴったり2になる数が見つかりそうです。 ですが、実はどんなに多くの桁を使っても2乗して2になる数を書くことはできないということが分かっています。 そういう数を無理数というのです。 どんなに多くの桁の数字を使っても書き表すことが無理な数ということで、無理数と呼ばれているのです。

数字を使って表すことができないと言っても、そういう数字を定義できないというわけではありません。 2乗する、という手続きを通して定義すればいいのです。 ある数にある手続きをしたら、こうなる、というように定義すればいいのです。 今の場合は、ある数というのは分かりませんが、ある手続きというのは2乗するという手続きで、こうなるというのは、2になる、ということです。 このように具体的にどのような数かは分からなくても、その数にある手続きを施すことで別の数になることが分かっていれば、そこに計算を定義することができるようになったり、別の具体的な数との間に成り立つ関係を見つけたりできます。 1/3の時と同じです。 1を3で割った数は小数点以下どこまでも3が並ぶ数になります。 どんなに多くの桁を使っても書ききることはできません。 それでもそういう数が存在するとして計算を定義したり普通の数との間に関係を見つけたりできました。 今回も同じように2乗して2になる数について様々な計算や関係を見つけることができます。 ちなみにこの、2乗して2になる数を簡単に書くために√2という記号を使います。 √2はルート2と呼びます。 本当は2の上に横棒をひかないといけないのですが、ネット上で文章を書くためにはこういう書き方でないと困るので勘弁してください。 これは正式な書き方ではないので、他のところでは使わないでください。 √2は2乗して2になる数です。 2乗するというのは、同じ数を2回掛けるという意味なので、すぐに

√22=√2×√2

=2

ということが分かります。 定義そのままです。 ではこの、具体的に数字で表すと良く分からないけれど、2乗した時には2になることが分かっている数を2つ足したらどういうことになるでしょうか。 つまり√2+√2がいったい何と同じなのか、ということです。 ある数にそれと同じ数を足したのですから、単純に考えると元の数の2倍になります。 なのでそれを

√2+√2=2×√2

=2√2

と書いてみます。 ちなみに、2×√2と書くのが面倒くさいので、多くの場合2√2と、×の記号を省略して書くのが普通です。 これは単なる書き方を決めただけで、何も議論を深めていません。 すぐに2√2とはどのような数なのか、という疑問につきあたります。 これがどういう数なのか調べるためには、今、唯一√2について分かっている事実である、2乗したら2になるという事実を使ってみます。 そのために、試しに2√2を2乗してみます。 すると、

2√22=2√2×2√2

=2×2×√2×√2
=2×2×2
=8.

ということが分かります。 途中、2と√2の掛け算の順番を入れ替え、√2同士の掛け算を計算し、結果が2になるという事実を使いました。 これをよく見てみると2√2がどのような数なのか分かります。 つまり2√2は2乗して8になる数、8の平方根だということです。 2乗して2になる数を2つ足すと2乗して8になる数になるのです。 このように、√2というのは得体の知れない不思議な数ですが、それに計算を定義することができたのです。

2の平方根と3の平方根の大小関係

さて、このような得体の知れない平方根の他の例を見てみます。 例えば2乗して3になる数というのは、やはりいくら多くの桁を使っても数字で表すことができない数です。 それを√3と書きます。 これもやはり2乗するという手続きを通して定義されている数です。 こういう数が存在するとして、他の数とどのような関係を持つのかを調べることができます。 例えば√3と√2はどのような関係にあるのでしょうか。 例えば√3と√2はどちらが大きな数なのでしょうか。 半分あてずっぽうで考えると、2よりも3の方が大きいのだから√2よりも√3の方が大きくなりそうです。 ですが、それは本当でしょうか。

とりあえず√3の方が√2より小さいと仮定して考えてみます。 つまり

√3<√2

です。 こう仮定してみて、では√3や√2に√2を掛けた数がどうなるか考えてみます。 このとき

√3×√2<√2×√2

になります。 始めにあった大小関係は同じ数を掛けてもやはりそのままです。 なのでこうなります。 同じように、√3を掛けたらどうなるか考えてみます。 この場合は

√3×√3<√2×√3

です。 この新しくできた2つの不等式をよく見てみると、

√3×√3=3,
√2×√2=2,
√2×√3=√3×√2.

だということが分かります。 となると、

√3×√2<√2×√2,ならば、√3×√2<2

ということだし、

√3×√3<√2×√3,ならば、3<√2×√3

ということです。 そして

√2×√3=√3×√2

なので、

3<√2×√3=√3×√2<2

ということになります。 これは3<(よく分からない数)<2ということで、間にはさまったよく分からない数を無視すると

3<2

となります。 3が2よりも小さいわけはありません。 どうしてこんなおかしな結論が得られたのかというと、はじめに立てた仮定である√3<√2がおかしかったのです。 √3が√2よりも小さいと考えて議論を進めていったから、おかしな結論が得られたのです。 つまり√3は√2よりも小さくないのです。 そうすればおかしな結論は得られなくなります。 小さくないのだから、同じ大きさか、でなければ大きいということなのですが、同じ大きさの数を2乗して2になったり3になったりするわけがないので、√3は√2より大きい数だということが分かります。 √3が具体的にどんな数なのかはまだよく分かりませんが、それは少なくとも√2よりもは大きな数であることが間違いなく言えるのです。 ちなみに、もっと具体的に考えて、1.7を2乗して2.89、1.8を2乗して3.24なので、√3は1.7と1.8の間にあることが分かり、1.4と1.5の間にある√2よりもは絶対に大きいことが分かります。 長い論理的な思考よりも具体的な数値の比較の方が直感的に分かりやすいかもしれません。 なんにせよ、数学とは論理的な構造のことなので、このように平方根の大きさには数学的な構造を見つけることができ、√2や√3という数は数学的に扱える数であることが分かります。

5.1.4 虚数の定義

1/0が定義できないこと。虚数は定義できること。i+i=2iと定義できること。1+iはこれ以上計算できないこと。

5.2 数列

5.2.1 数列の定義

全ての数を書ききれる数列

これまでは手続きによって数を定義してきました。 その数は具体的に数字で表すことができないものでしたが、そういう数が存在するとして議論を進めていくと具体的に数字で表せる数との間に関係がみつかったりしました。 これからはもっと複雑な物を手続きを使って定義していきます。 今回は数列を定義します。 数列とは、数字の羅列のことです。 例えば

11、13、38、39、65、70

という数字の列があったとします。 2桁の数が6個並んでいます。 これは単なる数字の並びであって、別に意味がある必要はないのですが、例えばこれはある家族の年齢を並べたものと解釈することができます。 弟11歳、兄13歳、母38歳、父39歳、祖母65歳、祖父70歳、という様にです。 これを、わざわざ誰が何歳なのかを書かずに省略したら、さきほどの数字の列になるのです。

このように、ただの数字の列に何らかの意味を持たせることができます。 意味のある物なのだから、特別な関心を払って研究する価値がありそうです。 とは言え、別に意味が無くても数学の対象として扱うことはできます。 このように数字を並べた物を数列と呼びます。 別に意味の無い、たんなる数字の並びも数列です。 例えば、

4,5,98,289,-442,0

とか、

2.54,7,9003,481

などといった数字の並びも確かに数列です。 それがどんな意味を持つのかは分かりませんが、とにかく数字の列なので数列です。

全てを書ききれない数列

このような決まった長さの数列でない、

1,2,3,4,5,6...

といった、数の並びも数列です。 これは1が一番最初で、次が2、その次が3、その次が4、その次が5、その次が6、という数列です。 ...というのは、この調子で今後も続いていくという意味で、1ずつ数字が大きくなってきているのですから、この後は7、8と続いていきます。 このように、1ずつ大きくなっていくらでも続いていくので、この数字の並びはいつまでも続いていきます。 このような終わりの無い数字の羅列も数列です。 終わりの無い数列を定義するのには手続きによる定義を使います。 こういう手続きによって得られる数の並び、といった方法で、最後まで書き出すことができない数列を定義できるのです。 無理数を手続きによって定義したのと同じです。

先ほどの数列は1から始まり、2つ目以降は1つ前の数字に1を足した数をそこの数字にして作った数列、という手続きによって定義されます。 では、3から始まり、2つ目以降は1つ前の数字に2を足した数をそこの数字にして作った数列はどのような数列になるでしょうか。 まず始めは3だと決まっています。 なので数列は

3,...

となります。 まだ1つ目の数字しか分かりません。 2つ目の数字は1つ前の数字に2を足した数字なので、前の数字である3に2を足して、3+2=5となり、5になります。 数列は

3,5,...

となります。 3つ目の数字は1つ前の数字は2つ目の数字の5なので、それに2を足して5+2=7となり、7になります。 数列は

3,5,7,...

となります。 この調子で数列を求めていけば

3,5,7,9,11,13,15,17,19,...

という様にどんどん数列を具体的に数字で表していくことができます。 ですが、この数列を最後まで数字で書くことはできません。 なぜなら、数字に2を足してもどんどん大きくなるだけで、際限が無いからです。 この数列はある手続きによって得られる数列、という言い方でしか定義することはできません。

ですが、それをもう少し簡単に表現することはできます。 数列の何番目にある数字なのかを1番目、2番目などと言いますが、それを代数で表してn番目としてみます。 nは1,2,3といった、自然数であればなんでもいい数字です。 ところで、先ほどの数列は、3にどんどん2を足していった数で、2番目の数字は3に2を1つ足した数、3番目の数字は3に2を1つ足した数にさらにもう1つ足した数、つまり2つ足した数、4番目の数字はさらに1つ足すので3に2を3つ足した数になります。 ということは、n番目の数字は3に2を(n-1)回足した数、ということになります。 nに1や2や3を代入してみれば、確かにその通りになっていることが分かります。 2を(n-1)回足すというのは、2(n-1)を足すということなので、n番目の数字は3+2(n-1)だということになります。 この式のnに好きな数字を代入すれば、どの場所にある数字も計算することができます。

例えば8番目の数字は

3+2(8-1)=3+2×7

=3+14
=17

となって、上の方で実際に計算した結果と同じになります。 つまりこの数列のn番目の数は3+2(n-1)である、という様に数列を定義することができます。 これなら100番目の数字が何になるのかいちいち最初から数えていく必要もなく、3+2(100-1)=202と1回の計算ですみます。 とても簡単に数列を表すことができます。 ですが、手続きを直接言葉で表しても代数を使って表しても、結局表している数列は同じで、どちらを使って表しても構いません。

手続きによって定義される数列には他にも、例えば1番目の数字は0で2番目の数字は1で、3番目以降は1つ前の数字と2つ前の数字を足した数をそこの数字にして作った数列、なども定義することができます。 この数列の3番目の数字は0+1=1になります。 数列は0,1,1,...となります。 4番目の数字は1+1=2となります。 数列は0,1,1,2,...となります。 この調子で数列を求めていくと、

0,1,1,2,3,5,8,13,21,34,55,89,144,...

という様になることが分かります。 この数列にはフィボナッチ数列という名前がついていて、自然界のいろいろな所に現れる数列だそうです。 このように数列を手続きによって定義することができます。

5.2.2 数列の計算

数列を記号で表わす

さて、このようにして数列を定義することができたのですから、その数列の間になんらかの関係性を見つけて数学的な法則を見つけたいものです。 例えば数列と数列の間に計算を定義してみます。 数列がいくつも出てくると、いちいち言葉で言うと長くて大変になってくるので数列を表す記号を決めます。 普通の数列を沢山の代数を使ってa,b,c,d,e,...と書くことを考えてみます。 aやbやcやdやeは全て代数で、何か具体的な数字を取ります。 こういう書き方ではすぐにアルファベットが足りなくなってしまうので、数字を使ってa1,a2,a3,a4,...という書き方をしてみます。 aの右下にくっついている小さな数は下付き文字、または添え字といって、その代数が数列の何番目の数字であるのかを表しています。 a1なら1番目の数字だし、a2なら2番目、a8なら8番目の数字です。 そしてa1やa2やa3やa4は代数なので、それぞれ1つ1つがある1つの数字に対応します。 例えばフィボナッチ数列の場合はa1=0だしa2=1だしa3=1だしa4=2です。 なのでn番目の数字はanとなります。

これは代数なので1つの数字ですが、これを{}で囲って数列を表すとします。 {an}と書くと、それはn番目の数字がanになる数列を表している、とします。 こうすれば、最初のアルファベットを変えれば違う数列を表していることを表現できます。 例えば{an}や{bn}といった様にです。 {an}と{bn}は具体的には何かはまだ分かりませんが、ひとまず違う数列であることは分かります。 この数列の間に計算を定義していきます。

例えば2つの数列の足し算をこのように定義してみます。

{an}+{bn}={an+bn}

=a1+b1,a2+b2,a3+b3,...

という様にです。 つまり、2つの数列の同じ番目の数字を足し算して新しい数列にする、ということです。 具体的には、例えば1,2,3,4,5...という数列と1,3,5,7,9,...という数列を足し算したら、

1,2,3,4,5,...+1,3,5,7,9,...=1+1,2+3,3+5,4+7,5+9,...

=2,5,8,11,14,...

という数列になる、ということです。 他にも例えば1がずっと並んでいる数列1,1,1,...を{1}と書けば

{1}+{1}={2}

となります。 {2}は2がずっと並んでいる数列2,2,2,...です。 n番目の数字が代数を使って表されている場合、例えばan=2nでbn=2(n-4)+3の場合は

{an}+{bn}={2n}+{2(n-4)+3}

={2n+2(n-4)+3}
={4n-5}

となります。 {2n}というのは、n番目の数字が2nで表される数がずっと並んだ数列、という意味です。 足し算が定義できたので、今度は数列と数字の掛け算を定義します。

α×{an}={αan}=αa1,αa2,αa3,αa4,...

という様にです。 αは代数で、何か具体的な数字です。 これは元の数列の数字をα倍して新しい数列にする、ということです。 具体的には、0,1,1,2,3,5,8,..を3倍したら、0,3,3,6,9,15,24,...となります。 n番目の数字が代数で表されている場合、例えばan=n+3の場合にこの数列を6倍したら、

6×{an}={6an}

={6n+18}

になります。 掛け算の場合は×の記号を省略してα{an}と書く場合もあります。 足し算、掛け算が定義できたのでそれを使って引き算、割り算を定義することができます。 2つの数列の引き算は-1倍した数列を足すことだと定義し、数列と数字の割り算は1/α倍することだと定義できます。

このようにすると、数列の間に数学的な構造を考えることができるようになります。 例えば

2,3,10,15,26,35,50,63,82,99,...

という数列を考えます。 これを{an}で表します。 全体的に見て番目が進むにしたがって増えていきますが、一見して規則性がないように見えます。 これがもし、

1,4,9,16,25,36,49,64,81,100,...

という数列だったら、a_n=n2とn番目の数字を表せます。 1番目は12=1だし、2番目は22=4だし、3番目は32=9という様にです。 ですが、実際にはそうなっていなくて、1ずつ多かったり少なかったりします。 これを、1,-1,1,-1,1,-1,...という様に1と-1が順番に並んだ数列が、{n2}に足し算されているせいだと考えてみます。 そうすると、

{an}=2,3,10,15,26,35,50,63,82,99,...

=1+1,4-1,9+1,16-1,25+1,36-1,49+1,64-1,81+1,100-1,...

となります。

{bn}={n2}

=1,4,9,...

とし、

{cn}=(-1)n+1

=1,-1,1,-1,1,-1,...

とすると、

{an}={bn}+{cn}

ということです。 (-1)n+1は-1をn+1回掛けた数です。 n=1の時は(-1)2=1で、数に-1を掛ければ符合が逆になるので、何度も掛けていけば1と-1を交互に繰り返す数列になります。 なので、

an=n2+(-1)n+1

であることが分かります。 一見して法則性がないような数列でも2つの数列の足し算という形で規則性を理解できるのです。 ちなみに、ある物に足し算と実数倍が定義されているのですから、前回やったベクトルの定義が当てはまることが分かります。 数列の足し算が数列になり、数列の定数倍も数列になるのですから、数列はベクトルです。 もっと詳しく調べたい人は具体的にさっき定義した数列の計算にベクトルの定義が当てはまることを確認してみてください。

5.2.3 数列の写像

和を計算する写像

さて、これまでは数列に足し算や数との掛け算などの計算を定義してきました。 これからは少しそれを発展させて、数列にある手続きを行って新しい数列を作ることを考えてみます。 例えば、ある数列のn番目までの数を全部足し算して得られる数をn番目の数にして別の数列を作ることができます。 例えば、

1,2,3,4,5,6,...

という数列を元にしてこの数列を作ってみます。 1番目の数は元の数列の1番目までの数の合計ですが、1番目までというのは1番目の数1つしかなくて1です。 つまり数列は

1,...

になります。 2番目の数は元の数列の2番目までの数の合計で、1+2=3になります。 つまり数列は

1,3,...

になります。 3番目の数は元の数列の3番目までの数の合計で、1+2+3=6になります。 つまり数列は

1,3,6,...

になります。 この調子で考えていくと、

1,3,6,10,15,21,...

という数列が作られます。 これは数列から新しい数列を作っているのですから、数列と数列の間の写像になります。 ある数列にある手続きを行って別の数列を作るのですから、この写像は手続きによって定義される写像です。 元の数列がこの手続きによって別の数列に変わるのを関数に似た書き方でSを使って、

S({an})={a*n}

と書くことにします。 Sは数に数を対応させる普通の関数のように、数列に数列を対応させる対応関係です。 Sで変化させる数列を普通の関数で数字を囲うように()で囲って表しています。 *はaという数列が別のものに変わったことを見やすくするためにつけました。 さて、ではこの写像についてもっと詳しく考えていきます。 例えば{1}はこの写像でどのような数列に対応するでしょうか。 {1}は1がずっと並んだ数列なので、1番目からn番目までの数はすべて1です。 となると、n番目までの数を足すというのは、1をn回足すのと同じで、結果はnになります。 つまり

S({1})={n}

です。 同じようにS({2})={2n}だしS({3})={3n}だということが分かります。 一般的にxをある数だとして、S({x})={xn}です。

ではS({n})はどのような数列になるでしょうか。 具体的に最初のいくつかの数字はさきほど計算しました。 では、一般的にn番目の数字がどうなるのかを考えていきます。 まず、元の数列のn番目までの数字を全て足してn番目の数にするのですから、S({n})={a*n}と書くと、a*n=a1+a2+a3+...+anということになります。 ...というのは、これ以降も同じように1ずつ数字を大きくしていって、最後にnになるまで足し続ける、ということです。

n=5の時は

a*5=a1+a2+a3+a4+a5

だし、n=9の時は

a*9=a1+a2+a3+a4+a5+a6+a7+a8+a9

を表すということです。 さて、この数式の後ろの方をもっと詳しく書くと、

a*n=a1+a2+a3+...+an-2+an-1+an

となります。 n=100の時に具体的に書くと、a*100=a1+a2+a3+...+a100と書いていたのを、

a*100=a1+a2+a3+...+a98+a99+a100

と書き直したということです。 別に特別なことではありません。 ですが、この式をよく見てみると、a1+a2+a3+...+an-2+an-1はa*n-1を表しているということに気がつきます。 a*_nは元の数列の1番目からn番目の数を全部足した数なのですから、a*n-1は1番目から(n-1)番目の数を全部足した数です。 ということは、

a*n=a1+a2+a3+...+an-2+an-1+an

=[a1+a2+a3+...+an-2+an-1]+an
=a*n-1+an

ということになります。 つまりa*n=a*n-1+anということで、これはa*nはa*n-1にanを足した数だということです。 これを今の場合に適用すると、S({n})のanはnだと分かっているので、

a*n=a*n-1+n

だということになります。

とはいえ、これだけでは求めたいn番目の数を計算するのに(n-1)番目の数が分かっていればいい、というだけで、結局(n-1)番目の数が何なのか分からないとn番目の数を計算できません。 そこで、あてずっぽうでもいいからa*nに何か規則性がないものか、探してみます。 具体的にS({n})を求めると、

S({n})=1,3,6,10,15,21,28,36,45,55,...

となります。 これを{n}や{n2}と見比べてみます。

1,3,6,10,15,21,28,36,45,55,...
1,4,9,16,25,36,49,64,81,100,...
1,2,3,4,5,6,7,8,9,10,...

{n}と比べたら{n2}の方がS({n})に近いことが分かります。 そこで{n2-S({n})}を計算してみます。 なんとなく関係がありそうなので、S({n})と{n2}にどれくらいの差があるのかを調べるためです。 そうすると、

S({n})=0,1,3,6,10,15,21,28,36,45,...

となります。 なんと、1番目の数字が0で始まる以外は、元の数列と同じになります。 これは

{n2}-S({n})=S({n-1})

ということを意味します。 S({n-1})というのは、{n-1}のn番目までの数字を全て合計した数をn番目の数字にして作った数列です。 S({n})={n2}-S({n-1})ということなので、S({n-1})が分かればS({n})も分かります。 これを{n}と比べてみます。

0,1,3,6,10,15,21,28,36,45,...
1,2,3,4,5,6,7,8,9,10,...

さっきと比べたら、だいぶ数字が近いので、何か関係がありそうです。 これをよく見てみると、同じ番目の上の数列と下の数列を足した数が上の数列の次の数になっていることに気づきます。 なので、S({n-1})+{n}を計算してみます。 そうすると、

S({n-1})+{n}=1,3,6,10,15,21,28,36,45,55,...

となり、これはS({n})そのものです。 ということは、

S({n-1})+{n}=S({n})

ということになります。 つまりS({n-1})=S({n})-{n}です。 これとさっき求めた数式であるS({n})={n2}-S({n-1})を合わせて考えると、

S({n})={n2}-[S({n})-{n}]

=-S({n})+{n2}+{n}

となり、

2S({n})={n2}+{n}

であるので

S({n})=({n2}+{n})/2

ということになります。 S({n})という数列は、{n^2}と{n}を足して2で割った数列だというのです。 とりあえず最初の10番目までの数について、これが成り立っていることは具体的に計算してみれば分かります。

(12+1)/2,(22+2)/2,(32+3)/2,(4,2+4)/2,(52+5)/2,(62+6)/2,(72+7)/2,(82+8)/2,(92+9)/2,(102+10)/2,...=2/2,6/2,12/2,20/2,30/2,42/2,56/2,72/2,90/2,110/2,...

=1,3,6,10,15,21,28,36,45,55,...

となって、実際に合っているのが分かります。 つまりS({n})=({n2}+{n})/2ということです。 これをa*nの関係だと思うと、a*n=(n2+n)/2だということになります。

数学的帰納法

ですが、これはS({n})の最初の10番目までの数だけを考えて導き出した数式です。 11番目の数にも当てはまるかどうかは、まだ試していません。 もしかしたら、この式は偶然S({n})の最初の10番目までの数にしか当てはまらないのかもしれません。 そう思って11番目にどうなるのか試してみたら、確かに11番目の数にも正しく当てはまることが分かるのですが、そしたらすぐに、はたして12番目の数にも当てはまるのだろうか、という疑問が出てきてきりがありません。

では、せっかく苦労して求めたこの式は使い物にならないのかと言ったら、そんなことはありません。 何番目の数を求めたい時でも、その数を求める方法さえきちんと定義してあればいいのです。 さて、先ほどa*n=a*n-1+nという関係を見つけました。 これはS({n})の定義から導けるもので、nがどんな数であっても常に成り立ちます。

ところで、nが10までの数であれば、a*n=(n2+n)/2であることを見つけました。 nが10までならa*n-1の数が分かっているのだから、それを利用すればnが11以降でもa*nがどうなるか分かります。 この関係を上手く利用することで、どんなnの場合にもa*n=(n2+n)/2であることが分かります。 そのためには、まず一番初めの場合、n=1のときにa*n=(n2+n)/2であることを確かめます。 これは既にやっていますが一応もう一度やると、

a*1=(12+1)/2

=(1+1)/2
=1

であるので、成り立っています。 これを踏まえ、仮にn番目の数をa*n=(n2+n)/2で表せると仮定したときに、果たして(n+1)番目でも同じように

a*n+1=[(n+1)2+(n+1)]/2

が成り立つかどうかを調べていきます。 この式はa*n=(n2+n)/2のnに(n+1)を代入したものです。 もしも(n+1)番目でもa*n=(n2+n)/2が成り立つならば、このような式が成り立つことになります。

もしも仮にa*n=(n2+n)/2であるなら、a*n+1=a*n+(n+1)です。 なぜかと言えば、S({n})の定義上、必ず(n+1)番目の数はn番目の数よりもn+1だけ大きいからです。 となると、

a*n+1=(n2+n)/2+n+1

=(n2+n+2n+2)/2
=[(n+1)2-2n-1+n+2n+2]/2
=[(n+1)2+(n+1)]/2

となり、(n+1)番目でも成り立ちます。 途中でn2=(n+1)2-2n-1という関係を使いました。 これは、何を意味しているかというと、この数列のn番目の数がa*n=(n2+n)/2なら、a*n+1=[(n+1)2+(n+1)]/2であることが分かった、ということです。 この関係はS({n})の定義から直接導きだせることなのです。 それをどう導いたかに関係なく、もしもa*n=(n2+n)/2であるなら、この数列の定義上、必ずa*n+1=[(n+1)2+(n+1)]/2となるということなのです。

同じようにもしもa*n=nであるなら、この数列の定義上必ず

a*n+1=a*n+n+1

=n+n+1
=2(n+1)-1

になるし、a*n=n2なら、定義上必ず

a*n+1=a*n+n+1

=n2+n+1
=(n+1)2-n

になります。 この2つの仮定は今あてずっぽうに考えただけですから、実際の{a*n}の数とはちっとも合っていませんが、もし仮にn番目の数がそうなると仮定したら、数列の定義が(n+1)番目の数をこのように決めてしまうのです。 同じように、もしもa*n=(n2+n)/2なら、a*n+1=[(n+1)2+(n+1)]/2なのです。

そしてa*n=(n2+n)/2という関係はn=1の時は実際の数列の数と合うことを確かめました。 ということは、n=2の時にもこの関係は成り立ち、2の時に成り立つなら3、3の時に成り立つなら4、という様にnがどんなに大きな数字でもそのnの時にこの関係が成り立つこと確かめることができます。 このように、nがどんなに大きな数であったとしても、そのn番目のときにこの関係が成り立つことを確かめることができます。 確かめることができるというのは、例えばn=1000のときはn=1から始めれば、2のときも成り立ち、2のときに成り立つなら3のときも成り立ち、という議論を続けていけば、必ずn=999のときも成り立つことを確かめることができ、n=1000のときにも成り立つことを確かめることができます。 これは、前の番目で成り立っているから今の番目でも成り立つという議論を1000回ほど行えば確かめられます。 n=10000だったら、10000回、n=100000000だったら100000000回繰り返せば確かめられます。 ですが重要なのは実際に1000回もやってみなくても、実際にその確認をすることができる手続きがあるということです。 どんなに大きなnでも、そのnの場合にその関係が正しいことを確かめる手続きがあるのです。 絶対に正しいことを確かめられる手続きがあるのですから、わざわざその手続きを実際にやってみるまでもなく正しいということが分かります。 ということは、どんなに大きなnの場合も、a*n=(n2+n)/2という関係が成り立つことが確かめられたのです。 ちなみに、このような議論の仕方を数学的帰納法と呼びます。

さらに高い累乗の場合

ずいぶん長くかかりましたが、S({n})={(n2+n)/2}であることが分かりました。 S({x})={xn}だし、S({n})={(n2+n)/2}と来たのですから、次はS({n2})がどうなるのか調べてみます。 これもn番目の数を表す式をあてずっぽうでもいいから見つけて、数学的帰納法でそれが常に正しいことを確かめる方針で調べます。

S({n})の時と同じように数列を具体的に書いて、それを他の数列と見比べてみるのもいいのですが、数列が複雑になってきたので、それだとなかなか上手くいかないことに気づきます。 そこでS({x})={xn}やS({n})={(n2+n)/2}の式をよく見てみると、どうやらSで数列を変化させると、nの累乗が1つ増えた数列が出てくるように見えます。 だとしたら、S({n2})は2乗が3乗になって、S({n2})={an3+bn2+cn+d}のような形の式になると、あてずっぽうだけれど考えることができます。 そしてこの式がもしも正しいとすると、nが1の時も2の時も3の時も4の時も当てはまっていないといけないので、S({n2})={a*n}と書くと、

a*1=a13+b12+c1+d,
a*2=a23+b22+c2+d,
a*3=a33+b32+c3+d,
a*4=a43+b42+c4+d

となっていないといけません。 具体的にS({n2})の初めの4つの数を計算すると、

a*1=12

=1

だし、

a*2=12+22

=1+4
=5

だし、

a*3=12+22+32

=1+4+9
=14

だし、

a*4=12+22+32+42

=1+4+9+16
=30

なので、さっきの関係と合わせると次のような4つの方程式ができます。

a+b+c+d=1,
8a+4b+2c+d=5,
27a+9b+3c+d=14,
64a+16b+4c+d=30.

これは変数が4つ、式が4つある連立方程式なので解くことができて、答えは

a=1/3,b=1/2,c=1/6,d=0

になります。 つまり

S({n2})=n3/3+n2/2+n/6

=(2n3+3n2+n)/6

だということです。 この式を数学的帰納法ですべてのnについて成り立つことを確かめます。 まずn=1の場合には

(2(13)+3(12)+1)/6=6/6

=1

となり、正しいことが分かります。 次にa*n=(2n3+3n2+n)/6であると仮定したら、S({n2})の定義上、a*n+1=a*n+(n+1)2なので、

a*n+1=(2n3+3n2+n)/6+(n+1)2

=(2n3+3n2+n)/6+n2+2n+1
=(2n3+3n2+n+6n2+12n+6)/6
=[2(n+1)3-6n2-6n-2+3(n+1)2-6n-3+(n+1)-1+6n+12n+6]/6
=[2(n+1)3+3(n+1)2+(n+1)]/6

です。 つまり

a*n+1=[2(n+1)3+3(n+1)2+(n+1)]/6

ということになり、数学的帰納法でa*n=(2n3+3n2+n)/6であることが分かります。 なのでS({n2})={(2n3+3n2+n)/6}です。 同じようにしてS({n3})={(n4+2n3+n2)/4}であることが分かります。 興味がある人は自分で計算してみましょう。

Sに定義できる計算

様々な数列のSで対応する先の数列が分かったところで、Sという写像の持つ性質についてもっと詳しく調べてみましょう。 例えばS({an})+S({bn})はどのような数列になるでしょうか。 S({an})やS({bn})はどちらも数列なので、当然足し算することができます。 結果はS({an})={a*n}であり、S({bn})={b*n}であるとしたら、

S({an})+S({bn})={a*n}+{b*n}

={a*n+b*n}

となります。

{a*n+b*n}というのは{a*n}のn番目の数と{b*n}のn番目の数を足し合わせて作った新しい数列です。 そのn番目の数を具体的に書いてみると、

a*n+b*n=a1+a2+a3+...+an+b1+b2+b3+...+bn

となります。 これをちょっと並び替えてみると、

a*n+b*n=a1+b1+a2+b2+a3+b3+...+an+bn

となります。 単にaごと、bごとに並んでいた数をaとbの1番目、2番目、3番目、・・・n番目、と数字をそろえて並び替えただけです。 でもこれをよく見てみると、

a*n+b*n=(a1+b1)+(a2+b2)+(a3+b3)+...+(an+bn)

ということが分かります。 これは何かというと、S({an}+{bn})のn番目の数です。

{an}+{bn}={an+bn}

=a1+b1,a2+b2,a3+b3,...,an+bn,...

ということであり、Sはn番目までの数を全部合計するのですから、この数列のn番目までの数を全て足し、それをn番目の数にして作った数列がS({an}+{bn})なので、確かにそうなります。 ということは全体をまとめると、S({an})+S({bn})=S({an+bn})ということです。

これは2つの数列があったら、それぞれを別々にSで対応する数列に対応させた後で足し算しても、元の数列を先に足しておいて、その足されてできた新しい数列をSで対応する数列に対応させても同じ結果が得られるということです。 Sで数列を変化させた後で足すと2回Sによる対応関係を考えないといけませんが、元の数列を足した後でSで対応する先を考えれば、1回で済みます。 足し算して作った新しい数列を1つの数列と考えれば、この関係は何個の数列を足した時にも成り立つのが分かります。 つまり、

S({an})+S({bn})+S({cn})+...+S({xn})=S({an}+{bn}+{cn}+...+{xn})

ということです。 x_nというのは、別に24番目の数列という意味ではなく、好きな数の数列があるということを表しています。 こういう場合、数列の足し算は単に対応する番目の数を足し続ければいいだけなので簡単に計算できます。 そしたら何度も何度もSで対応する先の数列を求めて、その後でそれらを足すよりは、初めに元々あった数列を全部足してそれから1回だけSで対応する先の数列を計算するほうが計算が楽になりそうです。 あるいは、沢山の数列の複雑な足し算でできた数列をSで対応させる時に、1つ1つを対応させるだけなら簡単な場合は、それらを1つずつ計算していって、最後に対応する先を足し算すれば簡単に計算できる場合もあります。 このようにSには非常に便利な性質があります。

他にもαを数字だとして、αS({an})がどうなるか考えてみます。 まずは単純に計算してみると

αS({an})=α{a*n}

={αa*n}

となるのが分かります。 このn番目の数は

αa*n=αa1+αa2+αa3+...+αan-1+αan

となります。 これはS(α{an})のn番目の数と同じです。 つまり、αS({an})=S(α{an})です。 ある数列をSで変化させた後にある数を掛けても、ある数を掛けた後でSで変化させても同じ数列になるということです。 この性質もやはりSの計算を簡単にするのに使えます。 さて、ずいぶん長くSに関する議論を続けてきました。 それらをまとめると、

S({1})={n},
S({n})=({n2}+{n})/2,
S({n2})=(2{n3}+3{n2}+{n})/6,
S({n3})=({n4}+2{n3}+{n2})/4,
S({an})+S({bn})=S({an+bn}),
αS({an})=S(α{an})

だということです。 これらの関係を使えば、例えば{4n3-6n2+4n-1}という複雑な数列がSでどんな数列に対応するかすぐにわかります。

S({4n3-6n2+4n-1})=S(4{n3}-6{n2}+4{n}-{1})

=S(4{n3})+S(-6{n2})+S(4{n})+S(-{1})
=4S({n3})-6S({n2})+4S({n})-S({1})
=4({n4}+2{n3}+{n2})/4-6(2{n3}+3{n2}+{n})/6+4({n2}+{n})/2-{n}
={n4}

となります。

途中をはぶくとS({4n3-6n2+4n-1})={n4}ということです。 Sで対応させる前の数列は少し複雑なものですが、対応させた後はnの4乗が並ぶ数列になります。 面白いですね。

差を計算する写像

ここでもう1つ別の、ある数列から別の数列を作る手続きを定義してみます。 それは、元の数列のn番目の数から(n-1)番目の数を引いた数をn番目の数にして数列を作るという手続きです。 これだとn=1の時に存在しない0番目の数が必要になりますが、n=1の時は元の数列の1番目の数をそのまま使い、nが2以降の場合にこの手続きを行うとします。 {n}の場合は1,2,3,4,5,...,n-1,n,...となるのですから、1番目の数はそのままで1、2番目の数は2-1=1、n番目の数はn-(n-1)=1、となって、結局この手続きで作られる数列は{1}です。 この手続きも元の数列から別の数列を作る、数列から数列への写像です。

この写像をdで表してd({an})={a'n}といった様に表します。 dもSと同じで、数列を変化させて別の数列にします。 a'nの'は、{a'n}は{an}とは違う数列なのだということをはっきり見せるためにつけました。 こういう書き方をすると、d({n})={1}だということになります。 S({1})={n}だったことを考えると、どうやらdとSは逆の性質を持っているということが分かります。 試しに{n}=S({1})という関係をd({n})={1}という関係に代入すると、d(S({1}))={1}となります。 これは、{1}をSで対応させた先の数列をdでさらに対応させたら{1}に戻る、ということを意味しています。

Sとdを合成して合成写像を作ると、その写像は数列を何も変化させない写像になるということです。 これは考えてみれば当たり前で、S({an})={a*n}と書くと、a*n=a*n-1+anであることは定義から分かります。 一方d({an})={a'n}と書くとa'n=an-an-1になります。 定義そのままです。 なら

d({a*n})={a*n-a*n-1}

={an}

になることが分かります。 Sでもdでも1番目の数は元の数列の数そのままなので、これは元の数列と完全に一致します。 つまり、Sで対応させた先の数列をdで対応させると常に元の数列に戻るのです。 Sとdの順番を逆にしてもこの関係は変わりません。 つまり、S(d({an}))={an}だということです。 なぜならnが2以上の場合、

d({an})={a'n}

={an-an-1}
={an}-{an-1}

であり、

S({a'n})=S({an}-{an-1})

=S({an})-S({an-1})
={a*n}-{a*n-1}
={a*n-a*n-1}

とすると、a*n=a*n-1+anなので、a*n-a*n-1=anとなり、これを代入すると

S({a'n})={a*n-a*n-1}

={an}

となるからです。 dで対応させた後にSで対応させても、Sで対応させた後にdで対応させても同じで、どちらも元の数列を再現します。 dとSには、このようなとても強い結びつきがあります。 片方の写像が元の数列を変化させた差をもう片方の写像が埋め合わせて元に戻してしまうのです。

この性質はただ単に美しいというだけではなく、計算を簡単にする役に立ちます。 先ほど、様々な数列をsで対応させた先の数列を計算しました。 それにはn番目の数がどのようになるかを苦労して推測し、数学的帰納法で一般的に当てはまることを確かめるという、とても長く大変な議論が必要でした。 ですが、今見つけたSとdの関係を使えばこの計算が簡単になる場合があります。 そのために、Sとdの、お互いがお互いを埋め合わせるという性質についてもう少し詳しく考えてみます。

Sで対応する先を見つけたいのですから、そのまだ分かっていない数列を{xn}と表すと、S({an})={xn}となります。 ここで、もし{an}=d({bn})となる{bn}が見つかったとします。 そしたらこの関係を先の関係に代入して、S(d({bn}))={xn}となります。 数列をdで対応させた後にSで対応させたら元に戻るので、S(d({bn}))={bn}です。 これはつまり、{xn}={bn}ということで、S({an})={bn}ということです。 計算したかったSで対応する数列を見つけることができました。

もしある数列をSで対応させた数列を計算したかったら、どんな数列をdで対応させたらその数列になるのかを考えればいいのです。 Sを計算するには1番目からn番目まですべての数を足す必要があるのに、dを計算するのには2つの数の引き算だけでいいので、dの方が簡単に計算できる場合が多いのです。 それを踏まえたうえでdの性質について調べていきます。 Sの時のように{1}や{n}や{n2}や{n3}の時にどうなるのか調べます。 まずd({1})ですが、{1}は{1}=1,1,1,1,1,...と1がずっと並ぶだけなので、前後の数の引き算は常に0になります。 1番目は元の数列のままなので1です。 なので、

d({1})=1,0,0,0,...

になります。 これをSで変化させると、

S(1,0,0,0,...)=1,1,1,1,...

となって確かに元に戻ります。 d({n})は先ほど計算したようにnが2以上のときは

a'n=n-(n-1)

=1

になります。 {n}の1番目の数はもともと1なので、d({n})={1}と書けます。

d({n2})は

a'n=n2-(n-1)2

=n2-(n2-2n+1)
=2n-1

となります。 {n2}の1番目の数は1で、2×1-1=1なので、この式はn=1の時にも偶然正しい式になっています。 なのでd({n2})={2n-1}です。

d({n3})は

a'n=n3-(n-1)3

=n3-(n3-3n2+3n-1)
=3n2-3n+1

となります。 これも{n3}の1番目の数は1で、

3(12)-3(1)+1=3-3+1

=1

なのでn=1の時も偶然正しい式になっています。 なのでd({n3})={3n2-3n+1}です。

同じようにd({n4})={4n3-6n2+4n-1}だし、d({n5})={5n4-10n3+10n2-5n+1}となるのが分かります。 必要な計算は(n-1)の累乗を計算してnの累乗から引くだけです。 Sの時にした苦労と比べると、拍子抜けするぐらい簡単です。

またdにはSにあったような、2つの数列の足し算とのいい関係があります。

d({an})+d({bn})=d({an}+{bn})

だということです。 まずはd({an})+d({bn})を普通に計算します。

d({an})+d({bn})={an-an-1}+{bn-bn-1}

={[an+bn]-[an-1+bn-1]}

です。 これはd({an+bn})の定義そのものです。 また、1番目の数はどちらにせよa1+b1なので、d({an})+d({bn})=d({an}+{bn})ということになります。

また、同じようにαd({an})=d(α{an})です。

αd({an})=α[an-an-1]

=αan-αan-1
=d(α{an})

だからです。

これらの関係とS(d({an}))=d(S({an}))={an}を使ってS({n4})がどのような数列になるのか求めてみます。 S({n4})を計算するには、どんな数列をdで変化させたら{n4}になるのかを考えればいいのでした。 そう思って今まで求めてきた式を見返すと、d({n5})={5n4-10n3+10n2-5n+1}という式が目につきます。 ここには5{n4}という数列が出てきます。 {n5}という数列をdで変化させたら{n4}を含んだ数列になるのです。 いくつか余計な数列も出てきますが、ここを上手く打ち消すことができたら、dで対応させて{n4}に対応する数列が見つかります。

まずは-10{n3}を打ち消すことを考えます。 そのためには、d({n4})={4n3-6n2+4n-1}の中に4{n3}という数列が出てくることに注目して、5/2d({n4})を足せばいいことが分かります。

5/2d({n4})={10n3-15n2+10n-5/2}

なので

d({n5})+5/2d({n4})={5n4-10n3+10n2-5n+1}+{10n3-15n2+10n-5/2}

=5{n4}-5{n2}+5{n}-3/2

となります。 {n3}が打ち消しあって消えました。 この調子で残りの-5{n2}+5{n}-3/2も打ち消していきます。

-5{n2}を打ち消すためには5/3d({n3})を足します。 そうすると

d({n5})+5/2d({n4})+5/3d({n3})=5{n4}-5{n2}+5{n}-3/2+5/3{3n2-3n+1}

=5{n4}+1/6

となります。

1/6を打ち消すために-1/6d({n})を足します。 そうすると

d({n5})+5/2d({n4})+5/3d({n3})-1/6d({n})=5{n4}+1/6-1/6

=5{n4}

となります。 最後に全体に1/5を掛けて足し算をまとめれば、

d(1/5{n5+5/2n4+5/3n3-1/6n})={n4}

となります。 これとS(d({an}))={an}という関係から、

S({n4})=S(d(1/5{n5+5/2n4+5/3n3-1/6n}))

=1/5{n5+5/2n4+5/3n3-1/6n}

です。 つまり

S({n4})={1/5n5+1/2n4+1/3n3-1/30n}

だということです。 S({n2})やS({n3})を計算するのもかなり大変だったのに、そんなに苦労せずにS({n4})が計算できてしまいました。 この調子ならS({n5})やS({n6})なども、そこまで苦労することなく計算できそうです。 興味がある人は自分で計算してみるといいでしょう。

5.2.4 数列の極限

一定の値に近づく数列

これまでは手続きによって定義される数列について様々な議論をしてきました。 手続きによって全ての数を書ききることのできない、ずっと続く数字の羅列を定義し、さらに定義された数列の持つ数学的な構造を調べてきました。 これまで調べてきた数列は{n}とか{n2}のように、どんどん数が大きくなっていく数列でした。 では、逆にどんどん数が小さくなる数列を考えることはできないのかというと、ちゃんと考えることができます。

例えば{1/n}などがそうです。 具体的にこの数列を計算してみると、

{1/n}=1,1/2,1/3,1/4,1/5,...

と、{n}の逆数が並んだ数列になります。 分数の分子はずっと1なのに、分母が1,2,3,...と大きくなっていくのですから、1を割り算する数が大きくなっていくということで、この数列は番目が大きくなるにつれて数が小さくなっていく数列です。 小さくなっていくと言っても、いくらでも小さくなるわけではなくて、0にどんどん近づいていくだけで決して負の数にはなりません。

例えばこの数列の10番目の数は1/10=0.1です。 100番目の数は1/100=0.01だし1000番目の数は1/1000=0.001です。 10000000000番目の数は1/10000000000=0.0000000001になります。 これはほとんど0に近い数ですね。 この調子でどんどん番目が大きくなっていくとどんどん0に近い小さな数になっていきます。 ですが、それは決して0にはならないし、まして負の数には絶対なりません。 {1/n}はそういう性質をもった数列です。

他にも例えば{(n+1)/n}という数列を考えてみます。 これは少し複雑になりますが、(n+1)をnで割った数列です。 これを実際に計算してみると、

{(n+1)/n}=2,3/2,4/3,5/4,6/5...

となります。 分数を小数に直すと、

{(n+1)/n}=2,1.5,1.333...,1.25,1.2,...

となるので、これも番目が進むにしたがってどんどん小さくなる数列です。 ですがこの数列は決して0には近づきません。 例えば9番目の数は10/9=1.111...だし、9999番目の数は10000/9999=1.00010001...です。 この数列は1に近づいていって、決して1より小さな数にはなりません。 これは少し論理的に考えれば納得がいくことで、

{(n+1)/n}={n/n+1/n}

={1+1/n}
={1}+{1/n}

なのですから、この数列は{1}に{1/n}を足したものなのです。 {1}はいつまでたっても1のままなのに対し、{1/n}はnが大きくなれば0に近づいていきます。 ということは{1}+{1/n}はどんどん{1}に近づいていくわけで、つまり番目が大きくなるとこの数列の数は1に近づいていくのです。 このようにある数列がどんどんある数に近づいていく、という状況が時々あります。

この、近づくという状況をきっちりと定義してその数学的な構造を調べることができます。 数列がある数に近づいていくのを、数列がある数に収束するとか、単に収束すると呼び、数列が収束していく数は極限とか極限値などと呼ばれています。 数列がある数に近づいていくというのを手続きによって定義すると次のようになります。

ある数をεと表してそれがどんなに小さな数でも、ある特別なm番目の数があり、それ以上の番目の数に対して|an-α|を計算したらεよりも小さい数字になるなら、数列{an}はαに収束すると言う。

εは小さいと言っても負の数になってはいけません。 0にとても近い正の数という意味です。 |an-α|というのはan-αの絶対値で、数列のn番目の数からαを引いた数の絶対値です。 手順がたくさんあって複雑で、一見しただけでは何が何やらといった感じを受けますが、収束するという状態をこのような手続きで定義すると、とても議論が厳密になって間違いない結論が得られます。 ではこれらの手続きを一つ一つ詳しく見てみます。

まずある数εを用意します。 これはどんな数字でも構いません。 0.1とか0.001とか0.000001とか、どんなに小さい数でもいいのです。 そういう小さい数字を用意しておいて、ある数列{an}の収束する極限値がαだとしたら、{an}-{α}という数列を計算したら、あるm番目から先の数はすべてεより絶対値が小さくなるということです。

ここで、そもそも収束するかしないか、極限値がどうなるのかを知らなかったらαをanから引くことができなくて、それ以降議論が進まないのではないかという心配があります。 これは数学的帰納法を使って数列のn番目の数を表す式を求めた時と同じです。 あらかじめあてずっぽうでαを求めておき、それが厳密に極限値であることを調べるためにこの手順を使うのです。 それでは実際に{1/n}が0に収束する様子を具体的に見てみましょう。

まずは小さい数として0.1を用意します。 0に収束するのを確かめたいのですから、絶対値を計算する数列は{1/n}-{0}={1/n}です。 つまり、果たして{1/n}の数列の数があるm番目より先ではずっと0.1よりも小さな数になるようなm番目はあるのか、を見ればいいということです。 今の場合は、n=10の時にa10=1/10=0.1になり、それ以降は1/11,1/12,1/13,..と続いていくのですから、これらの数は0.1より小さくなることがわかります。 なのでεが0.1の時はm=10とすれば{1/n}は0に収束するのに必要な関係を満たしています。

次はもっと小さい数を用意して、0.0001を使ってみます。 そうしたら、n=10000の時にa10000=1/10000=0.0001なので、それ以降の数は1/10001,1/10002,1/10003,...と、0.0001よりも小さな数になることが分かります。 なのでεが0.0001の時もm=10000とすれば{1/n}は0に収束するのに必要な関係を満たしています。 この調子ならどんなに小さいεでもそれより小さくなる{1/n}のm番目の数を見つけることができそうです。

それをεをεのままにしておいて、代数的に確認します。 {1/n}のn番目の数は1/nなので、これがεより小さくなるとすると、1/n<εだということになります。 εは小さい数なので分数で表してε=1/aという形で書けます。 aに大きな数をとればεは小さな数になります。 どんなに大きなaを選んでも、aよりもさらに大きな整数をmとすれば、a<mであり、この場合1/m<1/aは常に満たされます。 これは1/m<εということで、{1/n}の数列のm番目の数と0との差の絶対値がεよりも小さくなる、数列のm番目の数が見つかったことを意味します。 よって{1/n}は0に収束するのが定義から分かります。

また、{(n+1)/n}の場合を調べてみます。 まずはこの数列が0に収束しないこと、0に収束すると考えて収束の定義を当てはめていくと、当てはまらないことを確認します。 計算する数列は{(n+1)/n}-{0}なので{(n+1)/n}です。

εが1.5なら、n=2のときにa2=(2+1)/2=1.5なので、それ以降は(n+1)/nは1.5よりも小さい数になります。 なのでεが1.5のときはm=2とすれば{(n+1)/n}が0に収束するとしても収束に必要な関係を満たします。 もっとεを小さくして1.1にしたらn=10のときに(10+1)/10=11/10=1.1なので、それ以降は(n+1)/nは1.1よりも小さい数になります。 なのでεが1.1のときはm=10とすれば{(n+1)/n}が0に収束するとしても収束に必要な関係を満たします。

しかしεを1にしたら、もうどんなに大きなnを調べても、(n+1)/n<1となるようなmを見つけることはできません。 どんな小さな数をεにしても収束に必要な関係を満たしてくれなければ収束するとは言えないので、{(n+1)/n}は0には収束しません。 同じように0.5に収束するとしたらεが0.5よりも大きければ上手くいきますが、それより小さい数にすると収束に必要な関係を満たさなくなります。

じゃあどんな数に収束するのかといえば、もちろん1です。 {(n+1)/n}={1}+{1/n}なので

{(n+1)/n}-{1}={1}+{1/n}-{1}

={1/n}

となり、{1/n}は0に収束するので、あるεに対して、m以上のnで(n+1)/n-1<εとなるようなmを見つけることは、あるεに対してm以上のnで1/n<εとなるようなmを見つけるのと同じです。 これはもう既に分かっていて、どんなεに対してもm以上のnで1/n<εとなるようなmを見つけることができます。 つまり元に戻って、(n+1)/n-1<εとなるようなmを見つけることができ、{(n+1)/n}が1に収束するということが分かります。 同じように{1/n2}や{1/n3}が0に収束することが分かります。 興味がある人はやってみるといいでしょう。

このように数列の収束という考え方を定義することができて、その定義に従って数列がどんな数に収束するかを議論できるというのは分かったと思います。 ですが、そもそもこの定義がどうして数列がある数に近づいていくという状況を表しているのか、この定義はそもそも、本当にちゃんと数列が収束していく様子を表しているのか、という疑問がわきます。 いくらこういう手続きによって収束する、数列がどんどんある数に近づいていくという状況を定義したとしても、その定義がきちんと、日常の感覚で感じる近づいていくという状況を上手く表していなかったら、それは単なる特殊な数学的な概念でしかなく、数学的な関係を考えることはできても、日常的な意味での近づくという現象とは似ても似つかないものになってしまいます。 数列がどんな数に収束するか調べるというのは、数列の番目をどんどん追いかけていって、最後にどんな数になるのかを調べるということです。 ですが、今考えている数列には終わりがないので、最後の数というものがありません。 最後の数が存在しないので、数列として並んだ数をいくら調べていっても最後にどんな数になるのかを知ることはできません。 なのでどうにかして、最後まで数列を調べないで、どこかにどんどん近づいていっている、という状況を表さなくてはいけません。

ある数に数列がどんどん近づくというのは、その数と数列の数の差がどんどん無くなっていく、ということです。 例えば{1/n}は0にどんどん近づいていくので、0と{1/n}の数の差は番目が大きくなればなるほど小さくなっていきます。 つまり、{1/n}のn番目の数である|1/n-0|がどんどん小さくなっていきます。 差がどんどん小さくなっていって、最後には0になるのであればいいのですが、そうはなりません。 {1/n}はいくら小さい数になっても絶対に0より大きな数であり続けます。 ですが、差はどんどん小さくなっていきます。 数列の数が極限値に一致して差がなくなることはありませんが、差はどんどん小さくなっていくのです。

差がなくなることはなくても、もしその差がいくらでも小さくなるのなら、それはその数列が極限値にいくらでも近づいていく状況を表しています。 いくらでも小さくなるというのは、その数列のある番目の数と極限値の差を計算して、それが小さな数になったとしても、それよりもっと小さな差を持つような数列の番目を見つけることができる状況のことです。 つまり、ある数列のm番目の数に対してαという極限値との差を計算したら、ある小さい数であるεになったとき、数式で書くと|am-α|=εとなったときに、必ずもっと小さな差しか持たないようなm'番目の数を見つけることができるということです。 つまり|am'-α|<εというm'を見つけることができるということです。 このように、数列の数と極限値の間にとても小さな差しかなかったとしても、それよりもっと小さな差になるようにできるのなら、この手続きを何度も何度も繰り返せば、どんどん数列の数は極限値に近づいていくことになります。

このような手続きが実行できるのであれば、その数列はその極限値に近づくと言ってもいいということは、日常の感覚で分かります。 そしてこれはεを小さな数だとして、それがどんな小さな数だとしても|am-α|<εとなるようにできるということと同じなのです。 どんなεを用意してもそれよりもっと小さな差にできるなら、どんな小さなεに対しても、数列と極限値の差がそれより小さくなります。 なので、この定義を満たすならそれは日常の感覚で数列がある数に近づいていくというのと同じ状況を表していることが分かります。

無限のかなたへ

さて、ある数列が何か具体的な数に収束するときはこの手続きでそれを定義できるのですが、数列がどんな数にも収束しない場合はこれでは困ります。 数列が収束しないとき、その数列は発散すると言います。 発散する数列は、どんな数にも近づいていかない、ということです。 例えば{n}や{n2}や{-n}などです。 {n}と{n2}はどんどん大きくなっていく数列です。 {-n}はどんどん負に大きくなっていく数列です。 これらの数列が何か具体的な数に収束すると仮定するとおかしな話になります。

例えば、{n}が収束する数をαと表します。 そうなると、どんな小さなεを考えても、あるm番目以降は数列{n-α}の数がεよりも小さくなることになります。 つまり{n-α}という数列のm番目の数はεより小さい数です。 これをβと表します。 こうするとβ<εという関係が成り立ちます。 次に{n}という数列は、前の番目の数に1を足して次の番目の数を決める数列なのだから、{n-α}のm番目の次の数もやはりm番目の数に1を足して得られる数だということを考えると、{n-α}の(m+1)番目の数はβ+1だということになります。 {n}がαに収束するとしたら、定義からm番目以降の数はすべてεより小さいのですから、β+1<εということになりますが、これはεとβの差が1よりも小さければ成り立ちません。 どうしてこんなおかしな結論が得られたのかといえば、初めに仮定した{n}がある具体的な数であるαに収束する、という仮定が間違っていたのです。 つまり{n}はどんな数にも収束せずにどんどん大きな数になっていきます。

同じように{n2}もどんな数にも収束せずにどんどん大きな数になります。 一方{-n}もやはりどんな数にも収束しないことが分かるのですが、それは数字の部分は大きな数になっても符号が負なので、どんどん小さくなっていきます。 このようにどんどん大きくなったり小さくなったりするときに、無限大に発散する、と言います。 大きさに限りが無いから無限大と言うのです。 正の数がどんどん大きくなるときは正の無限大、負の数が数字は大きくなるけど符号が負でどんどん小さくなるときは負の無限大に発散するといいます。 これも手続きによって定義すると、どんなに大きな数を用意しても、あるm番目以降の数がその大きな数よりも大きくなる場合、無限大に発散すると定義できます。

では、ある数に収束もせず、また無限大にも発散しない数列はないのかと言えば、実はあります。 それは例えば{(-1)n}のような数列です。 この数列を具体的に計算してみると、{(-1)n}=-1,1,-1,1,-1,1,...という様に-1と1を交互に繰り返す数列です。 出てくる数は1と-1だけなのですから、無限大に発散することはありません。 例えばある大きな数として2を考えれば、どんな番目の数よりも大きいので、無限大に発散する数列の定義を満たすことはありえません。 また、ある数に収束するとしても、この数列には1と-1しか出てこないので、例えば1に収束するとしたら-1との差が2ありますし、-1に収束するとしてもやはり1との差があるので、定義を満たしません。 それ以外の数では1と-1の両方から離れてしまうのでもっと無理です。 つまり、この数列はある数に収束もしなければ、正負どちらの無限大に発散することもない数列です。 こういう場合、数列は振動すると言います。

極限値の構造

さて、数列にはこのように収束するもの、無限大に発散するもの、そのどちらでもないものがあります。 発散したり振動したりする数列はひとまず置いておいて、これからは収束する数列の間にある数学的な構造について調べてみます。 {an}がαに、{bn}がβという数に収束するとします。 このとき{an}+{bn}はいったいどんな数に収束するのか、考えてみます。 {an}+{bn}={an+bn}なのだから、もしかしたらこの数列はα+βという数に収束するのではないかと、あてずっぽうで考えてみます。

それを確かめるために、{an+bn}-{α+β}という数列を考えてみます。 ε/2を小さい数だとして、{an}がαに、{bn}がβに収束するのだから、あるm番目とm'番目の数があって、

am-α<ε/2,
bm' -β<ε/2

を満たすように{an}のm番目の数と{bn}のm'番目の数を見つけることができます。 これは収束の定義そのものです。 そしてmとm'のうち、どちらか大きい方の数を選びます。 どちらでもいいのですが、仮にmの方が大きい数字だったとします。

そうなると、収束の定義からam-α<ε/2だし、bm-β<ε/2です。 {bn}はβに収束していくのですから、番目が大きくなればなるほど、βに近い数になります。 つまりm'<mなのだから、当然

bm-β<bm'

<ε/2

だというわけです。 なので、am-α<ε/2とbm-β<ε/2を足し合わせると、

am-α+bm-β<ε/2+ε/2

となります。 つまり(am+bm)-(α+β)<εです。 m'の方がmよりも大きかったら、この式のmとm'をいれかえさえすれば、他の部分は同じ関係が成り立ちます。 これはεをどんなに小さい数にしても成り立つので、{an}+{bn}がα+βに収束することを表しています。 同じように{an}-{bn}はα-βに収束します。

また、{an}がαに収束するとき、ある数をcだとして、c{an}がどんな数に収束するのかも考えてみます。 今回も単純に考えて{an}がαなら、c{an}はcαに収束するのではないかとあてずっぽうに考えてそれを確かめてみます。 まずはε/cを小さな数だとして、{an}がαに収束するのだから、あるm番目があってam-α<ε/cとなるように{an}のm番目の数を見つけることができます。 そうなると、am-α<ε/cの両側にcを掛けてcam-cα<εとなります。 これはc{an}のm番目の数からcαを引いた数がεより小さいということで、c{an}がcαに収束することを表しています。

このように、いくつかの数列がある数に収束するとき、それらの数列の足し算や数との掛け算でできる数列が収束する極限値は元の極限値におなじ計算をして得られる数になります。 つまり、極限値の足し算や数との掛け算が定義できるということです。 それをより分かりやすくするために、収束するという言葉を記号で表すことができると便利です。 そのためにlimという記号を使います。 これはlimitの略で、limitというのは英語で限界とか極限とかそういう意味です。

この記号を使って、{an}がαに収束する、というのを、lim{an}=αと書きます。 より正確にはlimの下にn→∞と書かないといけないのですが、それはネット上で文章として書こうとしても書けないので、不正確ですが省略させてください。 ∞というのは無限大のことで、nがどんどん大きくなるというのを、限り無く大きくなると言いかえて、nが無限大になると言うのです。 負の無限大は-∞と書きます。 この無限大の記号は数式でも使います。

さて、この記号を使えば、例えば{an}がαに、{bn}がβという数に収束しているのは

lim{an}=α,lim{bn}=β

と書くことができます。 {n}が正の無限大に発散し、{-n}が負の無限大に発散するのは

lim{n}=∞, lim{-n}=-∞

と書くことができます。 また、{an}と{bn}を足し算してできた数列がα+βに収束するというのは、

lim{an+bn}=α+β

と書けます。 lim{an}=α, lim{bn}=βであるので、これをα=lim{an}, β=lim{bn}という様に読み変え、lim{an+bn}=α+βに代入すれば

lim{an+bn}=lim{an}+lim{bn}

ということが分かります。 これは2つの数列があって、それがどの極限値に収束するかを考えた後で足し算しても、考える前に足し算しておいて、その足し算して作った新しい数列がどの極限値に収束するか考えても、どちらも同じ結果になるということです。 これは考えてみれば不思議なことで、数列の極限値というのはちょっと複雑な手続きによって見つける数です。 ある数列にその複雑な手続きを行って見つけた数と、別の数列に同じ様な複雑な手続きを行って見つけた別の数を足し算すると、手続きを行う前の元の数列を足し算し、新しく作った別の数列にさっきと同じ様な複雑な手続きを行って見つかる数と同じ数になるということです。 もしその手続きが変な具合に定義されていたら、絶対にこんなことは起こりません。 極限値を見つけるための手続きの定義がとても良くできているので、このような美しい関係が成り立つのです。

同じように{an}にある数cを掛け算してできた数列がcαに収束するというのは、

lim(c{an})=cα

という様に書けます。 これもα=lim{an}であることを考えると、

lim(c{an})=c(lim{an})

ということを表しています。 これは、ある数を数列に掛け算して作った新しい数列が収束する極限値も、元の数列が収束する数にある数を掛け算しても同じ極限値になるということです。 これらの関係と、いくつかの基本的な数列の極限値を使えば複雑な数列の極限値も簡単に計算することができる場合もあります。 これまで調べたことをまとめると、

lim{1/n}=0
lim{1/n2}=0
lim{1/n3}=0
lim{n}=∞
lim{n2}=∞
lim{-n}=-∞
lim{an+bn}=lim{an}+lim{bn}
lim(c{an})=c(lim{an})

だということです。 例えば{4/n2+300/n+2}という数列の極限値を考えてみます。

lim{4/n2+300/n+2}=lim{4/n2}+lim{300/n}+lim{2}

=4lim{1/n2}+300lim{1/n}+lim{2}
=4×0+300×0+2
=2

です。 つまりlim{4/n2+300/n+2}=2です。 このように複雑な数列の極限値も、それが今までに計算した数列の組み合わせでできているのであれば簡単に計算できます。

5.3 微積分学

5.3.1 関数の極限

関数と数列の類似性

これまでは数列の定義や数列を数列に対応させる写像、数列の収束について考えてきた。 これらの議論を発展させると題名にあるように微分や積分といった考え方に至る。 そのために関数の収束について議論していく。

関数というのは数と数の対応関係のことで、変数のある値に別のある値を1つ対応させたものである。 例えばf(x)=xという関数は、x=1のとき1に、x=2のとき2に、x=3のとき3に対応する。 一般的に言ってnをある数だとして、x=nのときnである。 これは今までさんざんやってきた{n}という数列と似ている。 {n}という数列はn=1のとき1を、n=2のとき2を、n=3のとき3を対応する番目の数として持つ。 一般的にn番目のときはnである。 nをxに変えれば、関数も数列も完全に同じものになる。

関数が数列と違うのは、数列は1番目、2番目、といった、自然数の番目に対応して別の数を対応させているのに対し、関数は0.1とか√2とか、自然数でない数にも対応する数があるということである。 そういう意味で、数列は関数の自然数に対応する部分だけを取り出したものだと考えることができる。 例えばf(x)=x2はxが1,2,3,4,...である部分だけを考えれば、1,4,9,16,...と{n2}と同じ数に対応する。 他にもf(x)=x3は{n3}に、f(x)=1/xは{1/n}に対応する。 このように、関数は数列と似た面を持っているので、関数についても数列のときのように収束や極限値という考え方をあてはめることができる。

数列のときはnがどんどん大きくなっていくときに数列がどのような数に近づいていくかを考えた。 関数の場合にも同じようにxがどんどん大きくなっていくときに関数f(x)がどのような数に近づいていくかを考えることができる。 例えばf(x)=xはxがどんどん大きくなっていくとき、{n}と同じようにどんどん大きくなる。 他にもf(x)=1/xはxがどんどん大きくなっていくとき、{1/n}と同じように0に近づいていく。 この、どんどん大きくなっていくとか、0に近づくというのを数列のときにやった様に手続きを使って定義すると次のようになる。

小さな数をεで表して、それがどんな小さな数であっても、x*以上のxであれば|f(x)-α|<εとなるようなx*を見つけることができるならf(x)はxが無限大に近づくときαに収束すると言う。

これを記号で表すとlim f(x)=αとなる。 あるいはf(x)→α (x→∞)と書く。 これはxがどんどん大きくなっていくとき、つまり無限大に近づくとき、f(x)はαに近づく、という意味で、数列の時とほとんど同じである。 発散する時の定義は次のようになる。

どんなに大きな数を用意しても、あるx*以上のxであればf(x)がその大きな数よりさらに大きくなるとき、f(x)は発散すると言う。

このようにして関数の収束について議論していくこともできるのですが、これではあまり数列のときの議論と変わったことは起こらない。 数列と関数とで最も違うのは、数列は1番目、2番目、3番目、と番目が大きくなっていくだけなのに対し、関数の変数はただ大きくなるだけではなく、小さくもなりえるということである。 例えばf(x)=1/xという関数の場合、xがどんどん大きくなっていけば{1/n}の場合とまったく同じように0に収束するが、逆にxが小さくなっていくと数列とは違った変化が見られる。 f(x)=1/xという関数はx=1のときはf(1)=1/1=1で、x=2のときはf(2)=1/2=0.5という様にxが大きくなると関数で対応させた先の数は小さくなる。

だがxは1より小さな数でも構わない。 そうなると例えばx=0.5のときはf(0.5)=1/0.5=2で、x=0.1のときはf(0.1)=1/0.1=10という様にxが小さくなると関数で対応させた先の数は大きくなる。 これは考えてみれば当たり前で、1より小さい数は分数で表すことができ、それを1/aと表すと、x=1/aのとき

f(1/a)=1/(1/a)

=a

となるのだから、分母の数が大きくなればなるほど、つまりaが大きくなればなるほど関数で対応させた先の数は大きくなる。 これは何を意味しているかというと、xがどんどん小さくなっていけば関数で対応させた先の数はどんどん大きくなっていくということである。 これは{n}とまったく同じように無限大へと発散する。

同じ関数なのにxがどんどん大きくなっていくときと、どんどん小さくなっていくときとでまったく違う結果が得られる。 これは関数の収束を考えるときは、xがどこに向かっているのかがとても重要な意味を持つことを表している。 それは数列のときは番目の数が無限大に向かう以外に無かったのに対し、関数の変数はもっと様々な変化ができるからである。 関数の収束を考えるときは、変数がどこに向かっているときに関数はどこへ向かうか、を考えなくてはならない。

関数の収束は数列の収束とは違って変数がどこに向かっているかも重要になってくるのだから、関数の収束について考えるときはそれをきちんと分かりやすく書いておかなくてはならない。 数列のときはnは無限大に近づくだけだったから省略できたが、関数の場合は同じ関数でも変数がどこに近づくかで結果がまるで違ってくるからである。 変数がaという数に近づくとき、関数で対応する数はαに近づくというのを記号で書くときは次のようにする。

f(x)→α (x→a)

limを使って書く書き方も一般的なのだが、それはネット上の文章として書きづらいのでこちらを主に使っていく。 limを使って変数が近づいていく先を書くには、limの記号の下に小さくx→aなどと書き加える。 aのことを極限値と呼ぶ。 これらは単なる書き方の約束なので覚えて使うようにして欲しい。 それでは変数がaに近づくとき、関数で対応する数がαに近づくという状況の厳密な定義を述べる。

小さな数をεで表したとして、どんなに小さなεにもあるδがあって、0<|x-a|<δならば|f(x)-α|<εとなるなら、xがaに近づくときf(x)はαに近づくと言う。

このように定義すれば関数の収束をよく表すことができる。 小さなεを考えて、f(x)とαの差がεより小さくなるならf(x)がαに近づくと言えるというのは数列のときと同じである。 それに加えて変数xがaに近づくことも言わなくてはいけないので、δというもう一つの数を使ってxとaの差も小さくなることを表すのである。 小さいと言ってもεやδは負の数になってはならず、正の数でなくてはならない。

この定義は確かにxがaに近づくときf(x)がαに近づくという状況をうまく定義している。 まずある小さな数としてεを用意する。 それは0.1や0.000001などのようにとても小さい数でいい。 |f(x)-α|というのはf(x)とαの差なのだから、|f(x)-α|<εというのは、そんな小さな数よりもf(x)とαの差が小さいことを意味している。 つまりf(x)がα+εとα-εの間にあるということである。 しかしf(x)はxの関数で様々な数になり得る。 だからδという別の小さな数を用意して、0<|x-a|<δとなるとき、つまりxがa+δとa-δの間にあるなら|f(x)-α|<εになるということを言わなくてはならない。 もし、どんなに小さなεを選んでも、aに十分近いxを考えればf(x)とαの差をεより小さくできるのなら、それはxがaに近づくときf(x)はαに近づくと言える。 このようにεとδを使って関数の極限や収束を考える論法は、ε-δ論法と呼ばれている。

ではこの定義で実際にf(x)=xという関数がxが1に近づくときは1に収束することを確かめよう。 この関数はxの値をそのまま関数の値とするので、x=1のときはf(1)=1になる。 当然xが1に近づくならf(x)の値も1に近づくことになる。 例えばεとして0.1を選んだら、δとして0.1を選べば、つまり0.9<x<1.1であれば、|f(x)-1|<0.1になる。 f(x)の値はxそのものなので、0.9<x<1.1であるxならどのxでも1との差が0.1より小さくなるから成り立つ。 これと同じ議論がεとして0.001や0.0000001のようにどんどん小さな数を選んでもいつでも成り立つのだから、f(x)はxが1に近づくとき1に近づくことが分かる。

これと同じことをもっときちんとした議論で確かめてみる。 調べるべきことは、どんなに小さな数εを選んでもあるδがあって、0<|x-1|<δならば|f(x)-1|<εになるということである。 書き換えると、どんなに小さな数εを選んでもあるδがあって、0<|x-1|<δならば|x-1|<εになるということである。 これはどんなεを選んでもδ<εとなるようにδを選べば成り立つ。 δ<εなら、0<|x-1|<δ<εなのだから、|x-1|<εということになる。 定義が満たされているのだから、f(x)=xはxが1に近づくとき1に近づく。

発散する場合

さて、このようにしてf(x)=1/xのxが0に近づくときに無限大に発散して、xが無限大に近づいていくときは0に収束することを調べたい。 そのためには無限大を扱えるように収束の定義をしなければならない。 無限大を扱うときの収束の定義は次のようになる。

どんなに大きな数を用意しても、あるx*以上のxであればf(x)がその大きな数よりさらに大きくなるなら、xが無限大に近づくときf(x)は発散すると言う。

小さな数をεで表したとして、どんなに小さなεでも、あるx*以上のxであれば|f(x)-α|<εとなるなら、xが無限大に近づくときf(x)はαに近づくと言う。

どんなに大きな数を用意しても、あるδがあって、0<|x-a|<δであればf(x)がその大きな数よりさらに大きくなるなら、xがaに近づくときf(x)は無限大に近づくと言う。

負の無限大に発散したり近づいたりするときは、それぞれ負に大きな数、つまり小さな数を用意したり、x*以下のxを考えたりする。 これらは変数や関数の値が無限大に近づいたり発散したりするのと、ある値に近づいていくのとの組み合わせになっている。 これらは変数が無限大に近づいて関数の値も発散するか、関数の値は収束する場合と、変数はある値に近づくが関数の値は発散する場合である。 これに加えて振動する数列のように発散も収束もしない関数も存在する。 例えばsin関数やcos関数は変数が無限大に近づいても発散も収束もしない。

ではこれらの定義をf(x)=1/xに当てはめてみる。 まずはxが無限大に近づくときに関数で対応する数が0に収束することを調べる。 確かめるのは、小さな数をεで表したとして、どんなに小さなεでも、あるx*以上のxであれば|1/x-0|<εとなることである。 つまり、どんなに小さなεを用意してもあるx*以上のxであれば|1/x|<εとなることである。 この条件は1/ε<x*となるようにx*を選べば成り立つ。 x*=1/εだとしたら、

f(x*)=1/x*

=1/(1/ε)

なのだから、1/ε<x*となるようにx*を選べば分数の分母がより大きくなり、関数で対応する数はεより小さくなる。 よって定義が当てはまるのだからf(x)=1/xはxが無限大に近づくとき0に収束する。

同じようにf(x)=1/xはxが100,10,1,0.1,0.01,0.000001,...といった様に0に近づくとき無限大に発散することを確かめよう。 確かめるべきことは、ある大きな数をRとして、どんなに大きなRにもあるδがあって0<|x-0|<δであればR<f(x)となることである。 この条件はδ<1/Rとすれば成り立つ。 なぜならδ=1/Rとしたら

f(δ)=1/δ

=1/(1/R)
=R

となり、0<|x|<δ<1/Rなら分数の分母がもっと小さくなるのだから、関数で対応する数はもっと大きくなりR<f(x)が成り立つからである。 よって定義が当てはまるのだからf(x)=1/xはxが0に近づくとき無限大に発散する。

これは確かに正しいのだが、一つ注意すべき点がある。 それは関数の極限値はどの向きから近づくかによって変わることがあり得るということである。 関数の収束について考えるときは変数がどこに向かっているのかを考えなくてはいけなかった。 それに加えて、変数が大きな数からどんどん小さくなっていってそこに向かうのか、小さい数からどんどん大きくなっていってそこに向かうのかも考えなくてはいけないのである。

例えばf(x)=1/xの場合、xが正の数のときは関数で対応する数も正だが、xが負の数のときは対応する数は負になる。 例えばf(1)=1だが、f(-1)=-1になる。 そして、xが-100,-10,-1,-0.1,-0.01,-0.001,-0.0001...といった様に負の側からどんどん0に近づいていくと関数で対応する数はどんどん負に大きくなる。 つまり小さい数になっていく。 具体的には、

f(-100)=1/(-100)=-0.01
f(-10)=1/(-10)=-0.1
f(-1)=1/(-1)=-1
f(-0.1)=1/(-0.1)=-10
f(-0.01)=1/(-0.01)=-100
f(-0.001)=1/(-0.001)=-1000
f(-0.0001)=1/(-0.0001)=-10000

となる。 確かに関数で対応する数はどんどん負の方向に大きくなっている。 この調子で行けば関数で対応する先は負の無限大に発散しそうだと予測できるし、実際にそれを確かめることもできる。 負の無限大に発散するのだから、どんなに小さい数-Rを用意しても、あるδがあって、0<|x|<δならf(x)<-Rとなることを確かめればいい。 これはδ<1/Rとすれば成り立つ。 なぜなら0<|x|<1/Rであり、かつ負の数であるxなら、つまり-1/R<x<0であるxに関数で対応する数は-Rよりも小さくなるからである。 よって定義に当てはまるのでf(x)=1/xはxが小さな数からどんどん大きくなって0に近づく場合は負の無限大に発散する。

このように関数の極限値は大きい数がどんどん小さくなって近づいてくるのと、小さな数がどんどん大きくなって近づいていくのとでは変わってくることがある。 関数の収束について考えるときは、変数がどこからどこへ向かっているときに関数で対応する数がどこに近づくかを考える必要があるのである。 ちなみに変数が向かう先、つまりx→aのときならaより大きい数がどんどんaに向かって小さくなっていく場合を右側極限、aより小さい数がどんどんaに向かって大きくなっていく場合を左側極限と呼ぶ。 これは数直線上で考えたとき、aの右から近づいていくか、左から近づいていくかの違いから呼び名をつけたのである。

もちろん右側極限も左側極限も同じ極限値に収束する場合もある。 そういう場合は右側とか左側とか言う言い方をする必要がなく、単に極限値と呼ぶことができる。 例えばf(x)=xという関数では、この関数のどこを調べても右側極限と左側極限が同じ数になる。 だからわざわざ断る必要なく極限値と呼ぶことができる。 f(x)=1/xの場合もx→0では右側極限と左側極限が一致しないが、その他の部分ならどこでも一致する。 x→0の場合だけを特別に扱えば、他の部分では右から近づこうが左から近づこうが極限値は同じになるので区別する必要はない。 特に右側、左側を明言しない場合は、普通は右側極限と左側極限が一致していてわざわざ付言する必要がない場合である。 今後特別に断らない限りは、右側極限と左側極限は一致していると約束する。

極限値の構造

このように関数の収束や極限値を考えることができる。 考えることができるのだから、数列のときのように極限値の間の計算を定義したい。 例えば数列のときと同じようにf(x)→α(x→a)であり、g(x)→β(x→a)のときにf(x)+g(x)→α+β(x→a)になるだろうか。 f(x)もg(x)もxがaに近づくときに収束して、それぞれαとβに収束するのだから、定義から小さな数をε/2、ε'/2で表したとして、どんなに小さなε/2、ε'/2にもあるδ、δ'があって、0<|x-a|<δならば|f(x)-α|<ε/2となるし、0<|x-a|<δ'ならば|g(x)-β|<ε'/2となる。 ε/2とε'/2のうちで大きい方を選ぶ。 仮にε/2の方が大きいとしたら、|f(x)-α|<ε/2と|g(x)-β|<ε'/2を足して、

|f(x)-α|+|g(x)-β|<ε/2+ε'/2

<ε/2+ε/2

となるので、|f(x)-α|+|g(x)-β|<εとなる。 しかし確かめたいのは|[f(x)+g(x)]-[α+β]|<εである。 そのためには|[f(x)+g(x)]-[α+β]|<|f(x)-α|+|g(x)-β|が成り立てばいいのだが、都合がいいことにこれは常に成り立つ三角不等式と呼ばれる関係である。 よって|[f(x)+g(x)]-[α+β]|<|f(x)-α|+|g(x)-β|<εであり、結果|[f(x)+g(x)]-[α+β]|<εである。 ここでδとδ'のうち小さい方を選ぶ。 仮にδの方が小さいとすると、|x-a|<δ<δ'となるから、0<|x-a|<δならば今選んでおいたε/2とε'/2のどちらにおいても|f(x)-α|<ε/2であり|g(x)-β|<ε'/2である。 そして|f(x)-α|<ε/2であり|g(x)-β|<ε'/2であるなら|[f(x)+g(x)]-[α+β]|<εである。 結局、小さな数をεで表して、どんなに小さなεに対してもあるδがあって、0<|x-1|<δとなるなら|[f(x)+g(x)]-[α+β]|<εであることが確かめられた。 これは収束の定義そのものであり、

f(x)→α(x→a)であり、g(x)→β(x→a)であれば、f(x)+g(x)→α+β(x→a)

であることが確かめられた。これをlimを使って書くとxがaに近づいていくことは省略して、

lim f(x)=αであり、lim g(x)=βであれば、lim f(x)+g(x)=α+β

となるということである。 これを数列のときにやったようにα=lim f(x)であり、β=lim g(x)と読みかえれば、

lim f(x)+g(x)=lim f(x)+lim g(x)

ということになる。 これは極限を考える前に関数を足しても、関数を足した後に極限を考えても、どちらも同じ数になるということを意味している。 同じようにf(x)→α(x→a)のとき、cをある数として、cf(x)→cα(x→a)になる。 なぜなら、収束の定義からどんなに小さなε/|c|を用意してもあるδがあって、0<|x-a|<δなら|f(x)-α|<ε/|c|となるのだから、

|c|・|f(x)-α|=|c(f(x)-α)|

=|cf(x)-cα|
<(|c|ε)/|c|

となり、どんなに小さなεを用意してもあるδがあって、0<|x-a|<δなら|cf(x)-cα|<εとなるのだからcf(x)→cα(x→a)である。 つまり、

f(x)→α(x→a)ならば、cf(x)→cα(x→a)

である。 これをlimを使って書くと、xがaに近づくことを省略して書くと、

lim f(x)=αならば、lim cf(x)=cα

となる。 これもやはり数列の収束のときのようにα=lim f(x)と読みかえると、

lim cf(x)=c・lim f(x)

となる。 これは関数に定数を掛けてから収束を考えても、収束を考えてから定数を掛けても同じ数に収束することを意味する。

関数の極限の関係まとめ

ここまで確かめてきた関数の極限についての関係についてまとめておく。 これらの関係はこれから関数の極限値を計算するときに利用していく。

x→0(x→0)
x→∞(x→∞)
1/x→0(x→∞)
1/x→∞(x→0)ただし右側極限
1/x→-∞(x→0)ただし左側極限
lim f(x)+g(x)=lim f(x)+lim g(x)
lim cf(x)=c・lim f(x)

5.3.2 極限値の関数

f(y)→g(x)(y→x)

このように関数の収束を考えることができる。 これからそれを様々な使い方で使っていく。 ここではまず、極限という手続きを使って関数を定義していく。

関数とはある数にある数を1つ対応させる対応関係なのだから、その対応規則に極限や収束という手続きが入っていても問題ない。 例えば、ある数に対してある関数の左側極限の極限値を対応させる関数を考えることができる。 つまり、f(x)→α(x→a)のとき、aにαを対応させる関数を考えることができる。 これを関数と見たらxを変数として持つ関数ではなくaを変数として持つ関数になる。 なぜなら関数とは数に数を対応させる対応関係のことで、今はxがどこかに近づいていくときに、f(x)がどこに近づいていくのかの対応関係を考えているのであり、xが近づいていく先、つまりaとf(x)が近づいていく先、つまりαの対応関係を考えているからである。

しかし変数がaというのもなんとなく変なので、変数をxにしたい。 そのためには関数の変数が近づいていく先をxとすればいい。 なので、関数の変数をyと書いて、f(y)の収束や極限値を考えるようにすればいい。 つまり、元の関数の極限値を表す関数をg(x)とすると、

f(y)→g(x)(y→x)

となる。 これは言葉で書くなら、yがxに近づくときf(y)が近づく先がg(x)という関数でxが対応する先の数である、ということである。 limを使って書くとyがどこに近づくかをネット上の文章として書くのが難しくなるが、

g(x)=lim f(y)(y→x)

とでも書くことができる。 (y→x)というのは本来ならlimの記号の真下に小さく書き加えるのが一般的なのだが、それだとネット上の文章として書きづらいので勘弁して欲しい。 こう書くとg(x)という関数が極限という手続きを通してf(y)を変換したものだということが見やすくなると思う。 f(y)のyは変数に見えるが、関数の収束する先を見つけるためだけに使われるので、g(x)にyが影響することはない。 つまりg(x)はxだけ、f(y)が収束する先の数だけの関数になるのである。

このような関数の例としてf(y)=yを選んだ場合g(x)=xとなる。 それはf(y)→x(y→x)になるからで、つまりどこの点について左側極限を計算しても、極限値はxそのものになるからである。 簡単に具体的な場合について考えると、x=1の場合、確かめるべきことはf(y)→1(y→1)であるが、これはyが、0,0.9,0.99,0.999,...という様に1にどんどん近づけばf(y)も、0,0.9,0.99,0.999,...という様にどんどん1に近づいていくのだから、ほとんど当たり前である。

同じようにx=2のときはf(y)→2(y→2)だし、x=3のときはf(y)→3(y→3)である。 一般的にx=aのときはf(y)→a(y→a)なので、結局はxの値をそのままg(x)の値にすればいいわけでg(x)=xである。

極限を考える前と後で関数がまったく変わらないのでは、あまり面白くない。 そこでステップ関数についてこの関数を計算したら少し面白いことになる。 ステップ関数とは変数が0より小さいときには0を対応させ、0以上になったら1を対応させるようにするような、変数のある点で突然関数で対応する数が変わる関数である。 今の場合はy=0においてこの関数で対応する先の数が0から1に変わる。 y=0のとき、この関数で対応する先の数は1である。 しかし、この関数の左側極限の極限値はy→0において0になる。 つまりステップ関数とその極限値の関数は違った関数になる。

文章を書きやすくするためにこのステップ関数を記号で表してs(y)とする。 s(y)はyが0より小さいとき0に対応し、0以上になると1に対応する関数である。 そうすると、ステップ関数においてyが0よりも小さい数を取りながら0に近づくと、どんな小さなεを選んでもあるδがあって、0<|y-0|<δであるなら、つまり-δ<y<0であるなら、s(y)=0であり、|s(y)-0|<εである。 これは、関数で対応する先の数がそもそも0なのだから0との差を計算しても差は0になり、どんなに小さなεを選んでもそれが0でないなら|s(y)-0|の方が小さくなるためである。 つまりどんなεやδを選んでも、-δ<y<0であれば|s(y)-0|<εは成り立つ。

よって定義からステップ関数の左側極限はs(y)→0(y→0)である。 これはs(y)→g(x)(y→x)と書いたとき、x=0のときにg(x)=0になることを意味している。 s(0)=1なのだから、g(x)はx=0のとき元の関数とは違った数を対応させる関数になっている。 すなわちs(y)とg(x)は違う関数である。 このように、極限という手続きによってある関数を変換して別の関数を作ることができた。

1/[1+f(x)n]→g(x)(n→∞)

このように極限を利用して定義できる関数はいくらでもある。 他の例を考えると、例えばある関数f(x)があったとして、

1/[1+f(x)n]→g(x)(n→∞)

という様にg(x)を定義することができる。 f(x)nというのはf(x)のn乗という意味であり、f(X)という関数で対応する先の数をn乗するという意味である。 そしてそのnがどんどん大きくなっていって無限大に近づくとき、つまり、f(x)の値を2回、3回、4回、・・・100回、1000回、1000000000回、といった様に何度も何度も掛け算して無限に多くの回数掛け算したときに、1/[1+f(x)n]が収束していく先をg(x)にするのである。 ここでもnは極限の操作に使われるだけなので最終的に得られる関数には影響しない。

さて、では具体的にこの関数がどんな関数になるのかを調べていく。 まずはf(x)nがnが無限大に近づくときにどうなるかを考える。 1よりも大きな数を何度も掛け続ければどんどん大きくなっていくので、1<f(x)ならばf(x)n→∞(n→∞)であると予測できる。 ある大きな数をRで表して、どんなに大きなRを用意しても、あるn*があって、もしもn*<nならR<f(x)nであることを確かめればいいのだが、これは例えばn*=Rとすれば成り立つことが分かる。 Rは1をR回足した数で、f(x)nはR<nであれば、1よりも大きな数をR回よりも多い回数掛け算した数になるので、Rよりも大きくなる。 つまり、1<f(x)のときはf(x)n→∞(n→∞)であることが確かめられた。

もしf(x)=1なら1は何回掛けても1のままなのだからf(x)n→1(n→∞)であると予測できる。 ある小さな数をεで表して、どんなに小さなεを用意しても、あるn*があってn*<nであるなら、|f(x)n-1|<εであることを確かめればいいのだが、これはn*=0とすれば成り立つ。 f(x)=1なのだから、0<nであるどんなnに対しても、

|f(x)n-1|=|1n-1|

=|1-1|
=|0|
=0

となって、定義が成り立つのだからf(x)=1ならばf(x)n→1(n→∞)であることが確かめられた。

-1<f(x)<1のときは絶対値が1よりも小さな数を何度も掛け算したらどんどん0に近づいていくので、f(x)n→0(n→∞)であることが予想できる。 ある小さな数をεで表して、それがどんなに小さくても、あるn*があってn*<nであるなら、|f(x)n-0|<εであることを確かめればいい。 これはεを底にした対数を使って、n*=log|f(x)|εとすれば成り立つ。 n=n*のとき、|f(x)n*|=aとしたら、|f(x)|を底とする対数をとって、

log|f(x)||f(x)n*|=log|f(x)||f(x)|n*

=n*log|f(x)||f(x)|
=n*
=log|f(x)|ε
=log|f(x)|a

となり、底が等しい対数が等しいのだから、ε=aである。 つまり|f(x)n*|=εとなる。 もしn*<nなら、|f(x)|<1であるから掛ける回数が増えれば数は小さくなるので|f(x)n|<εとなる。 つまり、ある小さな数をεで表して、それがどんなに小さくても、あるn*があってn*<nであるなら、|f(x)n|<εとなることが確かめられた。 定義が成り立つので-1<f(x)<1ならばf(x)n→0(n→∞)であることが確かめられた。

f(x)が-1以下のときは負の数を掛け続けるのだから負掛ける負で正になり、正掛ける負で負になり、を繰り返してどこにも収束することなく、かといって正の無限大や負の無限大のどちらかに向かうということもなく振動する。 f(x)=-1のときは1と-1を交互に繰り返すので振動する。 f(x)<-1のときは|f(x)n|は1<f(x)のときと同じように無限大に発散するが、f(x)自体は正と負に値が振動するので、|f(x)n-a|<εとなるようなaを見つけることはできない。

f(x)nはこのような性質をもっている。 まとめると、

1<f(x)ならばf(x)n→∞(n→∞)
-1<f(x)<1ならばf(x)n→0(n→∞)
f(x)が-1以下ならばf(x)nは振動する
f(x)=-1ならば|f(x)n|→1(n→∞)
f(x)<-1ならば|f(x)n|→∞(n→∞)

となる。 これらの性質をふまえて、1/[1+f(x)n]→g(x)(n→∞)がどのような関数になるのかを考えていく。 まず、1<f(x)のときはf(x)n→∞(n→∞)なのだから、1/[1+f(x)n]→0になることが予測できる。 分数の分母がどんどん大きくなっていくのだから、1/xの場合と同じように0に収束する。 議論の途中は省くが、これはn*=logf(x)[(1-ε)/ε]と選べば定義から確かめられる。

f(x)=1のときは、1は何回掛けても1のままなのだから1/[1+f(x)n]は1/(1+1)=1/2になる。 つまり1/[1+f(x)n]→1/2(n→∞)である。

-1<f(x)<1のときはf(x)n→0(n→∞)なのだから、1/[1+f(x)n]→1になることが予測できる。 f(x)nはどんどん0に近づいていくので分母はどんどん1に近づいていき、1/1=1なのだから、そうなる。 これも議論の途中は省くが、0<f(x)<1のときはn*=logf(x)[ε/(1-ε)]、-1<f(x)<0のときはn*=log-f(x)[ε/(1+ε)]と選べば定義から確かめられる。

f(x)=-1のときはf(x)nは1と-1の間を振動するので1/[1+f(x)n]は定義できない。 特にf(x)が-1の場合は1/(1-1)=1/0になってしまい定義できない。 いずれにせよ、f(x)=-1の場合はg(x)は定義されない。

f(x)<-1のときもf(x)nは振動するが、-1よりも小さな数を掛け続けるので絶対値は1<f(x)のときと同じように大きくなっていく。 だから1/[1+f(x)n]の分母の絶対値はどんどん大きな数になっていく。 正の無限大に近づこうが、負の無限大に近づこうが、分母の絶対値が大きくなれば分数全体としてはどんどん0に近づいていく。 0の右と左を交互に移り変わりながら、どんどん0に近づいていく。 議論の途中は省くが、これは例えばn*=1/2・log-f(x)[(ε-1)/ε]と選べば定義から確かめられる。

さて、これでg(x)の性質は全て分かった。 それをまとめると次のようになる。

1<f(x)のとき、g(x)=0
f(x)=1のとき、g(x)=1/2
-1<f(x)<1のとき、g(x)=1
f(x)=-1のとき、g(x)は定義されない
f(x)<-1のとき、g(x)=0

ということになる。 g(x)は0、1/2、1のどれかの値をとり、元の関数f(x)が定義されていてもf(x)=-1となるならg(x)は定義されない。

g(x)の性質が分かったところで、実際に様々なf(x)が極限という手続きを通してg(x)に変換される様子を見てみよう。 まずは一番簡単な例としてf(x)=xの場合を考える。 これはf(x)をxに置き換えればいいだけなのだから、1/[1+xn]→g(x)(n→∞)を調べることになる。 すでに分かっているg(x)の性質から、

1<xのとき、g(x)=0
x=1のとき、g(x)=1/2
-1<x<1のとき、g(x)=1
x=-1のとき、g(x)は定義されない
x<-1のとき、g(x)=0

となる。 g(x)は1<|x|のとき0で、|x|<1のとき1で、x=1のとき1/2で、x=-1のときは定義されない関数になる。 f(x)=xが極限という手続きを通してこのような関数に変換されるのである。

次に少し複雑な例としてf(x)=x2+xの場合を考えてみる。 1/[1+(x2+x)n]→g(x)(n→∞)がどうなるのか調べるのである。 調べる必要があるのはf(x)がどこで1と-1になるかである。 f(x)=1としたら、x2+x=1という方程式を解けばいいのだから、x=(-1+√5)/2とx=(-1-√5)/2になる。

f(x)=x2+x

=(x2+x+1/4)-1/4
=(x+1/2)2-1/4

となるので、これはx=-1/2のときに-1/4になり、それ以外の数の場合は正の数でも負の数でも(x+1/2)2は正の数になるので-1/4よりも大きくなる。 つまり-1/4がこの関数の最小値になる。 (-1-√5)/2<x<(-1+√5)/2のときは1より小さいのでこの範囲で-1/4<f(x)<1ということになる。 そしてx<(-1-√5)/2とx<(-1+√5)/2のときは1<f(x)になる。 これらのf(x)の性質だけでg(x)の性質はすべて分かって次のようになる。

x<(-1-√5)/2のとき、g(x)=0
x=(-1-√5)/2のとき、g(x)=1/2
(-1-√5)/2<x<(-1+√5)/2のとき、g(x)=1
x=(-1+√5)/2のとき、g(x)=1/2
x<(-1+√5)/2のとき、g(x)=0

このようにf(x)=x2+xを極限を通して変換すると0から1/2になり1になり、また1/2になって最後に0に戻る関数になる。 このf(x)は-1になることはないので、g(x)はすべての数について定義されている。

別の例としてf(x)=sin xの場合を考えてみる。 sin xは-1と1の間を往復し続ける関数なので、x=π/2+2nπ(n=0,1,2,...)で1、x=3π/2+2nπ(n=0,1,2,3,...)で-1になる以外はすべて1より小さく-1より大きい数になる。 なので1/[1+sinn x]→g(x)(n→∞)の性質は次のようになる。

x=π/2+2nπ(n=0,1,2,...)のとき、g(x)=1/2
x=3π/2+2nπ(n=0,1,2,3,...)のとき、g(x)は定義できない
それ以外のとき、g(x)=1

このように極限という手続きを通して関数を別の関数に変換することができる。

5.3.3 微分

微分の定義

極限を利用して定義される関数から別の関数への変換に微分という重要な変換がある。 これは物理へ数学を応用するときに大きな意味を持つ。 ある関数f(x)の微分の定義は次のようになる。

[f(x+dx)-f(x)]/dx→df(x)/dx(dx→0)

dxというのが極限の操作に使われる変数で、これが0にどんどん近づいていくとき、[f(x+dx)-f(x)]/dxが近づいていく先がdf(x)/dxという関数なのである。 極限を通してこのような関数を定義し、元の関数を新しい関数に変換することを微分とか、関数を微分する、と言う。 微分して得られる関数、つまりdf(x)/dxは導関数と呼ばれている。 df(x)/dxというのは初めて見るとずいぶん変な書き方だと思うかもしれないが、これで1つの関数を表している。 けっして、df(x)という関数をdxという変数で割ったものではない。 これは単なる書き表し方の習慣で、変だと思っても慣れて使うしかない。 df(x)/dxの他にもf'(x)という書き方もある。 導関数の書き方には様々な書き方があるが、今後は主にこの2つの書き方を使っていく。 同じことだが、微分の定義を様々な記号で書くと、

[f(x+dx)-f(x)]/dx→f'(x)(dx→0)
[f(x+h)-f(x)]/h→df(x)/dx(h→0)
df(x)/dx=lim [f(x+dx)-f(x)]/dx
f'(x)=lim [f(x+h)-f(x)]/h

などという書き方がある。 これらはすべて同じ事を表しているのだが、特別に気に入る書き方があるなら、好きなのを選んで使うようにするといいと思う。

このように微分や導関数が定義できる。 これは今まで極限を使って定義してきた様々な関数の、単なる1つの例に過ぎないが、微分はそれだけでない非常に重要な意味を持つ。 それは微分によって得られる導関数が元の関数の傾きを表す関数だということである。

関数の傾きとは、あるxとそれに対応するf(x)を基準にして他のx'とそれに対応するf(x')を考えたとき、

Δ=[f(x')-f(x)]/[x'-x]

で定義される値である。 これは普通の感覚で言う傾きと同じ意味を持つ。 なぜなら、関数のグラフを描いたときx'-xは横幅になり、f(x')-f(x)は縦幅になり、どれだけ横に進むとどれだけ縦に進むかを表すのが傾きだからである。

傾きの図貼り付け予定

これは日常的な坂などの傾きと同じ意味を持つ。 傾きが急な坂というのは少しの距離を歩いただけで高さが高くなる坂のことを言う。 逆に傾きがゆるい坂というのは、いくら歩いて行ってもほとんど高さが変わらない坂のことである。 坂を1次関数と考えれば、坂を歩くことはxの値が増えること、坂の高さが上がることはf(x)の値が増えることに対応する。

1次関数はある数aを用意してf(x)=axと表される。 坂を歩くというのは今いる場所から奥に向かうということだから、今居る場所をxとすると、そこからx'に動くということである。 そして坂の高さがf(x)=axで表されているのだから、xの場所での高さはf(x)=ax、x'の場所での高さはf(x')=ax'となる。 これらの高さの差がxからx'に動いたときに登る必要がある高さである。 なぜなら、始めに居る位置を基準にしてそこよりどれだけ高くなっているかが問題なので、どれだけ高くなるかを比較するためには行く先の高さと今居る場所の高さの差を計算する必要があるからである。 xからx'に動く間に登る高さはf(x')-f(x)なのだから、傾きは[f(x')-f(x)]/[x'-x]となって定義そのものになる。 ちなみに、今の場合の傾きは

Δ=[f(x')-f(x)]/[x'-x]

=(ax'-ax)/(x'-x)
=a(x'-x)/(x'-x)
=a

となって、傾きはxに無関係、つまりどこから歩き始めるか、どこまで歩くかに関係なくaで一定になる。 ちなみにf(x)=x2の場合を考えると、

Δ=[f(x')-f(x)]/[x'-x]

=(x'2-x2)/(x'-x)
=(x'+x)(x'-x)/(x'-x)
=x'+x

となるので、傾きはxとx'に関係してきて、つまりどこからどこに向かうかに関係してくる。 傾きは普通、このようにどこからどこに向かうかが関係してくる。

あるxを基準にして、そこからhだけずれた場所との関数の傾きを計算したら、xとx+hでの傾きを計算するのだからx'=x+hとなって、

Δ=[f(x')-f(x)]/[x'-x]

=[f(x+h)-f(x)]/(x+h-x)
=[f(x+h)-f(x)]/h

となって、微分の定義で出てきた関数が出てくる。 このhが0にどんどん近づいていく極限によって定義されるのが導関数である。 つまり微分とは、元の関数のある点をxで表して、その点を基準にして、そこからある一定の幅であるhだけずらした点との間の傾きを計算し、その幅を小さくしていって0に近づけるという手続きなのである。 だから導関数は、元の関数のある点からほとんど0に近い、ものすごく小さな幅だけ動いたときの傾きを表していると考えることができる。 ものすごく小さな幅を動いたら傾きの式の分母が小さくなるので、一見すると1/xのときのように無限大に発散してしまうと感じるかもしれないが、分子の関数の変化の仕方もどんどん少なくなっていくのだから、分子も分母も小さくなっていき、小さい数同士の比をとれば無限大にならずにある値に収束することがある。

関数の上の2つの点の間の傾きを計算し、その点の間の幅をどんどん小さくしていって、0に近づけた極限が導関数である。 2つの点の間の幅が0になってしまえば分数の分母が0になるので、そのような数は定義できない。 しかし0に近づけた極限を考えることはできる。 つまり、どんなに小さなεを用意しても、あるδがあって、2点の間の幅がそのδよりも小さい場合、その2点の間の傾きとある極限値の差の絶対値がεよりも小さくなるのである。

そのようにして定義した極限値は、基準になっていて動いていない方のxの値における関数の傾きと考えることができる。 傾きというのは常に2点の間の傾きを考えなくてはいけない。 つまり、ここから、どこかに行こうとした場合にどれだけ高く上らなくてはいけないか、が傾きなのであり、それは出発地と目的地の両方がなくてはそもそも考えることができない概念である。 しかし微分によって得られる極限値は、出発地とものすごく近い目的地について計算した傾きである。 それ以上近づくことができないぐらい近い目的地について計算した傾きである。 それはもはや、出発地の地点における傾きと言ってもいいものになる。 だから、導関数は関数の上のある1点における傾きを表していると言えるのである。

さて、このように微分によって得られる極限値は元の関数の上にある1点における傾きを表している。 この極限は右側極限と左側極限が一致した極限でなくてはならない。 それは出発地に当たる関数の上のある点は動かないが、その点の右側から近づくのと左側から近づくかによって極限値が代わる場合があるからである。 例えば目の前には緩やかな坂が続いているが、一歩後ろは断崖絶壁ということもあり得る。 そういう場合は右側極限で計算した傾きはゆるやかだが、左側極限で計算した傾きはものすごく急ということもあり得る。 傾きは常に2点の間について計算するのに対し、今は1点の性質としての傾きを定義しようというのだから、その点を基準にして右に向かう場合も左に向かう場合も同じ傾きでなければならない。 右と左で傾きが違えば、右へ向いたときの傾きと左へ向いたときの傾きの2種類の傾きを1つの点が持つことになり、右左という方向の概念がどこへ向かうのかという概念とつながってしまうので都合が悪い。 なので導関数は右側極限と左側極限が一致しない場合は定義できない。

このように微分という手続きによってある関数を導関数に変換することができる。 微分は関数の傾きの極限であり、導関数は元の関数のその点での傾きを表す関数である。 ちなみに微分を計算して導関数が定義できる関数は、微分可能な関数と呼ばれている。 微分の定義の極限の、右側極限と左側極限が一致しない点があり、導関数が定義できない関数は微分不可能な関数と呼ばれている。

微分の例

それでは実際に様々な関数について微分を計算してみる。 まずは最も簡単な関数としてf(x)=aについて計算してみる。 これはすべてのxに一定の数であるaを対応させる定数関数である。 どのxについてもf(x)=aなのだから、f(x+dx)=f(x)=aとなり、微分の定義に出てくる分数の分子が0になってしまうので、導関数は0になる。 つまり、

da/dx=0

ということである。 定数を微分すると0になる。 導関数は元の関数の傾きを表すのだから、まったく変化のない平坦な定数関数の導関数が0になるのは、微分の意味から考えても正しい。

次はもっと関数らしい関数として、f(x)=axについて計算してみる。 計算すべきは、[f(x+dx)-f(x)]/dx→df(x)/dx(dx→0)のf(x)をaxでおきかえた次の極限である。

[a(x+dx)-ax]/dx→d(ax)/dx(dx→0)

d(ax)/dxというのはdf(x)/dxのf(x)をaxで置き換えたもので、単純に考えればdax/dxになるのだが、それだと少し見にくいところがあるので関数の部分を括弧で囲ってd(ax)/dxと書いた。 d()/dxはどんな関数の微分を考えても共通なので、括弧の中身を見ればどんな関数が微分されているのかが分かる。 これは、

[a(x+dx)-ax]/dx=[ax+adx-ax]/dx

=adx/dx
=a
→a(dx→0)

となる。 分子がadxになり、分母がdxなのでdxを約分してaになり、dxとは関係なくなるのでdxがいくら0に近づいてもaのままである。 つまり、

[a(x+dx)-ax]/dx→a(dx→0)

あるいは、

d(ax)/dx=a

と書ける。 これはd(ax)/dxという導関数がaという定数になることを意味している。 導関数は元の関数の傾きなので、f(x)=axの傾きはxによらず一定でaになるということである。

同じようにf(x)=ax2を微分したらどうなるのかを考えてみる。 計算すべきは[a(x+dx)2-ax2]/dx→d(ax2)/dx(dx→0)である。 これは、

[a(x+dx)2-ax2]/dx=[a(x2+2x・dx+dx2)-ax2]/dx

=[ax2+2ax・dx+adx2-ax2]/dx
=[2ax・dx+adx2]/dx
=2ax+adx
→2ax(dx→0)

となる。 これは、2axはdxとは関係がないのでdxが0に近づいてもそのままだが、adxはどんどん0に近づいていくためである。 あるいは、

d(ax2)/dx=2ax

ということである。 x2の導関数は2axになる。 つまりx2の傾きはxに比例して大きくなっていく。 大きなxには急な傾きが対応し、小さなxには小さな傾きが対応する。 x=0の場合は傾きも0になる。

ax2の導関数が2axになり、axの導関数はaになるのだから、ax2の導関数の導関数を考えることができる。 2axを微分すると2aになるのだから、ax2の導関数の導関数は2aということになる。 それを数式で書くと、

d[d(ax2)/dx]/dx=2a

ということになる。 このような導関数の導関数は2階の導関数と呼ばれている。 導関数の導関数を計算することを2階微分などと呼ぶ。 今の場合、ax2の2階微分は2aとということになる。 同じように導関数の導関数の導関数は3階の導関数だし、導関数の導関数の導関数を計算することを3階微分を計算すると言う。 このように、nである自然数を表して、n階微分を計算して得られる関数はn階の導関数である。

2階微分でも式がごちゃごちゃになって見にくいのに、n階微分となるともはや読むことが難しいほど複雑になってしまう。 そこで、n階微分を表す場合は次のように書き表す決まりになっている。

dnf(x)/dxn

2階微分はd2f(x)/dx2になるし、3階微分はd3f(x)/dx3になる。 この書き方を使うと、ax2の2階微分や3階微分は、

d2(ax2)/dx2=2a
d3(ax2)/dx3=0

となる。

この調子でx3の微分を考えてもいいのだが、ここはより一般的に、正の整数nを用意してaxnの微分について考える。 先ほど調べたxやx2は、この一般的な関数の微分のn=1やn=2の特別な場合だということになる。 計算すべきは[a(x+dx)n-axn]/dx→d(axn)/dx(dx→0)である。 これを計算するには(x+dx)nがどうなるのかを計算しなくてはならない。

(x+dx)n=(x+dx)(x+dx)(x+dx)...(x+dx)

である。 (x+dx)(x+dx)(x+dx)...(x+dx)は(x+dx)がn回掛けられた物で、(x+dx)nそのものである。 これは、前の方から計算していくと、

(x+dx)(x+dx)(x+dx)...(x+dx)=(x2+2x・dx+dx2)(x+dx)...(x+dx)

=[x2(x+dx)+2x・dx(x+dx)+dx2(x+dx)]...(x+dx)
=(x3+3x2・dx+3x・dx2+dx3)...(x+dx)

と、このようにどんどん(x+dx)を掛け続けて、n回掛けたものが(x+dx)nである。 n回掛けたらどうなるかを考えるために、2回と3回の場合をよく見ると、

(x+dx)2=x2+2x・dx+dx2
(x+dx)3=x3+3x2・dx+3x・dx2+dx3

これを見ていると、もしかしてn乗のときは、

(x+dx)n=xn+nxn-1・dx+f(x)・dx2+g(x)・dx3+...+nx・dxn-1+dxn

となるのではないかと予測できる。 f(x)とg(x)というのは、それが何かは具体的にはよくわからないが例えば、n(n-1)x2/2やn(n-1)(n-2)x3/6などのxのなんらかの関数である。 しかし後で分かるように、今重要なのはxn+nxn-1・dxという部分があり、それ以外の部分にはdxが2回以上掛かっていることである。 (x+dx)nの計算で行われている掛け算を良く見ると、まず

(x+dx)(x+dx)=x(x+dx)+dx(x+dx)

を計算し、次に

(x2+2x・dx+dx2)(x+dx)=x2(x+dx)+2x・dx(x+dx)+dx2(x+dx)

を計算している。 重要なのはx(x+dx)やx2(x+dx)の部分である。 ここからx2やx3が出てくる。 同じようにxi(x+dx)からは必ずxi+1が出てくる。 このようにn乗の計算をしたら必ずxn-1(x+dx)という部分があり、これがxn+xn-1・dxという部分を作る。 つまり、

(x+dx)n=xn+xn-1・dx+...

となる。 ...というのは、他にもいろいろな項が足し算されているという意味である。 これはあらかじめ予想していた式と似ているが、予測ではxn-1・dxにはnが掛かっていてnxn-1・dxになると予測されていた。 残りの(n-1)個のxn-1・dxがどこからか出てくるはずである。

それがどこから出てくるかというと、cxn-1dx・(x+dx)にあるcxn-1dxとxの掛け算からである。 これはn=2のときはdx・(x+dx)の部分から出てくるx・dxだし、n=3のときは2xdx・(x+dx)の部分から出てくる2x2・dxのことである。 これは、

xi・(x+dx)・(x+dx)=(xi+1+xi・dx)・(x+dx)

=xi+1・(x+dx)+xidx・(x+dx)
=xi+2+xi+1dx+xidx・x+xidx2
=xi+2+2xi+1dx+xidx2

のように一つ前の掛け算で出てきたxidxとxの掛け算によって出てくるので、x+dxをn回掛けたときは(n-1)回出てくることになる。 これを足せば、

(x+dx)n=xn+nxn-1・dx+...

となる。 ...として省略した部分はdxの2乗以上が必ず掛かっている。 つまり先に予想しておいた式になっている。 そして微分で計算するのは[a(x+dx)n-axn]/dxなのであり、

[a(x+dx)n-axn]/dx=[a(xn+nxn-1dx+f(x)・dx2+g(x)・dx3+...+dxn)-axn]/dx

=[axn+anxn-1dx+af(x)・dx2+ag(x)・dx3+...+adxn-axn]/dx
=[anxn-1dx+af(x)・dx2+ag(x)・dx3+...+adxn]/dx
=anxn-1+af(x)・dx+ag(x)・dx2+...+adxn-1
→anxn-1(dx→0)

ということになる。 これはanxn-1の部分はdxと関係ないのだからdxが0に近づいてもそのままで、それ以外の部分はdxが0に近づけば0に近づくからである。 つまり、

d(axn)/dx=anxn-1

となる。 これはn=1の場合は

d(ax)/dx=a・1・x1-1

=ax0
=a

となって、あらかじめ計算しておいた結果と一致する。 また、n=2のときも、

d(ax2)/dx=a・(2-1)・x2-1

=a・1・x1
=ax

となって、あらかじめ計算しておいた結果と一致する。 このように今求めた一般的なaxnの微分は、きちんと具体的な例にきちんと当てはまっている。

導関数の構造

次はf(x)=ax2+bxといった関数の微分を計算してみたい。 そこでまた定義から導関数を計算してもいいのだが、既に一般的な場合のaxnの微分が分かっているので、あとは極限の性質を使ってより複雑な関数の微分を計算していきたい。 極限値にはf(x)→α(x→a)であり、g(x)→β(x→a)であれば、f(x)+g(x)→α+β(x→a)であるという性質がある。 これを参考にして、微分にも同じような性質があることを確かめる。 f(x)とg(x)が微分可能な関数のときに、F(x)=f(x)+g(x)という新しい関数であるF(x)を定義してこの微分がどうなるか考える。 微分の定義から、

dF(x)/dx=lim [F(x+dx)-F(x)]/dx

=lim [f(x+dx)+g(x+dx)-f(x)-g(x)]/dx
=lim {[f(x+dx)-f(x)]/dx+[g(x+dx)-g(x)]/dx}
=lim [f(x+dx)-f(x)]/dx+lim [g(x+dx)-g(x)]/dx
=df(x)/dx+dg(x)/dx

となる。 これは、f(x)とg(x)は微分可能なのだから、[f(x+dx)-f(x)]/dx→df(x)/dx(dx→0)となるdf(x)/dxと、[g(x+dx)-g(x)]/dx→dg(x)/dx(dx→0)となるdg(x)/dxが存在するからである。 つまり、

d[f(x)+g(x)]/dx=df(x)/dx+dg(x)/dx

ということになる。 これは2つの微分可能な関数がある場合、その関数を足した後で微分しても微分してから足しても同じ導関数になるということである。 この関係は複雑な関数の微分を簡単に計算するのに使うことができる。

ではこの関係を使ってf(x)=ax2+bxの微分を計算してみる。 g(x)=ax2、h(x)=bxとすれば、d(ax2)/dx=2ax、d(bx)/dx=bなので、

df(x)/dx=d(ax2+bx)/dx

=d(ax2)/dx+d(bx)/dx
=2ax+b

となる。 このように一般の場合のd(axn)/dxの微分が分かっていれば、それらのどのような組み合わせでできた関数の微分もすぐに計算できる。 また、f(x)が微分可能な関数のとき、ある数をcで表して、cf(x)がどんな導関数になるかも調べる。

d[cf(x)]/dx=lim [cf(x+dx)-cf(x)]/dx

=lim c[f(x+dx)-f(x)]/dx
=c・lim [f(x+dx)-f(x)]/dx
=c・df(x)/dx

となる。 途中で極限と数の掛け算の順番を入れ替えても極限値が変わらないという極限の性質を使った。 つまり、

d[cf(x)]/dx=c・df(x)/dx

ということである。 ある関数にある数を掛けてから微分するのも、微分してから掛けるのも同じ導関数になる。

これらの性質を利用すればxの累乗の組み合わせで表される関数ならどんな関数でも微分を計算することができる。 xの累乗の組み合わせで表される関数というのは、どんなnでもいいのでxnまでのxの累乗を含んだ関数である。 その微分は、i乗目の累乗の係数をaiとして、

d(anxn+an-1xn-1+...+a1x+a0)/dx=d(anxn)/dx+d(an-1xn-1)/dx+...+d(a1x)/dx+d(a0)/dx

=and(xn)/dx+an-1d(xn-1)/dx+...+a1d(x)/dx+d(a0)/dx
=annxn-1+an-1(n-1)dxn-2+...+a1

となる。 このような、いくつかのxの累乗を足し合わせただけの関数は、このようにすればいつでも微分を計算し導関数を求めることができる。

では、微分可能なf(x)、g(x)という2つの関数があったとして、その2つを掛け算したf(x)g(x)という関数の微分がどうなるのかを調べてみる。 やはり定義から、

d[f(x)g(x)]/dx=lim [f(x+dx)g(x+dx)-f(x)g(x)]/dx

=lim [f(x+dx)g(x+dx)-f(x)g(x+dx)+f(x)g(x+dx)-f(x)g(x)]/dx
=lim [f(x+dx)g(x+dx)-f(x)g(x+dx)]/dx+lim [f(x)g(x+dx)-f(x)g(x)]/dx
=lim g(x+dx)[f(x+dx)-f(x)]/dx+lim f(x)[g(x+dx)-g(x)]/dx
=g(x)・df(x)/dx+f(x)・dg(x)/dx

となる。 f(x)[g(x+dx)-g(x)]/dx→f(x)・dg(x)/dx(dx→0)となるのは分かると思う。 これはf(x)はdxとは関係ないので数を掛けるのと同じように、[g(x+dx)-g(x)]/dxの極限を考えた後に掛ければいいためである。 g(x+dx)・[f(x+dx)-f(x)]/dx→g(x)・df(x)/dx(dx→0)となるのは、まずは定義から考えて、

|g(x+dx)[f(x+dx)-f(x)]/dx-g(x)・df(x)/dx|=|g(x+dx)[f(x+dx)-f(x)]/dx-g(x+dx)・df(x)/dx+g(x+dx)・df(x)/dx-g(x)・df(x)/dx|

=|g(x+dx)・([f(x+dx)-f(x)]/dx-df(x)/dx)+[g(x+dx)-g(x)]・df(x)/dx|
<|g(x+dx)・([f(x+dx)-f(x)]/dx-df(x)/dx)|+|[g(x+dx)-g(x)]・df(x)/dx|

となる。 これは、

-g(x+dx)・df(x)/dx+g(x+dx)・df(x)/dx=0

なのだから、0を微分の定義の式の中に足しても結果は変わるわけがないことと、三角不等式によって絶対値を2つに分けたのである。 そして、g(x+dx)→g(x)(dx→0)となり、[f(x+dx)-f(x)]/dx→df(x)/dx(dx→0)となるのだから、

|g(x+dx)・([f(x+dx)-f(x)]/dx-df(x)/dx)|+|[g(x+dx)-g(x)]・df(x)/dx|=|g(x+dx)|・|[f(x+dx)-f(x)]/dx-df(x)/dx|+|g(x+dx)-g(x)|・|df(x)/dx|

<|g(x+dx)|・ε'+ε''・|df(x)/dx|

となるように0<|dx|<δとなるδをとれるのだから、g(x+dx)[f(x+dx)-f(x)]/dx→g(x)・df(x)/dx(dx→0)となる。 よって、

d[f(x)g(x)]/dx=g(x)・df(x)/dx+f(x)・dg(x)/dx

となる。 これは2つの関数の掛け算からできる関数の微分が、片方の関数の微分にもう片方の元の関数をかけたものと、もう片方の関数を微分してさっき微分した関数の元の関数を掛けたものを足した関数になることを表している。 この関係はある関数を微分したいとき、それを2つの部分にわけ、それらの部分ごとの微分が分かっているときに、元の関数の微分を簡単に計算するのに使うことができる。 けっしてd[f(x)g(x)]/dxはdf(x)/dx・dg(x)/dxにはならないことに注意する必要がある。

2つの関数を掛け算して作った新しい関数の微分がどうなるのかが分かったので、それを実際に使ってみたい。 例えばax2はax・xなのだから、f(x)=ax、g(x)=xとすれば2つの関数の掛け算で作られている関数である。 これを実際に計算してみると、

d[ax・x]/dx=x・d(ax)/dx+ax・d(x)/dx

=x・a+ax・1
=2ax

となって、あらかじめ計算しておいた結果と一致する。 次はxnの微分がどうなるかを先ほどとは違った方法で計算してみる。 そのためにはxnをx・xn-1と考えることができることを使う。 xのn乗はxの(n-1)乗にさらにもう1つのxを掛けたものなのだから、確かにこうなる。 これを2つの関数の掛け算からなる関数だと考えれば、

d[xn]/dx=d[x・xn-1]/dx

=xn-1・d[x]/dx+x・d[xn-1]/dx
=xn-1+x・d[xn-1]/dx

となる。 始めはxのn乗の微分だったのだが、それをxとxn-1の掛け算だと考えて計算することでxの(n-1)乗の微分にすることができた。 微分はここだけで、他の部分には入っていない。 だから、xの(n-1)乗をさらにxとxn-2の掛け算だと考えてこの手続きを続けていけばどんどん微分の中に出てくる関数の累乗が減っていき、最後にはなくなってしまうことが期待できる。 なので、実際にそれをすると、

xn-1+x・d[xn-1]/dx=xn-1+x・d[x・xn-2]/dx

=xn-1+x・(xn-2・d[x]/dx+x・d[xn-2]/dx)
=xn-1+x・xn-2+x2・d[xn-2]/dx
=xn-1+xn-1+x2・d[x・xn-3]/dx
=2xn-1+x2・d[x・xn-3]/dx
=2xn-1+x2・(xn-3+x・d[xn-3]/dx)
=3xn-1+x3・d[x・xn-4]/dx
=...
=mxn-1+xm・d[x・xn-m-1]/dx
=mxn-1+xm・(xn-m-1+x・d[xn-m-1]/dx)
=(m+1)xn-1+xm+1・d[x・xn-m-2]/dx
=...
=(n-1)xn-1+xn-1・d[x]/dx
=nxn-1

となる。 これはあらかじめ計算しておいた結果と一致する。 このように2つの関数があったとき、それらの足し算で得られる関数の導関数や掛け算で得られる関数の導関数と、元の関数の導関数の間には便利な関係がある。

様々な関数の微分

今までは主にxの累乗について微分を計算してきた。 これからはもっと複雑な関数についての微分を紹介する。 具体的に定義から微分がどうなるのかを説明すると少し大変になるので、ここでは結果だけを紹介することにする。 これから、これらの微分の結果を利用して物理に応用していく。

まずは三角関数の微分を考えていく。 sin関数の微分や導関数は定義から次のようになる。

[sin(x+dx)-sin(x)]/dx→d[sin(x)]/dx(dx→0)

これを計算しさえすれば、sin関数の微分が計算でき、導関数が得られる。 これを計算するのは少し大変なのだが、結果だけを与えると次のようになることが分かっている。

d[sin(x)]/dx=cos(x)

sinを微分するとcosになるのである。 一方cos関数の微分の定義は次のようになる。

[cos(x+dx)-cos(x)]/dx→d[cos(x)]/dx(dx→0)

cos関数の微分と導関数もこれを計算しさえすれば得られるのだが、やはりこれを計算するのは少し大変なので、結果だけ与えると次のようになる。

d[cos(x)]/dx=-sin(x)

cos関数は微分でsin関数に-1を掛けた関数に変換される。 そしてsinは微分でcosに変換されるのだから、cosの2階微分は次のようにcosに戻る。 ただし、cos関数に-1を掛けた関数になる。

d2[cos(x)]/dx2=d[-sin(x)]/dx

=-d[sin(x)]/dx
=-cos(x)

2階微分が-cosになるのだから、そのさらに2階微分を計算すれば-1が-1と打ち消しあって1になるので元に戻る。 つまり、cosの4階微分はcos関数そのものになる。

d4[cos(x)]/dx4=d3[-sin(x)]/dx3

=-d2[cos(x)]/dx2
=d[sin(x)]/dx
=cos(x)

同じようにsin関数の4階微分はsin関数そのものになる。

次は指数関数と対数関数の微分について紹介する。 これらも実際に定義から計算するのは少し大変なので結果だけを紹介する。

まずは極限を通して定義されるネイピア数という数を紹介する。 それは、

(1+1/n)n→e(n→∞)

とあらわされるeという数である。 これは自然対数の底などとも呼ばれて、普通eで表される。 これを実際に計算してみると、

(1+1/1)1=2
(1+1/2)2=9/4=2.25
(1+1/3)3=64/27=2.370370...
(1+1/4)4=625/256=2.4414...
(1+1/5)5=7776/3125=2.48832

と、2から始まってnが大きくなるにしたがって、どんどん大きくなっていく。 どんどん大きくなっていくのだから、そのまま無限大に発散するのではないかという心配があるが、これはきちんと収束して、

e=2.71828...

となる。 これは円周率πと同じように終わりなく延々と数が続いていく数である。 このネイピア数を使うと指数関数や対数関数の微分を考えることができる。

まず最も簡単なのがネイピア数であるeの指数関数である。 つまり、

[ex+dx-ex]/dx→d[ex]/dx(dx→0)

この定義を計算すればeの指数関数の微分が計算できて導関数が得られる。 実際にこれを計算すれば、

d[ex]/dx=ex

となって、eの指数関数の導関数は元の指数関数のままで、微分してもまったく変化しないことが知られている。 ちなみにexの指数の部分が込み入った関数になると読みにくくなることがあるので、これをexp(x)などと書く場合もある。 この2つは完全に同じもので、単に書き表し方が違うだけである。 exは微分してもまったく変化しないのだから、一般的にn階の導関数も元のままである。

dn[ex]/dxn=ex

次は一般的な0<aの数を用意して、axの微分を考える。 これも定義から、

[ax+dx-ax]/dx→d[ax]/dx(dx→0)

を計算すれば導関数が求まるのだが、やはり結果だけ与えると、

d[ax]/dx=ax・logea

となって、ネイピア数の場合とは違って余計な対数が掛かる。 もしもa=eなら後ろについている対数の部分はlogeeとなって、これは1なので先ほどの式になる。 余計な対数が掛かってくるとはいえ、やはり指数関数は指数関数になるので何回微分しても指数関数のままである。 一般的なn階の導関数は次のようになる。

dn[ax]/dxn=ax・(logea)n

次は対数の微分を考えていく。 まずはネイピア数eを対数の底に持つ対数を考える。 このようなネイピア数を底に持つ対数は、自然対数と呼ばれている。 自然対数の微分の定義は、

[loge(x+dx)-logex]/dx→d[logex]/dx(dx→0)

となる。 これを計算した結果は次のようになることが知られている。

d[logex]/dx=1/x

対数の微分を計算すると1/xという関数になるのである。 注意しないといけないのは、対数関数が定義される範囲は0<xなので、導関数として得られる1/xも0<xの部分だけしか持たない関数だということである。 言いかえるなら、対数関数の傾きは負になることはないということである。

次は一般的な0<aの数を用意して、logaxの微分を考えていく。 これも定義から、

[loga(x+dx)-logax]/dx→d[logax]/dx(dx→0)

を計算すれば一般的な対数関数の導関数が計算できる。 これを実際に計算した結果は次のようになることが分かっている。

d[logax]/dx=1/(x・logea)

となって、やはりa=eのときには無かった余計な対数が掛かってくる。 これは1/xの部分を自然対数の微分だと考えると、

d[logax]/dx=(1/x)・(1/logea)

=d[logex]/dx・(1/logea)

ということで、

logea・d[logax]/dx=d[logex]/dx

ということである。 これは対数の底はeでも、一般的な数としてaをつかっても、logeaという数を掛けさえすれば導関数は同じになることを意味する。 ちなみに対数の底がネイピア数の場合は底を省略して書くことが多い。 それは対数の底は普通はネイピア数だからである。 ネイピア数以外の数であることの方が少ないのだから、それ以外の場合は特別な注意を払って底を書くことにして、普通の場合は省略する、とした方が式が簡単になる。 ネイピア数を省略して書くと、

d[log x]/dx=1/x
d[logax]/dx=1/(x・log a)

となる。

導関数の関係まとめ

今まで計算してきた、さまざまな関数の微分によって得られる導関数をまとめておく。 これらの計算結果を覚えておけば、微分を簡単に計算できるようになる。 今後もこれらの関係を使って微分を計算していく。

d[f(x)+g(x)]/dx=df(x)/dx+dg(x)/dx
d[cf(x)]/dx=c・df(x)/dx
d[f(x)g(x)]/dx=g(x)・df(x)/dx+f(x)・dg(x)/dx
d[xn]/dx=nxn-1
d[sin x]/dx=cos x
d[cos x]/dx=-sin x
d[ex]/dx=ex
d[ax]/dx=ax・log a
d[log x]/dx=1/x
d[logax]/dx=1/(x・log a)

5.3.4 積分

積分の定義

極限という手続きを通してある関数を別の関数に変換する変換には微分の他に積分という変換もある。 これも重要な変換で、微分と対を成す変換である。 一般的な積分について扱うのは少し大変なので、ここではxの累乗や三角関数、指数、対数関数に関する積分だけに限って解説していく。

その場合の積分の定義は次のようになる。 ある関数f(x)が定義されているxの中から、ある数を選んでcと表し、これを基準になる点にする。 cは変数ではないがxは変数で様々な数を表す。 その基準になる点からxまでの間の数からn-1個の数を選ぶ。 それらを小さい方から並べてx1、x2という様に番号をつけていく。 そうすると、x0=c、xn=xと書くと、

x0=c<x1<x2<x3<x4<...<xi<...<xn-2<xn-1<xn=x

となる。 これはcからxまでの区間をn個の小さな区間に分けたことになる。 そしてf(x)の積分は

ni=1f(xi)・(xi-xi-1)→∫xcf(t)dt(n→∞)

と定義される。 ni=1というのは、変数iについて、iが1である式から始まって、nである式までの和を計算するという意味である。 今の場合は、

ni=1f(xi)・(xn-xn-1)=f(x1)・(x1-x0)+f(x2)・(x2-x1)+f(x3)・(x3-x2)+...+f(xi)・(xi-xi-1)+...+f(xn-1)・(xn-1-xn-2)+f(xn)・(xn-xn-1)

=f(x1)・(x1-c)+f(x2)・(x2-x1)+...+f(xi)・(xi-xi-1)+...+f(xn)・(x-xn-1)
→∫xcf(t)dt(n→∞)

である。 積分によってf(x)が変換される先の関数である∫xcf(t)dtは原始関数と呼ばれている。 ∫xcf(t)dtというのも、ずいぶんと変わった書き方だと思うが、これで1つの関数を表している。 一番最初にきている∫という記号はインテグラルと読んで、アルファベットのSを縦に引き伸ばしたような形をしている。 その隣にxとcを書く。 xは∫の上の端に、cは下の端に書く。 そしてf(x)の積分で得られた原始関数であることを表すために、f(t)dtという部分をつける。 なぜf(x)はxの関数なのに原始関数の中ではf(t)と書くのかは、原始関数はxの関数であり、変数としてのxは∫の横に書いてあるxなので間違えないように別の文字を使って表すのである。 それがtである必要はなくて、yでもzでもaでも、何でもいいがその場合はf(y)dyや、f(z)dzや、f(a)daのように関数の中で使っている文字とdの横に書かれる文字は同じになるようにする。

積分や原始関数はこのように定義されるのだが、それがどのような意味を持つのかについて説明する。 まずはxi-xi-1の部分が何を意味しているのかについて説明する。 x1-cやx2-x1というのはx1とcの間の幅やx2とx1の間の幅を意味している。 例えば、x=5、c=1として、n=3としてこの区間を3つに分けるとする。 例えばx1=2、x2=3と選べばx1もx2もcとxの間にあり、大きさの順に並んでいることになる。 そして、それぞれの幅を計算すれば、

x1-c=2-1=1
x2-x1=3-2=1
x-x2=5-3=2

となって、確かに1から5の間の区間を3つの区間に分けたことになる。 そしてその区間の幅にf(xi)の値を掛ける。 これは小さく分けた区間の右端のxの値に関数で対応する数である。 本当は小さく分けた区間の間にあるxの値ならどれでもいいのであるが、積分の定義の式を簡単に書くために右端の数を選んだ。 右端の数を選んだのは式を簡単に書くだけのためであり、それ以外の理由はない。 だから左端の数を使って、f(xi-1)の数を小さく分けた区間の幅に掛けて積分を計算してもいし、中間の数を使ってf([xi-xi-1]/2)を計算してもいい。 とにかく小さく分けた区間の間の数ならどれを使ってもいいのだが、今はとりあえず右端の数を使うのが簡単でいい。 これは、今考えている関数がxの累乗や三角関数、指数関数のような簡単な関数だけを考えているから、あまり気にしなくていいのである

さて、このようにf(xi)は小さく分けた区間の右端のxに関数で対応する数である。 これと小さく分けた区間の幅を掛けたものが何を意味するかを知るためには、f(x)のグラフを考える必要がある。 f(x)のグラフを考えたとき、xi-xi-1はx軸の上のxi-1から始まりxiで終わる区間の長さを表す。 そしてf(x)はy軸の値なので、つまりx軸からどれだけ離れているかを表す。 ならf(x)・(xi-xi-1)は、xi-xi-1を横幅に持ち、|f(x)|を縦幅に持つ長方形の面積を意味している。

関数のグラフと横幅(xi-xi-1)、縦幅|f(xi)|の長方形の図、配置予定地。

|f(x)|・(xi-xi-1)なら面積になるのだが、f(x)は正でも負でもありえるので、f(x)・(xi-xi-1)は正にも負にもなり得る。 そこで負の面積というものを考えれば、f(xi)・(xi-xi-1)そのものが面積を表していると言えるようになる。 これは、x軸の上にある長方形が正の面積を持っていて、下にある長方形は負の面積を持っていると考えるということである。 これは、x軸の上に伸びている長方形で、x軸の下に開いている穴を埋めると考えれば理解できる。 つまり、正の面積を持った長方形と負の面積を持った長方形とがあったら、正の面積を持った長方形の方が実体を持った長方形で、それを動かして穴に入れて埋め合わせ、x軸の上にはみ出た部分だけを本当の面積だと思えばいいのである。

最終的には全ての小さく分けた区間についてf(x)を掛けて面積を出し、それを全部足し合わせるので、負の面積を持っている部分は正の面積によって埋め合わされることになる。 もし正の面積で埋め合わせきれない場合、つまりx軸の上にある長方形の面積より下にある長方形の面積の方が多い場合は、その長方形の面積の和は負になるし、逆に埋め合わせることができれば正になるということである。

このようなcからxまでの数をn個の区間に分け、その区間の幅を横幅にf(xi)の値を縦幅にして作られる長方形の面積の合計の、nがどんどん大きくなっていき、無限大に近づくときの極限が原始関数である。 cからxまでの区間をn個に分け、その分ける数がどんどん大きくなっていくのだから、これはcとxの間の区間をどんどん細かく分けていくことを意味する。 区間の幅の1つ1つを見れば、区間の幅がどんどん小さくなっていき、0に近づくことを意味する。 つまりxi-xi-1がどんどん0に近づいていく。 もし、xi-xi-1→dt(n→∞)と書けば、原始関数を∫xcf(t)dtと書く意味が少し分かってくる。 dtというのは微分の定義の中で使ったように最終的にはdt→0となるような極限を考えるために使う変数で、気分の上では非常に小さな数だと思っておけばいい。 xi-xi-1→dtというのは、xi-xi-1の間の距離がどんどん小さくなっていくのだからそれが微分の中で使われたdtという変数と同じようなものになるという意味である。 もしxi-xi-1→dt(n→∞)となるなら、f(xi)xi-xi-1→f(t)dt(n→∞)となるのである。

nをどんどん大きくして無限大に近づけるというのは、cからxまでの間を無限に多くの細かい区間に分けるということで、そうなればf(xi)で使う小さな区間の右端のxiはcからxまでのすべての数を取ると言ってもいい。 例えばcからxまでをn個に分けた場合、cの次の数はx1となり、積分で考える長方形はf(x1)・(x1-c)となるが、もしこの区間の幅がどんどん狭くなっていくならx1はcにどんどん近づいていき、最終的には、言うなればcのすぐ隣の数になる。 もちろんf(x1)・(x1-c)の計算に使うx1もcのすぐ隣の数になる。 同じようにx2はcのすぐ隣のそのまたすぐ隣の数になり、このようなことがcからxまでの区間のあらゆる部分で起こる。 これはf(xi)・(xi-xi-1)の計算に使っているxiが、cからxまでの区間の中の全ての数になり得るということで、つまりは変数tを用意すればf(xi)xi-xi-1→f(t)dt(n→∞)ということで、積分で考える長方形はものすごく小さい幅をdtで表せば、それとf(t)の掛け算になる。 積分はこの長方形を全て足したものだから、杷(t)dtと書きたいところだが、これが無限に細かい幅の長方形の和であることを特別に注目させるために狽∫に書き換える。 狽ノは、ni=1のように、i=1からi=nまで和をとる、といった様にどこからどこまで足すのか、という情報がついている。 同じように積分にもcからxまでの積分、といった様にどこからどこまで計算するのかという区間があるのでそれを∫の横に書いて、∫xcとなるのである。

つまり∫xcf(t)dtという原始関数の記号には、これがf(t)という関数にdtという非常に小さな幅を掛けて非常に細長い長方形を考え、その長方形の面積の和をcからxまでの区間で考える、という意味が込められている。 ∫の横の数字はどこからどこまでのf(x)の面積を考えるか、を表しているのでもしcの代わりにcとは違うaという数からxまでの積分を考えるなら、∫xcf(t)dtではなく∫xaf(t)dtと書けばいい。

このように積分というのはある区間をものすごく小さい幅の横幅に分け、それにその場の数に関数で対応する先の数を掛けて作った長方形の面積の和である。 これはその区間の関数の持つ面積そのものになる。 なぜならものすごく小さい幅の横幅を持つ長方形というのは、関数のグラフを細い縦線で塗りつぶすようなもので、それを全部合わせれば面積になるからである。 つまり原始関数とはcからxまでの区間におけるf(x)のグラフの面積を表しているのである。

積分の具体例

ではこのような原始関数や積分の性質を具体例を使って具体的に見ていく。 例えば関数としてf(x)=xを考える。 これはグラフにすると(0,0)という座標を通る直線になり、cとして0を選べば、0からxまでの関数の面積は底辺x、高さf(x)=xの三角形になる。

f(x)=xのグラフの面積の図配置予定地

求める面積は三角形の面積なのだから、三角形の面積は底辺×高さ割る2で計算できるので、x・x/2=x2/2となる。 これは例えばx=1のときは、0から1までが底辺、高さはf(1)=1となるので、底辺の幅は1、高さも1の三角形なのだから面積は1/2になるし、x=3のときは0から3までが底辺、高さはf(3)=3になるので面積は9/2となるということである。 このように関数のどこからどこまでの面積を考えるかによって面積は変わってくる。 どこからというのは一定にして考え、今の場合は0で一定で、どこまでの面積を考えるかによって結果の面積が変わってくるのである。 その、どこまでの面積を考えるかをxまでの面積を考える、と言えば、グラフの図形の面積はxの関数になる。 原始関数がxの関数だというのは、このような意味である。

しかし、これは実際に積分という手続きを実行して求めたものではない。 単にグラフの図形の面積を計算しただけである。 そこで今度は定義からそのまま積分を計算して、その結果がグラフの図形から求めた面積と一致することを確かめる。

まずは0からxまでの区間をn個に分ける。 どのように分けてもいいのだが、話を単純にするためにぴったりn等分する。 0からxまでの幅はxなのだから、それをn個の同じ大きさの小さな区間に分ければ、1つ1つの幅はx/nになる。 例えばx=5のときにこの区間を5個に分ければ1つ1つの区間の幅は5/5=1になるし、10個に分ければ5/10=0.5になるということである。 さて、x=5、n=5の場合に小さな区間の右端と0を小さい順に並べれば、

0,1,2,3,4,5

という数列になる。 これは0から1まで、1から2まで、2から3まで、3から4まで、4から5までの幅が1の5個の区間を考えているということである。 もしx=5、n=10だったら、

0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5

という数列になる。 これは0から0.5まで、0.5から1まで、1から1.5まで、1.5から2まで、2から2.5まで、2.5から3まで、3から3.5まで、3.5から4まで、4から4.5まで、4.5から5までの幅が0.5の10個の区間を考えているということである。 では、これらの区間の分け方で長方形を計算して面積の合計を求めてみる。

長方形の横幅は分かったので、縦幅を計算する。 縦幅はf(x)=xを使って、小さな区間の右端のxの数をこの関数で対応させた先の数なのだから、つまりxの値そのものになる。 だから、右端がx=3.5のときは縦幅も3.5になるし、x=5のときは縦幅も5になる。 まずは0から5までを5個の横幅1の区間に分けた場合の長方形の面積を計算すると、

f(1)・(1-0)=1・1=1
f(2)・(2-1)=2・1=2
f(3)・(3-2)=3・1=3
f(4)・(4-3)=4・1=4
f(5)・(5-4)=5・1=5

となる。 計算結果は小さい長方形の面積である。 得られた5個の小さな長方形の面積を全て足すと、15になる。 このように、確かに積分の計算を部分的に実行して得られるものは面積である。 今計算したのはx=5、n=5の場合なのだから、もちろん本当の積分の計算によって得られるものとは違うが、この調子でどんどんnを大きくしていったらどうなるのかを具体的に見てみる。

次はx=5、n=10の場合に面積がどうなるのかを見る。 さきほどより倍の数の長方形を考えるのである。 0から5までの区間を10個に分けるのだから、1つあたりの幅は0.5になる。 面積を計算すると、

f(0.5)・(0.5-0)=0.5・0.5=0.25
f(1)・(1-0.5)=1・0.5=0.5
f(1.5)・(1.5-1)=1.5・0.5=0.75
f(2)・(2-1.5)=2・0.5=1
f(2.5)・(2.5-2)=2.5・0.5=1.25
f(3)・(3-2.5)=3・0.5=1.5
f(3.5)・(3.5-3)=3.5・0.5=1.75
f(4)・(4-3.5)=4・0.5=2
f(4.5)・(4.5-4)=4.5・0.5=2.25
f(5)・(5-4.5)=5・0.5=2.5

となる。 これらの10個の長方形の面積の和は、13.75となる。 さきほど、0から5の区間を5個に分けて5個の面積を計算したら、結果は15になった。 今はそれより分け方を細かくして10個に分けたら、13.75になった。 面積が少し少なくなっている。 f(x)=xという関数の面積を、グラフの三角形の面積を図形として計算すると底辺5、高さ5の三角形なのだから5・5/2=12.5になる。 これがf(x)=xの0から5までの区間の本当の面積なので、区間の分け方を5個から10個に増やしたらより本当の面積に近づいたことになる。 この調子でどんどん区間を細かく分けていけば、どんどん本当の面積に近づくのではないかという予測ができるので、それを確かめてみる。

一般的に0から5までの区間をn個に分けたとしたら、1つ1つの小さな区間の幅は5/nになる。 小さな長方形の数はn個あるので、その左からi番目の小さな区間の右端の点はx=i・5/nとなる。 その点の関数で対応する先の数はf(i・5/n)=i・5/nとなるので、これを縦幅にもつ長方形は、横幅5/n、縦幅i・5/nの長方形である。 ということはi番目の長方形の面積は(5/n)・(i・5/n)=i・(5/n)2になる。 これをi=1からnまで和を計算すれば、

ni=1i・(5/n)2=(5/n)2ni=1i

=(5/n)2・(n2/2+n/2)
=52・(1/2+1/2n)
=12.5+12.5/n

となる。 ni=1i=n2/2+n/2というのは数列の写像のところで出てきた。 さきほど計算したのはn=5の場合とn=10の場合である。 そこで、今、一般的に計算した面積のn=5の場合を考えると、12.5+12.5/5=15となって、あらかじめ計算しておいた結果と一致する。 また、n=10の場合を考えると、12.5+12.5/10=13.75となって、やはりあらかじめ計算しておいた結果と一致する。 このようにこの式に具体的に0から5までの区間を何個の長方形に分けるか、つまりnの数を具体的に決めれば、それによってその場合の小さな長方形の面積の合計を計算することができる。

そして、この式のnをどんどん大きくしていって無限大に近づけたときの極限がf(x)=xの原始関数のx=5に対応する数になる。 それは、12.5+12.5/n→12.5(n→∞)なので、あらかじめ関数のグラフの面積を図形としてを計算しておいた12.5という数と一致する。 このように、関数を積分して得られる原始関数は、元の関数の面積を表す関数なのである。

積分区間の性質

このように積分によって得られる原始関数は元の関数の面積を表す。 原始関数は面積を考える区間の関数になる。 ある数をcで表して、cからxまでの区間の面積を考えれば、広い区間の面積を考えるのと、狭い区間の面積を考えるのとでは当然結果は違ってくるから、xの関数になるのである。 このような積分によって面積を考える区間は積分区間と呼ばれている。 今の場合はcからxまでが積分区間である。 xやcとして具体的な数を考えている場合は、例えば積分区間は1から2まで、とか、5から10までが積分区間である、などと言う。 先ほどf(x)=xの積分を計算したときの積分区間は0から5までであった。

積分区間には様々な性質がある。 まずある数をcで表して、cからxを積分区間として積分を考えるとき、xは積分を考える基準になっている点であるcになっても問題はない。 その場合は積分区間はcからcまでということになる。 区間といっても、1つの点の上だけについて考えていることになる。 関数の面積を考えようにも、幅がないのだから面積はないと期待できる。 つまり原始関数はx=cのとき0になるはずだが、それを積分の定義から確かめる。 積分区間がcからcの場合は、この区間をn個に分けようにもc以外の数が積分区間にないので、

x0=x1=x2=...=xn=c

とするしかない。 この区間で積分の定義を計算すると、

ni=1f(xi)・(xi-xi-1)=ni=1f(xi)・(c-c)

=ni=1f(xi)・0
=0
→0(n→∞)

となって、期待どうり結果は0になる。 つまり、

ccf(t)dt=0

ということである。 これは関数の種類には関係なく、常に成り立つ性質である。

次は積分区間をつなげたり分けたりすることを考える。 つまり、cからxまでを積分区間として積分を考えていたのを、cからaまでの積分とaからxまでの積分の2つに分けて考えるとどうなるかを考えるのである。 単純に考えると、ある図形と同じ形の紙を用意してそれをある部分で切って2つに分けても、片方を無くしてしまったりしない限りはその2つの図形の合計の面積は元のままのはずである。 積分は関数の面積なのだから、やはり積分区間を2つに分けても、その合計が元の区間と同じになるなら結果は同じになると期待できる。 それを積分の定義から確かめる。 まず、f(x)をcからxまでの積分区間で積分するとF(x)になるとする。 つまり、

x0=c<x1<x2<...<xn=x

となるようにcからxまでの区間を分けて、次の極限を考えればF(x)になるということである。

ni=1f(xi)・(xi-xi-1)→F(x)(n→∞)

さて、積分区間を分けるということは、cより大きくxより小さいある数をaで表して、

x0=c<x1<x2<...<xi<a<xi+1<...<xn=x

となるようにすることである。 そしてaの前後で積分区間を分け、別々に積分を計算することができる。 つまり、

x0=c<x1<x2<...<xn=a

と、

x0=a<x1<x2<...<xn=x

となるように積分区間を分け、それぞれ別々に積分を計算することができる。 実際にやってみると、cからaまでの積分区間に対しては、

ni=1f(xi)・(xi-xi-1)=f(x1)・(x1-x0)+f(x2)・(x2-x1)+...+f(xn)・(xn-xn-1)

=f(x1)・(x1-c)+f(x2)・(x2-x1)+...+f(xn)・(a-xn-1)
→F(a)(n→∞)

となる。 これはcからxまでを積分区間とした場合の積分の、x=aの場合だからである。 aからxまでの積分区間の積分は、

ni=1f(xi)・(xi-xi-1)=f(x1)・(x1-x0)+f(x2)・(x2-x1)+...+f(xn)・(xn-xn-1)

=f(x1)・(x1-a)+f(x2)・(x2-x1)+...+f(xn)・(x-xn-1)
→Fa(x)(n→∞)

となる。 これはcからxの積分の原始関数がF(x)なので、aからxまでの積分の原始関数はF(x)とは違うものになるはずだから、それをFa(x)と書いたのである。 このように1つの積分区間を分けて2つの積分区間にし、それぞれの区間で積分を計算すれば、2つの原始関数が得られる。

その一方でそれらの原始関数を計算した積分区間をつなげて積分を計算することもできる。 つまり、

x0=c<x1<x2<...<xn'-1<xn'=a<xn'+1<...<xn=x

という様にcからaまでの区間をn'個に分け、aからxまでの区間をn-n'個にわけ、この分け方をどんどん細かくしていって小さな区間の数を無限大に近づければF(x)になる。 これは、cからxまでの区間の間にaという特別な点を考えるが、積分を計算するにはどんどん分け方を細かくしていくならどのような分け方でもいいからである。 つまり、limでn→∞やn'→∞の極限を表して、

F(x)=lim ni=1f(xi)・(xi-xi-1)

=lim [f(x1)・(x1-x0)+f(x2)・(x2-x1)+...+f(xn'-1)・(xn'-1-xn'-2)+f(xn')・(xn'-xn'-1)+f(xn'+1)・(xn'+1-xn')+...+f(xn)・(xn-xn-1)]
=lim [f(x1)・(x1-c)+f(x2)・(x2-x1)+...+f(a)・(a-xn'-1)]+lim [f(xn'+1)・(xn'+1-a)+...+f(x)・(x-xn-1)]
=lim n'i=1f(xi)・(xi-xi-1)+lim ni=n'f(xi)・(xi-xi-1)
=F(a)+Fa(x)

となって、期待どおり積分区間を2つに分けて、2つの積分区間で別々に積分を計算して求めた原始関数の足し算と元の積分区間で計算した原始関数は同じになる。 これを別の書き方で書けば、

xcf(t)dt=∫acf(t)dt+∫xaf(t)dt

と書ける。 このように1つの積分区間を2つに分けることができるし、逆に考えればもし積分区間の上の数と下の数が同じ数だった場合はそれを1つの積分区間にまとめることができる。

ある数をcで表して、cからcまでの積分が0になり、積分区間を2つに分けても結果が変わらないという関係から、少し面白い関係を見つけることができる。 cからcまでの積分が0になるのだから、

ccf(t)dt=0

ということになる。 ここでcからcまでの積分区間を2つに分けることを考える。 cからcまでの区間といってもそれは点のことで区間ではないような気がするが、あまり気にしないで変数xを用意して、cからcまでの区間をcからxまでとxからcまでの2つの区間に分けてみる。 そうすると、積分区間は2つに分けても結果は変わらないのだから、

ccf(t)dt=∫xcf(t)dt+∫cxf(t)dt

=0

となる。 これはある関数に別の関数を足したら0になるのだから、これは、

xcf(t)dt=-∫cxf(t)dt

ということである。 これはxからcまでの積分はcからxまでの積分の-1倍になるということである。 これがなぜかというと、今まで考えてきたようにcよりもxが大きければ、積分区間の分け方はいつもどおり、

c<x1<x2<x3<...<xn-1<x

ということになるが、これをxからcまでの区間を分けたと考えれば、

x>xn-1>xn-2>xn-3>...>x3>x2>x1>c

ということになるが、番号を付け直して、

x>x1>x2>x3>...>xn'-3>xn'-2>xn'-1>c

となるように番号を付け直すことができる。 今までとは不等号の向きが逆で、数が大きい側から小さい側へと番号をふっていっていることに注意して欲しい。 この番号のつけ方で積分の定義をそのまま計算したら、

cxf(t)dt=lim n'i=1f(xi)・(xi-xi-1)

となるが、今はxiの番号が大きくなればなるほど小さい数になっていくのだから、xi-xi-1は小さい数から大きい数を引くことになるので負になる。 今まで考えてきた積分はf(xi)の部分は正だったり負だったりしたが、xi-xi-1の部分は常に正だった。 ところが、今はxi-xi-1の部分が常に負になるのである。 つまり、limでn→∞を表すと、

xcf(t)dt=lim ni=1f(xi)・(xi-xi-1)

=lim ni=1f(xi)・[-1・(-xi+xi-1)]
=lim -1・[ni=1f(xi)・(-xi+xi-1)]
=-1・[lim ni=1f(xi)・(xi-1-xi)]
=-1・[lim n'i=1f(xi)・(xi-xi-1)]
=-∫cxf(t)dt

ということなのである。 途中で分かりにくいがni=1n'i=1に変えた。 これはcからxまでの区間を分け方た分け方と同じように、ただし番号をつける順番を逆にしてxからcまでの区間を分けたことを意味する。 このように考えれば積分を計算するときに積分区間を逆にしたら元の原始関数の-1倍になることが分かる。

最後にもう1つ、これらの性質を使ってとても重要な原始関数の性質について説明する。 原始関数はある点からxまでの関数の面積を表す関数である。 関数なのだから数と数の間にある対応関係である。 つまり変数をxとすると、そのxが何か具体的な数の場合は原始関数はそれに対応する数になる。 その数がcからxまでの区間の関数の面積になっているのである。

しかしどうせ関数の面積を考えるなら、自分で自由に選んだところから、別の自分で自由に選んだところまでの面積を考えたいものである。 例えばある数をaとbで表して、aからbまでの区間の関数の面積などを考えたい。 そのために、いちいちaからxまでの積分区間で積分を計算して、aから測った関数の面積を表す原始関数を求めてx=bの場合を考えていたのでは大変である。 なんとか、cからxまでの関数の面積を表す原始関数を使って、aからbまでの面積を計算したい。

それは今まで調べた積分区間の持つ性質を使えばできる。 ある数をcで表して、cからxまでの積分区間でf(x)という関数を積分して求めた原始関数をF(x)とすると、例えばaやbという数を用意してcからaまでのf(x)の面積はF(a)になるし、cからbまでのf(x)の面積はF(b)ということである。 これらの関数や値さえ分かれば、aからbまでの関数の面積を計算することができる。

まず考えるのはcからaまでとcからbまでの面積が分かっているなら、例えばc=0、a=2、b=5の場合だったら、0から5までの面積から0から2までの面積を引けば2から5までの面積が残るのではないかということである。 一般的にはF(b)-F(a)を計算すればいいのではないか、ということである。 これを実際に計算してみると、

F(b)-F(a)=∫bcf(t)dt-∫acf(t)dt

=∫bcf(t)dt+∫caf(t)dt
=∫baf(t)dt

となって、実際にaからbまでのf(x)の積分になる。 これは、どんなcを基準点にして原始関数を求めても、cからxまでの積分区間で原始関数を求めておきさえすれば、面積を求める基準点はcだけに限らず、どんな数を基準にして積分した面積でも自由に計算できることを意味している。 なので、どんなcを基準にしてその原始関数を計算したのかはあまり重要ではない。 どこを基準にしていても原始関数さえ得られていれば、好きな積分区間で面積を計算できるからである。

ちなみに、このように原始関数を使って具体的な区間の関数の面積を求めることを、定積分を計算すると言う。 そして、原始関数を計算するのとは違って、∫baf(t)dtのように積分区間に変数が含まれて居ない場合は定積分を計算する、などと言う。 積分で得られる原始関数は関数であるが、定積分で得られるのは面積なので数である。

積分の例

それでは実際に様々な関数の積分を計算してみる。 始めは最も簡単な例としてf(x)=aの定数関数を積分する。 これからは議論を単純にするために積分を計算する基準になる点は常にcとし、cからxまでの積分区間は常にn等分することにする。 そうすると、小さな長方形の縦幅の計算に使うxの値はc+i・x/nで横幅は(x-c)/nになる。 f(x)=aの場合に計算すべき式は積分の定義から、limでn→∞の極限を表して、

xcf(t)dt=lim ni=1f(c+i・x/n)・(x-c)/n

=lim ni=1a・(x-c)/n =lim [a・(x-c)/n+a・(x-c)/n+a・(x-c)/n+...+a・(x-c)/n]
=lim a(x-c)
=a(x-c)

となる。 途中の+...+というのは、n回a・(x-c)/nを足すということである。 足し算をした結果はnとは関係がなくなるので、nがどんどん大きくなって無限大に近づいてもそのままである。 つまり、

xcadt=a(x-c)

となる。 原始関数は基準として選んだ点cによって変わってくる。 もし-acを新たにc'とでも書き表せば、

xca・dt=ax+c'

ということになる。 定数関数を積分すると1次関数になるのである。

次はf(x)=xという1次関数の積分を考える。 計算すべき式は

xcf(t)dt=lim ni=1f(c+i・(x-c)/n)・(x-c)/n

=lim ni=1(c+i・(x-c)/n)・(x-c)/n
=lim ni=1[c(x-c)/n+i・(x-c)2/n2]
=lim [ni=1c(x-c)/n+ni=1i・(x-c)2/n2]
=lim [c(x-c)+(x-c)2/n2ni=1i]
=lim [c(x-c)+(x-c)2/n2・n(n+1)/2]
=lim [c(x-c)+(x-c)2(1/2+1/2n)]
=c(x-c)+(x-c)2/2
=cx-c2+(x2-2cx+c2)/2
=x2/2-c2/2

となる。 もしC'=-c2/2と書けば、

xct・dt=x2/2+C'

となって、1次関数を積分すると2次関数になることが分かる。

次は2次関数の積分を考える。 f(x)=x2と書くと、計算すべき式は

xcf(t)dt=lim ni=1[c+i・(x-c)/n]2(x-c)/n

=lim ni=1[c2+2ci・(x-c)/n+i2・(x-c)2/n2](x-c)/n
=lim [ni=1c(x-c)/n+ni=12ci・(x-c)2/n2+ni=1i2・(x-c)3/n3]
=lim [c2(x-c)+2c(x-c)2/n2ni=1i+(x-c)3/n3ni=1i2]
=lim [c2(x-c)+2c(x-c)2/n2・(n2/2+n/2)+(x-c)3/n3・(2n3+3n2+n)/6]
=lim [c2(x-c)+2c(x-c)2・(1/2+1/2n)+(x-c)3・(1/3+1/2n+1/6n2)]
=c2(x-c)+c(x-c)2+(x-c)3/3

となる。 この式をもっと簡単にすると、

c2(x-c)+c(x-c)2+(x-c)3/3=xc2-c3+c(x2-2cx+c2)+(x3-3x2c+3xc2-c3)/3

=xc2-c3+cx2-2xc2+c3+x3/3-x2c+xc2+c3/3
=x3/3+x2c-x2c+c2x+xc2-2xc2+c3-c3-c3/3
=x3/3-c3/3

となる。 もしC'=-c3/3と書き直したら、

xct2・dt=x3/3+C'

ということで、2次関数を積分したら3次関数になる。

微積分学の基本定理

定数関数、1次関数、2次関数と来たのだから次は一般的にm次関数について積分を計算したい。 しかし今までのように積分の定義をそのまま計算しようとすると、ni=1imの計算をする必要が出てきて、これは計算するのが難しい。 そこで今までとは違った方法で積分を計算する方法を考える。 それは積分を計算するのに微分を使うという画期的方法で、微積分学の基本定理と呼ばれている。

微分というのは引き算を行う操作である。 微分で計算するべき式は[f(x+h)-f(x)]/hで、関数のある点と、そのちょっと前の点との引き算を計算する。 一方、積分は足し算を行う操作である。 積分で計算すべき式は杷(xi)・(xi-xi-1)で、ある基準点からxまでの関数の値をすべて足す計算をする。

この、前の数との引き算やxまでの数をすべて足すというのは、数列について考えた和を計算する写像や差を計算する写像に少し似ている。 数列について{an+1-an}や、{蚤n}を計算するのに微分や積分の手続きが似ている。 そしてこれらの写像には和を計算してから差を計算したり、差を計算してから和を計算したら元の数列に戻るという性質があった。 これと同じような性質が、微分や積分の場合にもあれば積分の計算を楽にできるかもしれない。

ではさっそく原始関数の微分や導関数の積分を考えていく。 まずは原始関数の微分を考える。 原始関数の微分は、f(x)の原始関数をF(x)として、

dF(x)/dx=lim [F(x+h)-F(x)]/h

となる。 とりあえず、大雑把な議論で大体の内容をつかんでおくと、これはf(x)のグラフのcからx+hまでの面積からcからxまでの面積を引いてhで割り、h→0の極限を考えたものである。 cからx+hまでの面積からcからxまでの面積を引くと何が残るかというと、f(x)のxからx+hまでの面積が残る。 xからx+hまでなのだから、残っている図形の横幅はhになる。 大雑把に考えて、残った面積を長方形だと思うと、横幅がhで縦幅がf(x+h)の長方形の面積はf(x+h)・hになるが、これが微分の定義の分母にあるhと約分されてf(x+h)になり、hは0に近づいていくのだから、

dF(x)/dx=f(x)

ということになる。 これをもっときっちりした議論で確かめていく。 まずは、ある数をcで表して、積分で使う基準になる点にする。 そしてcからxまでのf(x)の積分を考えるために、cからxまでの間をn個の区間に分ける。 つまり、

c<x1<x2<x3<...<xn-1<x

となるようにn-1個の数をcとxの間から選ぶのである。 さらに、微分を考えるためにcからx+hまでのf(x)の積分からcからxまでのf(x)の積分を引く必要があるので、cからx+hまでの区間も小さな区間に分けなくてはならない。 その分け方はどんな分け方でもいいのだが、cからx+hまでの区間はcからxまでの区間とだいぶ重なっている。 そこでcからx+hまでの区間をcからxまでと、xからx+hまでの2つに分ける。 そしてcからxまでの分け方は微分で引く方の分け方とまったく同じようにn個に分け、xからx+hまでの区間はm等分する。 つまり、

c<x1<x2<x3<...<xn-1<x<x+h/m<x+2h/m<x+3h/m<...<x+ih/m<...<x+(m-1)h/m<x+h

となるようにcからx+hまでの区間を分けるのである。 積分で考える必要があるのは、どんどん区間を細かく分けていった極限なので、nもmもどんどん大きくして無限大に近づくようにしなくてはならないが、どちらも無限大に近づくならこのような分け方をしても、もちろん構わない。 積分で考える区間の分け方は、どんな分け方でも構わないからである。 さて、このように区間を分ければ、微分を計算するのに必要なF(x+h)は、

mi=1f(x+i・h/m)・h/m+ni=1f(xi)・(xi-xi-1)

のn→∞かつm→∞の極限となるし、F(x)の方は

ni=1f(xi)・(xi-xi-1)

のn→∞の極限となるので、微分の計算に必要な[F(x+h)-F(x)]/hは、

[mi=1f(x+i・h/m)・h/m+ni=1f(xi)・(xi-xi-1)-mi=1f(xi)・(xi-xi-1)]/h=[mi=1f(x+i・h/m)・h/m]/h

=mi=1f(x+i・h/m)/m

のm→∞、h→0の極限である。 cからxまでの区間にあった長方形は、cからx+hまでの積分のcからxまで区間の分け方をcからxまでの区間の分け方とぴったり同じに合わせたので引き算されて0になった。 よって結果はnには関係なくなって、xの他にはmとhだけが出てくるようになった。 これはcからxまでの区間をどのように分けても結果が変わらないことを意味する。 どのように分けても分け方さえそろえれば、微分の計算で差を計算すると打ち消しあってしまうのだから当然である。

あとはこのmとhについての極限を計算すればいいだけである。 そこでとりあえずhが0になる場合の極限を考えると、

mi=1f(x+i・h/m)/m=mi=1f(x)/m(h→0)

=f(x)

となって、結果はmには関係しなくなくなってしまう。 これは、hがどんどん0に近づけばi・h/mも0に近づくし、f(x)/mをm個足したらf(x)になるからである。 結果がmに関係しなくなったのでm→∞になってもそのままで、つまり、

dF(x)/dx=lim [F(x+h)-F(x)]/h

=f(x)

となって、f(x)の原始関数の微分が元の関数に戻ることが分かった。 それはいいのだが、本当にhが0に近づく極限をmが無限大に近づく極限より先に考えていいのかという問題がある。 原始関数を定義するのにmが無限大に近づく極限を計算する必要があり、そうやって得られた原始関数を微分するのだから、先にmが無限大に近づく極限を考えるのが本来の正しい議論の進め方である。 にもかかわらず、ここでは先にhを0に近づける極限を考えてしまった。 つまり2つの極限の順番を入れ替えてしまった。 極限の順番を入れ替えたら結果が変わるならこのような議論はできなくなるので、それでも収束する先が変わらないことをここで確かめておく。

まずは、2つの極限の取り方ができる関数を用意する。 xとyを変数として使って、2つの変数を持つf(x,y)という関数を考え、そのxに関する極限とyに関する極限を考える。 つまり、

f(x,y)→g(y)(x→a)
f(x,y)→h(x)(y→b)

となるとする。 さて、このとき、

g(y)→α(y→b)
h(x)→α(x→a)

となるだろうか、というのが問題なのである。 あらかじめこの2つは違う極限値を持つと仮定しておいて、よく考えたら実はそれは同じものだった、ということを確かめる。 つまり、g(y)→α(y→b)、h(x)→β(x→a)、と仮定しておいて、実はα=βであるということを確かめるのである。 まず、f(x,y)→g(y)(x→a)、f(x,y)→h(x)(y→b)、g(y)→α(y→b)、h(x)→β(x→a)、なのだから、

|f(x,y)-g(y)|<ε1
|f(x,y)-h(x)|<ε2
|g(y)-α|<ε3
|h(x)-β|<ε4

となるようなxやyの範囲を選べる。 このとき、|α-β|がどうなるのかを考える。 まず、上の4つの式を全部足すと、

|f(x,y)-g(y)|+|f(x,y)-h(x)|+|g(y)-α|+|h(x)-β|<ε1234

となることが分かる。 これは、三角不等式を使えば絶対値をまとめることができて、

|f(x,y)-g(y)|+|f(x,y)-h(x)|+|g(y)-α|+|h(x)-β|=|-1・[f(x,y)-g(y)]|+|f(x,y)-h(x)|+|-1・[g(y)-α]|+|h(x)-β|

=|-f(x,y)+g(y)|+|f(x,y)-h(x)|+|-g(y)+α|+|h(x)-β|
<|-f(x,y)+g(y)+f(x,y)-h(x)+-g(y)+α+h(x)-β|
=|α-β|
1234

となる。 つまり、十分xがaに近く、十分yがbに近ければ、どんなに小さな数を選んでもαとβの差をそれより小さくすることができるということである。 これはα→βということで、少し形を変えればβ→αということもすぐに分かり、つまりαとβは同じものである。 ということは、その極限が収束する限り、極限を考える順序を変えても結果は変わらないことが分かった。 これで先ほどの微分と積分の極限を入れ替えた議論が問題なかったことが分かった。

さて、分かったのは原始関数を微分したら元の関数に戻ることである。 つまり、

d[∫xcf(t)dt]/dx=f(x)

ということである。 次は逆に導関数を積分したらどうなるかを考える。 つまり、ある関数をf(x)で表して、

xc[df(t)/dt]dt=g(x)

となるg(x)がどのような関数になるかを調べたいのである。 そのために今確かめた、ある関数を積分して微分すると元に戻るという関係を使ってみる。 まず、

d[∫xcf(t)dt]/dx=f(x)

ということは正しいと確かめた。 では、この関係をさらに積分してみると、

yc[d[∫xcf(t)dt]/dx]dx=∫ycf(x)dx

となる。 f(x)はxの変数なので積分は新しい変数を用意して、cからyまでの範囲で積分するようにした。 積分と微分が入り組んで見にくくなっているので、f(x)の原始関数をF(x)と書けば、∫xcf(t)dt=F(x)なのだから、

yc[dF(x)/dx]dx=∫ycf(x)dx

=F(y)
=F(x)

となる。 ∫ycf(x)dxはcからyまでの区間の積分なので原始関数はyの関数になるが、別に関数につかう変数をどのような記号で表そうが関数自体は何も変わらないので、最後にF(y)をF(x)に変えた。 この関係をよく見ると、原始関数を微分して積分したら元の原始関数に戻るということである。 原始関数には様々な関数があり、後で見るようにxの累乗や三角関数、指数関数などは別の関数の原始関数である。 これは、そのような別の関数の原始関数になり得る関数の導関数を積分したら元の関数に戻るということを表している。 これをまとめると、

d[∫xcf(t)dt]/dx=∫xc[df(t)/dt]dt

=f(x)

ということで、微分と積分は順番を自由に入れ替えることができるし、お互いに打ち消し合うことが分かった。 この関係は微分と積分という、まったく違った極限の操作を結びつける大切な関係で、微積分学の基本定理と呼ばれている。

それでは微積分学の基本定理を使って積分を簡単に求める方法を紹介する。 それは微分してその関数になる関数を見つけることである。 まずは普通にf(x)の積分を考え、原始関数をF(x)と書く。

xcf(t)dt=F(x)

ここで、もし微分してf(t)になる関数が見つかったとする。 つまり、

dg(t)/dt=f(t)

となるg(x)が見つかったとする。 これを積分の式の中のf(x)と置き換えると、

xcf(t)dt=∫xc[dg(t)/dt]dt

となる。 これは、g(t)という関数を微分して積分した関数になっている。 微分して積分したら元の関数に戻るのだから、これはつまり、

xcf(t)dt=∫xc[dg(t)/dt]dt

=g(x)

ということで、これはf(x)を積分したらg(x)になるということを表している。 g(x)がf(x)の原始関数なのである。 つまり、微分してf(x)になる関数を見つければ、それが求めたい原始関数なのである。 まとめると、

xcf(t)dt=F(x)
dF(x)/dx=f(x)

ということである。 この関係を使って様々な関数の積分を計算していく。

様々な関数の積分

まずはxの累乗の積分を計算する。 xnを積分して得られる原始関数は、微分してxnになる関数である。 微分してxnになる関数はどのような関数かと言えば、ある数をCで表して、xn+1/(n+1)+Cである。 試しにこれを微分してみると、

d[xn+1/(n+1)+C]/dx=(d[xn+1]/dx)/(n+1)+dC/dx

=(n+1)xn/(n+1)
=xn

となって、確かにxn+1/(n+1)+Cを微分すればxnになる。 ということは、

xctndt=∫xcd[tn+1/(n+1)+C]/dtdt

=xn+1/(n+1)+C

となる。 これは、既に計算しておいたn=1の場合を考えると、

xcxdt=x1+1/(1+1)+C

=x2/2+C

となって、あらかじめ計算しておいた結果と一致する。 また、n=2の場合は、

xcx2dt=x2+1/(2+1)+C

=x3/3+C

となって、やはりあらかじめ計算しておいた結果と一致する。

次は三角関数の積分について考える。 sin関数の積分を計算するには、微分してsinになる関数を見つければいい。 微分してsinになるのは、cos関数の-1倍の関数に定数を足したものである。 試しに-cos x+Cを微分すると、

d[-cos x+C]/dx=-d[cos x]/dx+dC/dx

=-(-sin x)
=sin x

となって、確かにsin関数になる。 だからsin関数の積分は、

xcsin tdt=∫xc(d[-cis t+C]/dt)dt

=-cos x+C

ということである。 また、cos関数の積分を計算する。 微分してcos関数になるのは、sin関数に定数を足したものである。 試しにsin x+Cを微分してみると、

d[sin x+C]/dx=d[sin x]/dx+dC/dx

=cos x

となって、確かにcos関数になる。 だからcos関数の積分は、

xccos tdt=∫xc(d[sin t+C]/dt)dt

=sin x+C

となる。

次は指数、対数関数の積分を考える。 まずは指数関数の積分を考える。 ネイピア数をeで表して、exの積分を計算する。 そのためには微分してexになる関数を見つけないといけないが、exは微分してもexのままなので、ある数をCで表して、

xcetdt=∫xc(d[et+C]/dt)dt

=ex+C

となる。 次は一般的に、0<aとなるようにaを選んで、axの積分を考える。 そのためには微分してaxになる関数を見つけなくてはならないのだが、axの微分も余計な対数が掛かってくるだけでaxのままなので、axをlog aで割ればいい。 試しにax/log a+Cを微分すると、

d[ax/log a+C]=(d[ax]/dx)/log a+dC/dx

=log a・ax/log a
=aa

となって、確かにaxになる。 よってaxの積分は、

xcatdt=∫xc(d[at/log a+C]/dt)dt

=at/log a+C

となる。 これはa=eの場合を考えると、

xcetdt=et/log e+C

=et+C

となって先に計算しておいた結果と一致する。

次は対数関数の積分を計算する。 まずはネイピア数eを底に持つlog xの積分を計算する。 そのためには微分してlog xになる関数を見つける必要がある。 これを見つけるのは少し難しいが、ある数をCで表してxlog x-x+Cの微分がlog xになる。 それを確かめるためにxlog x-x+Cを微分してみると、

d[xlog x-x+C]=d[xlog x]/dx+d[-x]/dx+dC/dx

=x・d[log x]/dx+log x・d[x]/dx-d[x]/dx
=x・1/x+log x-1
=1+log x-1
=log x

となって、確かにlog xになる。 よってlog xの積分は、

xclog t・dt=∫xc(d[xlog x-x+C]/dt)dt

=xlog x-x+C

となる。 次は一般的に0<aとなるaを底にしたloga xの積分を計算する。 そのためには微分してloga xになる関数を見つけないといけないのだが、loga xを微分するとlog xを余計な対数で割らないといけないので、先ほどの微分してlog xになる関数よりさらに複雑になる。 いろいろ試して探すとある数をCで表して、log a・xloga x-log a・x+Cを微分するとloga xになることが分かる。 それを確かめるためにxloga x-x/log a+Cの微分を計算してみると、

d[xloga x-x/log a+C]/x=d[xloga x]/dx+d[-x/log a]/dx+dC/dx

=x・d[loga x]/dx+loga x・d[x]/dx-(d[x]/dx)/log a
=x・1/(xlog a)+loga x-1/log a
=1/log a+loga x-1/log a
=loga x

となって、確かにloga xになる。 よってloga xの積分は、

xcloga t・dt=∫xc(d[xloga x-x/log a+C]]/dt)dt

=xloga x-x/log a+C]

となる。 また、微分の結果を見返すと、d[log x]/dx=1/xという関係があるのが分かる。 この関係を使えば1/xの積分が計算できて、

xc1/tdt=∫xc(d[log x+C]]/dt)dt

=log x+C

となる。

また、一般的な導関数の関係に、2つの関数を微分する前に足しても微分してから足しても同じ関数になるというものがあった。 他にもある数を掛けるのと微分の順番を変えてもいいし、2つの関数の掛け算でできる新しい関数の微分がどうなるのかなどの関係も調べた。 それらの関係はある関数を微分したときにどのような関数になるのかの一般的な関係なのだから、そこから積分に関する一般的な関係を見つけることができる。 まずは微分の順番と2つの関数の足し算の順番を変えてもいいという関係から、積分と関数の足し算の関係を見つける。 まずは、微分可能なf(x)とg(x)という2つの関数を用意して、その導関数の積分を考えると、

xc[df(t)/dt]dt=f(x)
xc[dg(t)/dt]dt=g(x)
xc(d[f(t)+g(t)]/dt)dt=f(x)+g(x)

となる。 これをf(x)=∫xc(df(t)/dt)dt、g(x)=∫xc(dg(t)/dt)dtという様に読みかえれば、

xc(d[f(t)+g(t)]/dt)dt=∫xc[df(t)/dt+g(t)/dt]dt

=f(x)+g(x)
=∫xc[df(t)/dt]dt+∫xc[dg(t)/dt]dt

ということである。 これは、

xc[df(t)/dt+g(t)/dt]dt=∫xc[df(t)/dt]dt+∫xc[dg(t)/dt]dt

となる。 これはある関数を積分するとき、その関数が2つの導関数の足し算でできていれば、それを別々に積分して、2つの原始関数を足し算しても結果が変わらないということである。

次は微分とある数との掛け算の順番を変えても導関数が変わらないことを利用して、積分と数の掛け算の間にある関係を見つける。 まずは微分可能な関数をf(x)、ある数をaと表して、

xc[da・f(t)/dt]dt=a・f(x)

となる。 そしてこれは、

xc[da・f(t)/dt]dt=∫xca・[df(t)/dt]dt

=af(x)
=a∫xc[df(t)/dt]dt

となるので、ある関数がある数とある関数の掛け算でできている場合、その数と関数の掛け算したものを積分しても、関数を積分してから数を掛けても結果が同じになる。 これと先ほどの積分と足し算の関係から、一般的なxの累乗の関数の積分を考えることができる。 xnの積分はxn+1/(n+1)になるので、aiでn+1個の様々な数を表して、

xc[antn+an-1tn-1+an-2tn-2+...+aiti+...+a1t1+a0]dt=∫xc[antn]dt+∫xc[an-1tn-1]dt+∫xc[an-2tn-2+]dt...+∫xc[aiti]dt+...+∫xc[a1t1]dt+∫xc[a0]dt

=an・∫xc[tn]dt+an-1・∫xc[tn-1]dt+an-2・∫xc[tn-2+]dt...+ai・∫xc[ti]dt+...+a1・∫xc[t1]dt+∫xc[a0]dt
=an・xn+1/(n+1)+an-1・xn/n+an-2・xn-1/(n-1)+...+ai・xi+1/(i+1)+...+a1・x2/2+a0・x+C

となる。 結果をまとめると、

xc[antn+an-1tn-1+an-2tn-2+...+aiti+...+a1t1+a0]dt=an・xn+1/(n+1)+an-1・xn/n+an-2・xn-1/(n-1)+...+ai・xi+1/(i+1)+...+a1・x2/2+a0・x+C

ということである。

また、2つの関数の掛け算でできた関数の微分の関係から、2つの関数の掛け算でできた関数の積分の関係を見つけることができる。 それは、

xc(d[f(t)g(t)]/dt)dt=∫xc(f(t)・d[g(t)]/dt+d[f(t)]/dt・g(t))dt

=∫xc(f(t)・d[g(t)]/dt)dt+∫xc(d[f(t)]/dt・g(t))dt

という関係である。 これは、∫xc(f(t)・d[g(t)]/dt)dtという部分に注目すれば、

xc(f(t)・d[g(t)]/dt)dt=∫xc(d[f(t)g(t)]/dt)dt-∫xc(d[f(t)]/dt・g(t))dt

=f(x)g(x)-∫xc(d[f(t)]/dt・g(t))dt+C

となってこれは、ある関数がある関数とある導関数からできている場合、それを部分的に積分することができるということを意味している。 場合によってはこの関係を使って複雑な積分を簡単に実行することができる。 例えばx・sin xという関数の積分を計算するときは、f(x)=x、g(x)=-cos xと考えれば、

xc(t・sin t)dt=∫xc(t・d[-cos t]/dt)dt

=x・(-cos x)-∫xc(d[t]/dt・[-cos t])dt+C'
=-x・cos x-∫xc[-cos t]dt+C'
=-x・cos x+sin x+C"+C'
=-x・cos x+sin x+C

となって、なかなか単純には思いつかない積分も、部分的に積分していくことで簡単に積分することができる。

原始関数の関係まとめ

今まで計算してきた、さまざまな関数の積分によって得られる原始関数をまとめておく。 これらの計算結果を覚えておけば、積分を簡単に計算できるようになる。 今後もこれらの関係を使って積分を計算していく。

ccf(t)dt=0
xcf(t)dt=∫acf(t)dt+∫xaf(t)dt
xcf(t)dt=-∫cxf(t)dt
baf(t)dt=∫bcf(t)dt-∫acf(t)dt
xc(d[f(t)+g(t)]/dt)dt=∫xc[df(t)/dt]dt+∫xc[dg(t)/dt]dt
xc[da・f(t)/dt]dt=a・f(x)
xc(f(t)・d[g(t)]/dt)dt=f(x)g(x)-∫xc(d[f(t)]/dt・g(t))dt
d[∫xcf(t)dt]/dx=∫xcd[f(t)]/dt・dt=f(x)
xctndt=tn+1/(n+1)+C
xcsin t・dt=-cos x+C
xccos t・dt=sin x+C
xcetdt=ex+C
xcatdt=ax/log a+C
xclog t・dt=xlog x-x+C
xcloga t・dt=xloga x-x/log a+C
xc1/tdt=log x+C

5.3.5 微分方程式

微分を通して関数を定義する

今まで極限やそれを通して定義される微分や積分といった概念について説明してきた。 関数の特殊な極限という手続きによって定義される微分や積分も、ある関数を別の関数に変換する手続きなので、さらにこれらの手続きを通して関数を定義することができる。 つまり、微分したらこうなる関数、とか積分したらこうなる関数、などといった方法で関数を定義することができるのである。 このように、微分を通して関数を定義する場合は、その定義式は微分方程式、積分を通して関数を定義する場合は積分方程式などと呼ばれている。

まずは微分を通して関数を定義していく。 微分を通して関数を定義するとは、微分したらこうなる関数、という様に関数を定義するのである。 例えば、よく分からない関数をf(x)で表して、

df(x)/dx=x・ex

という関数を考える。 f(x)はまだよく分からない関数だが、微分したらx・exになるということである。 このように微分という手続きを通して関数を定義することができる。 微分によって関数を定義しているので、この関係式は微分方程式である。

さて、この微分方程式で定義される関数はどのような関数だろうか。 この関数は微分してx・exになるのだが、exが出てくるのだから、微分する前の関数の中にもexが出てくるのではないかと予測できる。 しかし、exを微分しても変化はなくexのままなのだから、x・exにはならない。 では試しにx・exを微分してみると、これはxとexの掛け算でできている関数なので、その微分は、

d[x・ex]/dx=x・d[ex]/dx+d[x]/dx・ex

=x・ex+ex

となって、x・exという部分は出てくるが、余計なexという部分も出てくる。 だからx・exはこの微分方程式で定義されている関数とは違う。 しかしx・exの微分にはx・exという部分があり、少しは定義に近づいた。 これを微分方程式に合うようにするためには、余計なexを打ち消さなくてはならない。

そのためには、x・exから微分してexになる関数を引かなくてはならない。 微分してexになる関数をg(x)と表すと、

dg(x)/dx=ex

と表せる。 これをx・exから引いた関数がf(x)であるはずである。 それは、

d[x・ex-g(x)]/dx=d[x・ex]/dx-d[g(x)]/dx

=x・ex+ex-ex
=x・ex

だからである。 なのでg(x)がどんな関数なのか具体的に求まればf(x)も求まることになる。 g(x)は微分してexになる関数だが、これは既に分かっていて、exである。 つまりf(x)は、

f(x)=x・ex-ex

という関数である。 実際、これを微分すると、

df(x)/dx=d[x・ex-ex]/dx

=x・d[ex]/dx+d[x]/dx・ex+d[-ex]/dx
=x・ex+ex-ex
=x・ex

となって、確かに微分してx・exになる、というf(x)の定義を満たす。 今までしてきた議論をまとめると、

df(x)/dx=x・ex

という微分方程式はf(x)が

f(x)=x・ex-ex

という関数だった場合、矛盾なく満たされるということである。 このような、微分方程式を矛盾なく満たす関数のことを、微分方程式の解と呼ぶ。

しかしこの微分方程式を満たす関数は今見つけた関数だけではない。 この関数にある定数をCで表して、これを足した関数もこの微分方程式を満たす。 なぜなら定数を微分したら0になるからである。 これを足したらこの微分方程式の解は、

f(x)=x・ex-ex+C

ということになる。 このように微分方程式の解を見つける作業を、微分方程式を解く、などと呼ぶ。

このようにあてずっぽうに考えていくことで微分方程式の解を求めることもできるが、もっと簡単に解を求める方法がある。 微分方程式は微分したらどうなるのかを表す関係式なのだから、それを元に戻すには積分すればいいのである。 つまり、

xc[df(t)/dt]dt=f(x)

=∫xct・etdt

となって導関数を積分すれば元に戻るという性質から、微分方程式の解を求めることができる。 ちなみにこの積分を計算すれば、d[ex]/dx=exという関係を使って、ある数とある導関数の掛け算でできた関数の積分だと考えれば、

f(x)=∫xct・etdt

=∫xc(t・d[et]/dt)dt
=x・ex+C'-∫xcd[t]/dt・etdt
=x・ex-∫xcetdt+C'
=x・ex-ex+C"+C'
=x・ex-ex+C

ということで、確かに先ほどあてずっぽうで考えた結果と一致する。 このように微分方程式を解くには積分を計算するのが一番堅実な方法である。

それでは他にも様々な微分方程式を解いてみる。 例えば次のような微分方程式がある。

d2f(x)/dx2=a

これは2度微分したらある定数であるaになるような関数である。 この微分方程式の解を積分で求めると、まずは1回積分して、

xcd2f(t)/dt2dt=df(x)/dx

=∫xcadt
=ax+C

となって、この関数は1度微分しただけなら1次関数になる関数である。 たしかにこの1次関数を微分したら、定義どおり定数関数になる。 求めたい関数の1階の導関数が求まったので、これをさらに積分すれば欲しい答えが得られる。

xc[df(t)/dt]dt=f(x)

=∫xc[at+C]dt
=ax2+Cx+C'

つまり、d2f(x)/dx2=aという微分方程式によって定義される関数は

f(x)=ax2+Cx+C'

という関数である。 2階微分が定数になる関数はこのような2次関数である。 積分を2回しているので、解になる関数の中には積分定数は2個出てくる。

次はもう少し複雑な場合を考えてみる。 それは、ある関数の微分がその関数自身になっている場合である。 つまり、

df(x)/dx=f(x)

という場合である。 これを積分しようにも、f(x)が具体的にどのような関数なのかが分からなければ積分のしようがない。 なので、今の場合はあてずっぽうに考えていくことにする。 f(x)を微分してf(x)になるというのだから、これは微分しても元の関数のままでいる関数である。 そのような関数には心当たりがあって、指数関数なのではないかとあたりをつけてみる。 試しにexを微分してみると、

d[ex]/dx=ex

となるのだから、f(x)=exとすればf(x)を定義している微分方程式を満たすことが分かる。 これに定数をAで表して、Aを掛けてもやはり微分方程式を満たす。 つまり、

d[Aex]/dx=Ad[ex]/dx

=Aex

ということである。 つまり、df(x)/dx=f(x)の解は、

f(x)=Aex

となる。

次はさらに複雑な例を考えてみる。 f(x)を2度微分したら元の関数の-1倍になるような関数を考えてみる。 つまり、

d2f(x)/dx2=-f(x)

という関数を考えるのである。 これも様々な関数を試してみると、sin関数やcos関数ならこの微分方程式に当てはまることが分かる。 つまり、

d2[sin x]/dx2=d[cos x]/dx

=-sin x

d2[cos x]/dx2=d[-sin x]/dx

=-cos x

ということである。 sin関数もcos関数も、どちらもこの微分方程式の解である。 そこでAとBという2つの定数を用意してこれらの関数に掛け、2つの関数を足してみると、

d2[Asin x+Bcos x]/dx2=d2[Asin x]/dx2+d2[Bcos x]/dx2

=A・d2[sin x]/dx2+B・d2[cos x]/dx2
=-Asin x-Bcosx =-(Asin x+Bcos x)

となって、これはAsin x+Bcos xを2回微分すると元の関数の-1倍になるということで、考えていた微分方程式の解になっている。 つまり、d2f(x)/dx2=-f(x)の解は、

f(x)=Asin x+Bcos x

ということである。

積分方程式になっても考え方は同じである。 積分方程式とは、積分を使って関数を定義する方程式だが、積分をなくせばいいのだから、基本的には微分することを考える。 例えば、

xcf(t)dt=x2/2+C

という積分方程式があれば、f(x)としてf(x)=xを考えれば当てはまる。 これは、

d[∫xcf(t)dt]/dx=d[x2/2+C]/dx

=x

となることから分かる。 このように積分方程式を解くには微分すればいい。

このようにどんどん複雑な微分方程式や積分方程式を考えていくと、微分と積分が入り組んだ複雑な方程式や、とても積分を実行できないような複雑な微分方程式などに出会う。 例えば、

df(x)/dx=[ecos x+x・log f(x)]/[f(x)2-sin x]

のような、ものすごく複雑怪奇な微分方程式なども考えることができる。 こんな複雑な微分方程式を積分を実行して解くことはとてもできそうにないし、あてずっぽうに解を探して行っても、とても見つかりそうにない。 しかしこのような方程式を考えることはできるし、この微分方程式によって関数を定義することが、確かにできる。 関数を定義することができれば、それがどのような関数なのか具体的には分からなくても、その数学的な性質を調べることはできるし、様々な用途で使うことができる。 このように、微分や積分といった手続きを通して関数を定義することができる。

もどる
inserted by FC2 system