双曲線と対数そして積分

2015/10/17 & 12/27

    

 ネイピアによって具体的な姿をみせた対数が、実は双曲線と密接に関連することが発見された。

 舞台は17世紀の欧州、登場人物はヴィンセント(1584〜1667、ベルギーの司祭)と、ニュートン(1642〜1727、イングランドの自然科学者)である。

 参考にした図書は下記。

 「数学という学問T 〜 概念を探る」(志賀 浩二 著、筑摩書房 2011年)

 この図書では、具体的な数値を持つ出して実際に計算してみるというよりは、xとかyとかkといった記号と図を用いた抽象的な解説に重きが置かれているように思う。それだと素人の私には難しい面があるので、実際に計算して咀嚼・納得するよう試みた。

 なお、記事の中でrubyプログラムを掲げているが、精度の高い計算を行うためのBigDecimalの使い方に不十分な点があったので、2015/12/27に街頭箇所を書き換えた。

    


《目次》


    

1. 双曲線に潜む等比数列と等差数列

 数学でよく用いるx,y座標を思い浮かべてほしい。x軸が横軸、y軸が縦軸で、それが直行している。

 この中に y=1/x のグラフを描くと双曲線になる。xが1のとき、yも1になるが、その点 (1, 1) よりも右側で、かつ、下側の領域に着目する。xが大きくなるにつれてyがどんどん0に近づいていく。

    

(1) 双曲線の下側の長方形にみられる規則

 今、xの値が 1, 2, 4, 8, 16, 32 のように増えるものとする。2を掛けると次の値になる形、つまり等比数列だ。これらxの値に対応するyの値は 1, 1/2, 1/4, 1/8, 1/16, 1/32 となる。

    

 とりあえず、xが1〜2の区間に注目してみよう。この区間で双曲線の下側に長方形を設ける。x軸上の1の地点、同じくx軸上の2の地点、その2の地点を真上に延ばして双曲線とぶつかった地点(y=1/2の地点)、この3つの地点を頂点に持つ長方形を考える。もう1つの頂点は、x軸上にも双曲線上にもない中途半端な位置になるが、それは気にしないことにする。

 1つの点を (x, y) で表現すると、(1, 0) (2, 0) (2, 1/2) (1, 1/2) の4つの点を頂点に持つ長方形ということになる。

 この長方形は、高さが1/2、底辺の長さが 2-1=1 なので、その面積は 1/2 * 1 = 1/2 となる。

    

 次に、xが2〜4の領域に注目する。ここにも同じように長方形を設ける。その長方形は、高さ 1/4、底辺の長さは 4-2=2 になるので、その面積は 1/4 * 2 = 1/2 である。先の1〜2の区間の長方形と同じ面積だ。

 4〜8の区間、8〜16の区間、16〜32の区間についても、その長方形の面積を調べると、同じ 1/2 になる。

 xの値が等比数列になっている場合、xの値をどんなに大きくしても、双曲線との間に設ける長方形の面積は、常に 1/2 と変わらない。つまり、xの値が等比数列であれば、双曲線の下に設ける長方形の面積は、等差数列になる。

    

(2) より細かな長方形にしてみると

 しかし、「長方形の面積が等差数列になるからといって、それがどうしたの?」という感じがしないでもない。上で述べた長方形は、x軸と滑らかな双曲線との間にできる領域の面積そのものではない。滑らかな領域と長方形との間にはかなり隙間がある。そこで、ヴィンセントは、その隙間をなるべく小さくするよう次のように考えた。

    

 再び、xの値が1〜2の区間に着目しよう。この区間を10等分する。つまり 1〜1.1, 1.1〜1.2, 1.2〜1.3, …… 1.9〜2 に分割する。これら小さな区間の右側の値に対応するyの値は、それぞれ 1/1.1, 1/1.2, 1/1.3, …… 1/1.9, 1/2 になる。

 この10等分した区間と双曲線の間に設ける小さな長方形は、底辺の長さが常に 0.1、高さは各々 1/1.1, 1/1.2, 1/1.3, …… 1/1.9, 1/2 となる。

 最初の小さな長方形の面積は 0.1 * 1/1.1 = 0.1/1.1 = 0.09090909…… の循環小数だ。

 その右隣の小さな長方形の面積は 0.1/1.2 = 0.08333333…… という、3がずっと続く小数である。

 この10等分した小さな長方形の面積をすべて足し合わせると、0.090909 + 0.083333 + 0.076923 + 0.071429 + 0.066667 + 0.0625 + 0.058824 + 0.055556 + 0.052632 + 0.05 = 0.6687714032 となる。

 この総和の値 0.6687714032 は、10等分する前の大きな長方形の面積 1/2 = 0.5 に比べると増えている。大きな長方形よりも、滑らかな領域の面積に近づいたといえる。完全ではないにしても隙間が埋められた。

    

 今度は、xの値が2〜4の区間をみてみよう。この区間も10等分する(20等分ではない)。2〜2.2, 2.2〜2.4, 2.4〜2.6, 2.6〜2.8, 2.8〜3.0, …… 3.8〜4 に分割する。

 分割された小さな長方形の面積は、底辺の長さが常に 0.2 で、高さは各々 1/2.2, 1/2.4, 1/2.6, …… 1/3.8, 1/4 である。

 最初の小さな長方形の面積は、0.2 * 1/2.2 = 0.2/2.2 = 0.0909090909090909 となる。この値は、区間1〜2の最初の小さな長方形の面積と同じだ。

 考えてみれば当たり前で、0.2/2.2 というのは、分子と分母を2で割ると 0.1/1.1 になる。これは、区間1〜2の最初の小さな長方形の面積の計算式そのものである。

 同じ理屈で、右隣の2番目の小さな長方形の面積は 0.2/2.4 = 0.1/1.2 = 0.083333 である。

 となると、容易に予想できるとおり、区間1〜2、区間2〜4、区間4〜8 …… の小さな長方形の面積の総和は、いずれも 0.6687714032 になる。

    

 上では 10等分のケースを計算してみたが、これを100等分、1000等分と細かくしていけばいくほど、双曲線との間にできる滑らかな領域の面積に近づいていく。隙間がどんどん小さくなっていく。

 ヴィンセントは、n等分のnの値を極限まで大きくするという発想はなかったようだが、「xの値が等比数列の形で増えていくとき、x軸と双曲線の間の面積が等差数列の形で増えていく」ということを見抜いた。

    

(3) 双曲線の下側の面積に関する一般化

 これまでは 1, 2, 4, 8, 16, 32 のように2倍・2倍と増える等比数列を取り上げたが、1, 3, 9, 27, 81, …… のように3倍・3倍で増えるケースについても同じことがいえる。

 等比数列の2倍とか3倍を一般的にk倍とすると、細かく分割する前の大きな長方形の面積は、各々の区間で (k-1)/k になる。2倍の場合は 1/2、3倍の場合は 2/3 である。

 また、xの初期値が1でなくてもよい。2でも3でも4でも、任意の値aについて、分割前の大きな長方形の面積は (k-1)/k になる。

 xの値が a*k^0, a*k^1, a*k^2, …… a*k^(n-1), a*k^n という等比数列になっている場合、最後の区間の大きな長方形は、高さが 1/(a*k^n) であり、底辺の長さは a*k^n - a*k^(n-1) = a * (k-1) * k^(n-1) である。

 この高さと底辺の長さを掛け算すると、(a * (k-1) * k^(n-1)) / (a * k^n) = (k-1) * k^(n-1) / k^n = (k-1/k となる。この値は、どの区間についても当てはまる。

 ヴィンセントは、このようにして等比数列と等差数列(長方形の面積)の関係を一般化して示した。等比数列と等差数列を対応づけるのは対数である。となると、対数と双曲線が密接にかかわっていることになる。

 「志賀2011」によれば、ヴィンセントは、「与えられた円と同じ面積を持つ正方形を作図する」という問題を解いたと考え、1630年ころローマの教壇に論文として提出したという(1647年に正式に刊行)。その中に双曲線に関する洞察が含まれていた。作図問題は実は解けていなかったが、双曲線に関する洞察は重要な道しるべとなった。

    

 xが等比数列であるなら x = k^n の形で表現できる。ここでは簡単のため、x = a*k^n でなく x = k^n としておく。xのスタートの値は k^0 = 1 である。

 今、双曲線の下側の面積をxの値に応じて変化する関数 f(x) と置く。すると、ヴィンセントが見いだした規則は次の式で表現できる。

    f(k^n) - f(k^(n-1)) = f(k^1) - f(k^0) = f(k) - f(1) = f(k)
    f(k^2) = f(k) + f(k)
    f(k^3) = f(k) + f(k) + f(k)
    f(k^n) = n * f(k)
    f(k^n * k) = n * f(k) + f(k)
    f(x * k) = f(x) + f(k)
    f(x / k) = f(x) - f(k)

 関数 f(x) は、その中身の詳細は分からないが、掛け算を足し算に、また、割り算を引き算に変換する機能を備えているといえる。

 ちなみに、f(1) というのは、xがスタート地点である時の面積だから0である。

    


2. 双曲線の級数展開と積分

 ニュートンは、このヴィンセントの洞察を知っていたらしい。その上で、y=1/(1+x) という双曲線を持ち出すことによって、滑らかな領域の面積をどこまでも追求する方法を思考した。

 1/(1+x) において、x=0.1 の場合、つまり 1/1.1 を計算すると、0.909090909090909…… という循環小数になる。この計算をxという変数を用いて展開させる方法はないだろうか。

    

(1) 1/(1+x)の級数展開

 1/(1+x) というのは、分子の方にどこからかxを借りてくれば、(1+x)/(1+x) = 1 となる。しかし、借りてきたものは後で返さなければならない。足したら引くという、つじつま合わせが必要だ。となると、1/(1+x) = 1 - x/(1+x) と書くことができる。

 では、つじつま合わせのために生じた x/(1+x) をどう考えたらいいだろうか。もし分子の方にどこからか x^2 を借りてくれば、(x+x^2)/(1+x) = x*(1+x)/(1+x) = x となる。つまり x/(1+x) というのは、x - x^2/(1+x) である。

 ではでは、x^2/(1+x) がどうなるか。同じように考えると、x^2/(1+x) = x^2 - x^3/(1+x) である。この成り行きは、どこまでも繰り返される。

 ややこしいが、結局、1/(1+x) は次のように展開できる。

    1/(1+x) = 1 - x + x^2 - x^3 + x^4 - x^5 + x^6 ……

    

 1/x という静かな湖面に、わざと石を投げ込んで、細波をたてるような感じに似ている。石を投げ込むというのは、いうまでもなく分母にわざわざ1を加えて 1/(1+x) にすることである。

 ただし、xが1の場合は、せっかくの展開式も 1 - 1 + 1 - 1 + 1 - 1 + 1 …… となって、実践的な計算には意味をなさない。

 容易に想像できるとおり、xが1以上の時は、この展開式が終息しない。xが1を超えると、細波どころか、どんどん大波が荒れ狂う形になってしまう。

 展開式が意味を持つのは、xが1未満の時だ。正確には、xの絶対値が1未満の時である。すなわち -1 < x < 1 の時に限って、この展開式が実践的な計算の上で意味を持つ。そうした制約条件はあるが、この展開式には容易に積分できるというメリットがある。

    

 ちなみに、1/(1-x) を級数展開すると、下の形になる。考え方は 1/(1+x) の場合と同じ。

    1/(1-x) = 1 + x + x^2 + x^3 + x^4 + x^5 + x^6 + ……

 プラスとマイナスが交互に出てくるのでなく、各項を常にプラスする形である。展開式としてはこちらの方がすっきりしている。

    

(2) 展開式の積分

 級数展開したものを積分した結果は、下のような新たな展開式になる。

    x - x^2/2 + x^3/3 - x^4/4 + x^5/5 - x^6/6 ……

 積分すると、なぜ上のような式になるのかは省略するが、ニュートン以前から、x^n を積分すると x^(n+1) / (n+1) となることが知られていたという。

    

 うんと簡単な積分(面積の算出)の例を2つだけ上げてみよう。

 y=1 というグラフがある。xがどんな値であれ、yが1だという意味である。これは、x軸と平行な直線になる。このグラフとx軸との間に生成される領域(常に高さが1の長方形)の面積は、xが1の時には1(正方形)、xが2の時には2、xが3の時は3である。面積は、単純にxに比例する。

 面積をyとして、それをxで表現するなら y=x である。つまり、y=1 を積分したら y=x になったといえる。

    

 今度は y=x の積分を考えてみよう。これをグラフとして描くと、(0, 0) の原点から斜めの直線が右上の方向に延びる。原点のところの角度は45度だ。

 この斜線とx軸との間の領域(直角三角形)の面積は、xが1の時は 1*1/2=1/2、xが2の時は 2*2/2=2、xが3だと 3*3/2=4.5 などとなる。

 面積をyとして、それをxで表現すると y=x^2/2 である。つまり、y=x を積分した結果は y=x^2/2 だといえる。

 y=x^2 を積分する場合については簡単にいかないが、y=x^n を積分すると y=x^(n+1) / (n+1) になりそうな感触は何となく得られるのではないだろうか。

    

 y=1/(1+x) の積分に話を戻そう。

 ニュートンは、この積分した結果を A(1+x) と表現したようだが、今の言い方でいうと自然対数 log(1+x) のことである。改めて記すと次のとおり。

    log(1+x) = x - x^2/2 + x^3/3 - x^4/4 + x^5/5 - x^6/6 ……

    

(3) 積分した結果の具体的な計算

 参考図書の「志賀2011」によれば、1667〜68年ころ、ニュートンは、先の展開式などを用いて log(2) と log(10) を57桁まで算出していたというから凄い。だが、どのように計算したのだろうか。

 log(2) を計算するためには log(1+x) のxに1を代入して計算すればよさそうな感じがするが、それで大丈夫だろうか。大丈夫な感じもするが、かなり不安が残る。

 では、log(10) を求めるためにxを9として計算する場合はどうだろう。「これは駄目だ」というのがぴんとくる。展開式が収束しない。ではどうするか。

    

 ここで対数の性質が救世主のように立ち現れる。少なくとも、素人の私にはそのように感じられる。

 log(2) = -1 * log(1/2) が成り立つ。なので、log(2) を求めるには log(0.5) を計算して、最後に -1を掛けてやればいい。log(0.5) を計算するには、log(1+x) のxに -0.5 を代入すればいい。これだと確実に収束する。

 log(10) の場合は log(1/10) を計算すればいいので、xを -9/10 = -0.9 として計算する。

 なんとも都合のいい話に聞こえるが、パソコンで実際に計算してみると、それらしい値がちゃんと算出される。

    

 対数には log(1) = 0 という性質がある。また、掛け算を足し算に置き換える機能を内包している。そのため下の式が成り立つ。

    log(1) = log(2 * 1/2) = log(2) + log(1/2) = 0

 上のことから log(2) = -1 * log(1/2) が導き出せる。

    

 上に書いたことを実験してみる意味合いで、log(2) を計算するプログラムを書いてみた。用いたのはrubyというプログラム言語。

 xに-0.5を代入して計算すると、確かに log(2) に酷似する値が得られる。

 第180項まで計算するが、なるべく有効桁数を多くするため、rubyに用意されているBigDecimalクラスを利用した。

 念のためプログラムの最後で、BigMathのlog関数による log(2) の値も表示している。

 両者を比較すると、57桁くらいまで一致する。180項を200項まで増やして計算すると、64桁くらいまで一致。

 ニュートンは小数点以下57桁まで計算したらしいが、そんなに多くの項を計算したのだろうか。もちろん、単純に計算したのでなく効率的にするための工夫をこらしたのだとは思うが……

    

  −−−−−−−− ここから
  require "bigdecimal"
  require "bigdecimal/math"
  dlen = 100
  x = BigDecimal.new("-0.5")
  sum = BigDecimal.new("0.0")
  for i in 1..180
    m = x.power(i).div(i, dlen)
    if (i % 2) == 0
      sum = sum.sub(m, dlen)
    else
      sum = sum.add(m, dlen)
    end
  end
  bin_log2 = sum * -1
  log2 = BigMath::log(2, dlen)
  printf("log2 (by binomer):\n%s\n\n", bin_log2.to_s("F"))
  printf("log2 (by BigMath):\n%s\n", log2.to_s("F"))
  −−−−−−−− ここまで

    

 上は、1/(1+x) の積分の展開式に即して計算している。そのため、各項をプラスするケースとマイナスするケースが交互に出てくる。少々煩わしい。

 その点、1/(1-x) の積分の展開式を使えば、xに-0.5でなく0.5を代入すればよく、かつ、各項を常にプラスすればいいことになる。更に、最後に -1 を掛ける必要もない。

 どちらの方法でも実質的に同じ処理をしているわけだが、1/(1-x) に関する展開式を用いる方がすっきりした形になる。

    

 ここまで書いてきて、それなりに納得できる感じはあるが、釈然としない気分も残る。

 log(10) を求めるのに、x=9 とすれば大波の嵐になり、x=-0.9 とすれば、次第に静まる細波になる。大波と細波は、裏でちゃんと結びついているはずだが、それが実感として腑に落ちない。

 しかし、これくらいでまごまごしていては、数学の門をくぐることができないということも感じられる。

    

〜 「双曲線と対数そして積分」おわり 〜

Copyright (C) T. Yoshiizumi, 2015 All rights reserved.


「数学散歩の小道」のページへ

トップページへ