このリポジトリには、ガウス=ルジャンドルのアルゴリズムを使用して円周率
このアルゴリズムは、高精度な円周率の近似を得るための反復的手法です。
また平方根の計算部分は、ニュートン法を利用した自作関数による数値計算を実行しています。
ガウス=ルジャンドルのアルゴリズムは、以下の初期条件から始まります:
$a_0 = 1$ $b_0 = \frac{1}{\sqrt{2}}$ $t_0 = \frac{1}{4}$ $p_0 = 1$
反復の各ステップでは、次の式を使用して値を更新します:
$a_{n+1} = \frac{a_n + b_n}{2}$ $b_{n+1} = \sqrt{a_n b_n}$ $t_{n+1} = t_n - p_n (a_n - a_{n+1})^2$ $p_{n+1} = 2 p_n$
円周率の近似値は、次の式で計算されます:
この反復を十分な回数行うことで、非常に高精度な円周率の近似が得られます。
二次関数
関数
自作のニュートン法を利用して平方根を計算します。初期値から反復を行い、収束条件を満たすまで計算を続けます。
このアプローチにより、高精度な平方根の計算が可能です。
ニュートン法(Newton's method)は、非線形方程式の根を求めるための反復的な数値解法です。
この方法は、関数の接線を利用して根の近似値を更新することで、迅速に解を見つけることができます。
- 初期推定値
$x_0$ を選ぶ。 - 以下の式を用いて次の近似値を計算する。
ここで、
- 収束条件(例えば、
$x_{n+1} - x_n < \epsilon$ ここで$\epsilon$ は許容誤差)を満たすまで、手順2を繰り返す。
- 収束性: 初期値が解に近い場合、ニュートン法は非常に高速に収束します。通常、収束速度は二次です。
- 適用範囲: 多くの非線形方程式に対して適用可能ですが、初期値によっては収束しない場合もあります。
- 必要な情報: 関数とその導関数が必要です。
例えば、方程式
この方程式xの解が得られればそれが
ガウス=ルジャンドルのアルゴリズムを実装し、円周率を計算します。反復のたびに中間結果を表示し、最終的な円周率の近似値を返します。
このコードをコンパイルして実行することで、円周率の近似値を得ることができます。コンパイルにはC++のコンパイラを使用してください。
下記の例では、gccコンパイラによるLinux環境を想定しています。
g++ -o gauss_legendre_argo gauss_legendre_argo.cpp
./gauss_legendre_argo