C++程式計算給定數字的對數伽馬


在數學中,伽馬函式被描述為對每個給定數字的階乘的擴充套件。另一方面,階乘只能為實數定義,因此伽馬函式擴充套件到計算除負整數以外的所有複數上的階乘。它由 - 表示

$$\mathrm{\Gamma \left ( x \right )=\left ( x-1 \right )!}$$

對於較高的值,伽馬函式增長很快;因此,對伽馬函式應用對數將大大降低其增長速度。特定數字的自然對數伽馬是它的另一個名稱。

在本文中,我們將瞭解如何在 C++ 中計算給定輸入數字 x 的伽馬函式的對數。

使用 lgamma() 函式計算對數伽馬

C++ 的 cmath 庫有一個 lgamma() 函式,它接受一個引數 x,然後執行 gamma(x) 並對該值應用自然對數。使用 lgamma() 的語法如下所示:

語法

#include < cmath >
lgamma( <number> )

演算法

  • 讀取一個數字 x
  • res := 使用 lgamma( x ) 計算對數伽馬
  • 返回 res

示例

#include <iostream>
#include <cmath>
using namespace std;
float solve( float x ){
   float answer;
   answer = lgamma( x );
   return answer;
}
int main(){
   cout << "Logarithm Gamma for x = 10 is: " << solve( 10 ) << endl;
   cout << "Logarithm Gamma for 15! which is x = 16 is: " << solve( 16 ) << endl;
   cout << "Logarithm Gamma for x = -1.2 is: " << solve( -1.2 ) << endl;
   cout << "Logarithm Gamma for x = 3.1415 is: " << solve( 3.1415 ) << endl;
}

輸出

Logarithm Gamma for x = 10 is: 12.8018
Logarithm Gamma for 15! which is x = 16 is: 27.8993
Logarithm Gamma for x = -1.2 is: 1.57918
Logarithm Gamma for x = 3.1415 is: 0.827604

使用 gamma() 和 log() 函式

C++ 還提供用於伽馬的 tgamma() 方法和 log() 函式。我們可以使用它們來制定 lgamma()。讓我們看看演算法以獲得更清晰的認識。

演算法

  • 讀取一個數字 x
  • g := 使用 tgamma( x ) 計算伽馬
  • res := 使用 log( g ) 計算對數伽馬
  • 返回 res

示例

#include <iostream>
#include <cmath>
using namespace std;
float solve( float x ){
   float answer;
   float g = tgamma( x );
   answer = log( g );
   return answer;
}
int main(){
   cout << "Logarithm Gamma for x = 10 is: " << solve( 10 ) << endl;
   cout << "Logarithm Gamma for 15! which is x = 16 is: " << solve( 16 ) << endl;
   cout << "Logarithm Gamma for x = -1.2 is: " << solve( -1.2 ) << endl;
   cout << "Logarithm Gamma for x = 3.1415 is: " << solve( 3.1415 ) << endl;
}

輸出

Logarithm Gamma for x = 10 is: 12.8018
Logarithm Gamma for 15! which is x = 16 is: 27.8993
Logarithm Gamma for x = -1.2 is: 1.57918
Logarithm Gamma for x = 3.1415 is: 0.827604

使用 factorial() 和 log() 函式

在最後一個示例中,我們已經看到了 tgamma() 和 log() 方法的使用。我們可以定義我們自己的 factorial() 函式,但這隻接受正數。讓我們看看演算法以更好地理解。

演算法

  • 定義階乘函式,它將接收 n

  • 如果 n 為 1,則

    • 返回 n

  • 否則

    • 返回 n * factorial ( n - 1 )

  • 結束 if

  • 在主方法中,取一個數字 x 以找到 x 的對數伽馬

  • g := factorial( x - 1)

  • res := 使用 log( g ) 查詢 g 的自然對數

  • 返回 res

示例

#include <iostream>
#include <cmath>
using namespace std;
long fact( int n ){
   if( n == 1 ) {
      return n;
   } else {
      return n * fact( n - 1);
   }
}
float solve( float x ){
   float answer;
   float g = fact( x - 1 );
   answer = log( g );
   return answer;
}
int main(){
   cout << "Logarithm Gamma for x = 10 is: " << solve( 10 ) << endl;
   cout << "Logarithm Gamma for 15! which is x = 16 is: " << solve( 16 ) << endl;
   cout << "Logarithm Gamma for x = -1.2 is: " << solve( -1.2 ) << endl;
}

輸出

Logarithm Gamma for x = 10 is: 12.8018
Logarithm Gamma for 15! which is x = 16 is: 27.8993
Segmentation fault (core dumped)

結論

伽馬方法有時被稱為階乘方法的擴充套件。由於伽馬或階乘方法增長得如此之快,我們可以對其使用對數。在本文中,我們已經看到了幾種對給定數字 x 執行對數伽馬的技術。最初,我們使用了預設函式,即來自 C++ 中 cmath 庫的 lgamma()。第二種方法是使用 tgamma() 和 log(),最後定義我們自己的階乘方法。但是,最後一種方法僅限於正數。它不適用於負數。並且它只對整數執行良好。

更新於: 2022年12月7日

378 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告