2024年09月07日

一日一項目 よっしゃぁ

∑(1/n) n = 1 ~ ∞。Limit(1/n) –> 0, n –> ∞ なので無限大では項の値が0になるのだから収束するはずだ・・・・と考えた次第であるが数学屋の屁理屈では収束しない。
では実際に計算してみるとどういう値がでるか。
Pythonでは numbaの jitを使うとJITコンパイラが機能して高速化できると知ったので試しですね。

import time
from numba import jit

@jit
def series_sum(num_max):
    sum = 0
    for n in range(1, num_max + 1):
        sum += 1 / n
    return sum

まうこんな感じ。確かに高速でしたわ。パチパチ。で1億から20億まで計算してみた。
image

横軸は ×億 ですね。Excelでそれ表示するの調べるの面倒なのでそのまんま。
1億で 19ぐらい。20億で22ぐらい。収束はしていないが、こういうのも発散というらしいぞ。

ところで∑(1/n)は近似式が求められていて ≒ ln(n) + 0.57721 である。自然対数ですね。
この計算と上の計算でどのぐらい合うのか・・・・
image

EがPython計算結果、Fが近似式の結果。小数点以下4桁まで一致しているではあーーーりませんか。ま~。
∑(1/n) ≒ ln(n) + 0.57721 この定数はオイラー・マスケローニ定数というらしいぞ。今日は雑学収集ですぜ。ま~そういう雑学が いつの日か教養に転化することを願いつつ!!

ちなみに計算時間は20億まで90秒ぐらい。すると200億まで900秒ですね。2000億まで9000秒ですから2.5時間ですね。2兆までだと25時間ですね(笑)
DELL OPTIPLEX 7010SFF Win 11 23H2(非推奨PC)で。ただし途中結果も画面表示するようにしているので時間食うので表示なしにすればもっと短縮は可能だろけどねえ。

ただ、C言語で計算したときに int n では不足で long long int を使ったのだけどPythonだとここらは自動的に64bit整数として処理するのかどうかは・・・・知らん。あとで試そうっと。

さっきchatGPT3.5先生に訊いたらPythonは自動で調整するってさ。するとPythonの場合には64bit整数を超えても自動でさらに拡大するってのか? 
うむ。後で調べよう。つーか、チャッターズに訊くだけね(笑)

PythonはJITで高速化できると知った次第である。これ便利。他にもPyPyとか高速化手法はあるようだけど @jit が最も簡単ですわ(あくまでもワタクシの場合であるぞの)
  つーか、初めからc/c++で書けば良いがな。高速化を望むならば・・・・ そだねえ。

いやいや、同じ処理を異なるコンピュータ言語でやってみる。
そういうところに何か面白さを見出すならば人生が少しは楽しいものになるかもなのだよ ちみぃ by 近所の塾の偽講師 だって にんげん だもの ・・・・・ だから、それなにょLaughing out loud

posted by toinohni at 10:48| 東京 ☁| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください