Skip to content

eizawa21/Gauss_Legendre_algorithm_for_C_Plus_Plus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 

Repository files navigation

ガウス=ルジャンドルのアルゴリズムによる円周率計算

このリポジトリには、ガウス=ルジャンドルのアルゴリズムを使用して円周率 $\pi$ を計算するC++の実装が含まれています。

このアルゴリズムは、高精度な円周率の近似を得るための反復的手法です。

また平方根の計算部分は、ニュートン法を利用した自作関数による数値計算を実行しています。

アルゴリズムの概要

ガウス=ルジャンドルのアルゴリズムは、以下の初期条件から始まります:

  • $a_0 = 1$
  • $b_0 = \frac{1}{\sqrt{2}}$
  • $t_0 = \frac{1}{4}$
  • $p_0 = 1$

反復の各ステップでは、次の式を使用して値を更新します:

  1. $a_{n+1} = \frac{a_n + b_n}{2}$
  2. $b_{n+1} = \sqrt{a_n b_n}$
  3. $t_{n+1} = t_n - p_n (a_n - a_{n+1})^2$
  4. $p_{n+1} = 2 p_n$

円周率の近似値は、次の式で計算されます:

$\pi_{n+1} = \frac{(a_{n} + b_{n})^2}{4 t_{n}}$

この反復を十分な回数行うことで、非常に高精度な円周率の近似が得られます。

コードの説明

myfunc 関数

二次関数 $x^2 - n$を計算する関数です。数値的な平方根計算に使用します。

myderivative 関数

関数 $f(x) = x^2 - n$ の導関数を計算します。これは、ニュートン法で平方根を計算する際に必要です。

mysqrt 関数

自作のニュートン法を利用して平方根を計算します。初期値から反復を行い、収束条件を満たすまで計算を続けます。

このアプローチにより、高精度な平方根の計算が可能です。

ニュートン法

ニュートン法(Newton's method)は、非線形方程式の根を求めるための反復的な数値解法です。

この方法は、関数の接線を利用して根の近似値を更新することで、迅速に解を見つけることができます。

アルゴリズムの概要

  1. 初期推定値 $x_0$を選ぶ。
  2. 以下の式を用いて次の近似値を計算する。

$f'(x_0) = \frac{f(x_0)}{(x_0 - x_1)}$

$f'(x_0) (x_0 - x_1) = f(x_0)$

$f'(x_0)x_0 - f'(x_0)x_1 = f(x_0)$

$f'(x_0)x_1 = f'(x_0)x_0 - f(x_0)$

$x_{1} = x_0 - \frac{f(x_0)}{f'(x_0)}$

ここで、 $f(x)$ は解きたい方程式の関数であり、 $f'(x)$ はその導関数です。

  1. 収束条件(例えば、 $x_{n+1} - x_n < \epsilon$ ここで $\epsilon$ は許容誤差)を満たすまで、手順2を繰り返す。

ニュートン法の特徴

  • 収束性: 初期値が解に近い場合、ニュートン法は非常に高速に収束します。通常、収束速度は二次です。
  • 適用範囲: 多くの非線形方程式に対して適用可能ですが、初期値によっては収束しない場合もあります。
  • 必要な情報: 関数とその導関数が必要です。

例えば、方程式 $f(x) = x^2 - 2$ の根を求める場合:

この方程式xの解が得られればそれが $\sqrt{2}$ の解の近似値になっています。

gauss_legendre_argo 関数

ガウス=ルジャンドルのアルゴリズムを実装し、円周率を計算します。反復のたびに中間結果を表示し、最終的な円周率の近似値を返します。

使用方法

このコードをコンパイルして実行することで、円周率の近似値を得ることができます。コンパイルにはC++のコンパイラを使用してください。

下記の例では、gccコンパイラによるLinux環境を想定しています。

g++ -o gauss_legendre_argo gauss_legendre_argo.cpp
./gauss_legendre_argo

About

Iterative mathematical algorithm used to calculate pi

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages