C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のcmathヘッダーで誤差関数(erf)を使って確率を求める方法

変数が与えられ、その変数の確率をC++のSTLで利用できる誤差関数を使って求めるのが本記事のテーマです。この関数はC++のcmathヘッダーファイルに含まれており、C++11以降では標準機能としてstd::erfが提供されています。

誤差関数とは?

数学における誤差関数は「ガウス誤差関数」とも呼ばれ、erf()で表されます。確率論、統計学、偏微分方程式などの分野で、発生しうる誤差を計算するために用いられる特殊関数です。定義は次のとおりです。

誤差関数には、密接に関連する以下の2つの関数があります。

  • 相補誤差関数: erfc x = 1 - erf x と定義されます。
  • 虚数誤差関数: erfi x = -ierf(ix) と定義されます(ただし i は虚数単位)。

erf(x)の戻り値は -1 から 1 の範囲に収まり、x の値が大きくなるほど 1 に近づいていきます。この性質を利用して、正規分布に従う変数の確率計算などに活用されます。

使用例

入力

i = 2.25

出力

erf(i) すなわち 0.998537

入力

i = 1.25

出力

erf(i) すなわち 0.9229

サンプルコード

#include <iostream>
#include <cmath>
using namespace std;
double probab(double i){
    double probab_1 = erf(i);
    return probab_1;
}
int main (){
    double i = 2.25;
    cout<<"Probability is :"<<probab(i)<< endl;
    return 0;
}

出力

Probability is : 0.998537

このプログラムでは、変数 i の値を関数 probab() に渡し、その内部でerf(i)を呼び出して確率を計算しています。結果として、2.25に対して0.998537という確率が得られます。

別の例

#include <iostream>
#include <cmath>
using namespace std;
double probab(double i){
    double probab_1 = erf(i);
    return probab_1;
}
int main (){
    double i = 1.25;
    cout<<"Probability is :"<<probab(i)<< endl;
    return 0;
}

出力

Probability is : 0.9229

このように、cmathヘッダーに含まれるerf()関数を使えば、複雑な数式を自前で実装することなく、簡単に誤差関数に基づく確率計算を行うことができます。

  1. C / C++(3.5)関数の基礎:宣言・定義・引数を徹底解説

    関数は機械のようなものです。機械は入力を受け取り、それを処理して出力を生成します。同様に、関数も値を受け取り、その値に対して何らかの操作を行い、結果を出力します。機械が動き出すには人が手動で入力を与える必要があるように、関数もプログラマーによって呼び出されたときに初めて実行されます。関数は言語によって呼び名が異なる場合がありますが、次の2つの共通した特徴を持っています。処理すべき命令文のシーケンス(一連の命令)を含んでいるその命令群は名前で識別され、その名前が関数を参照するなぜ関数を使うのか?再利用性 − 同じ機能を複数の場所で使いたい場合、同じ処理を何度も書くのではなく、一度だけ関数を作成し

  2. C++とOpenCVで画像を読み込んで表示する方法を徹底解説

    この記事では、C++でOpenCVを使用して画像を読み込み、表示する方法について詳しく解説します。OpenCVで画像の読み込みや表示を行うには、以下のような関数やデータ構造が必要になります。 画像処理に必要な基本要素 Mat(マトリクス) Matは関数ではなく、データ構造の一種である変数型です。C++におけるint型やchar型、string型のように、MatはOpenCV独自の変数型であり、画像を格納するための行列(マトリクス)データ構造を作成します。プログラム内で「Mat myImage;」と記述した場合、「myImage」という名前の行列変数を宣言していることになります。 name