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(),最後定義我們自己的階乘方法。但是,最後一種方法僅限於正數。它不適用於負數。並且它只對整數執行良好。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP