ホームC言語Tips集数学 ≫ シグモイド関数を計算する

C言語Tips集 - シグモイド関数を計算する

C言語にはシグモイド関数を計算する関数やマクロはありません.したがってプログラマが自らシグモイド関数を求める必要があります.

シグモイド関数は以下の式で求められます.

シグモイド関数

ここでα(アルファ)はゲイン(sigmoid gain)です.

上記の式を C言語で実装すると以下のようになります.

/**
 * シグモイド関数を計算する
 * @param[in] gain ゲイン(標準シグモイド関数の場合は1を指定)
 * @param[in] x 値
 * @return シグモイド関数の計算値
 */
double sigmoid(double gain, double x) {
    return 1.0 / (1.0 + exp(-gain * x));
}

C言語サンプルプログラム

以下にシグモイド関数を計算するサンプルプログラムを示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* functions */
double sigmoid(double gain, double x);

/* main */
int main(void) {
    double x = -10.0;

    while (x <= 10.0) {
        printf("%.2f\t%10.8f\n", x, sigmoid(1.0, x));
        x = x + 1.0;
    }

    return EXIT_SUCCESS;
}

/**
 * シグモイド関数を計算する
 * @param[in] gain ゲイン(標準シグモイド関数の場合は1を指定)
 * @param[in] x 値
 * @return シグモイド関数の計算値
 */
double sigmoid(double gain, double x) {
    return 1.0 / (1.0 + exp(-gain * x));
}

実行例

サンプルプログラムの実行結果は以下のようになります.

-10.00  0.00004540
-9.00   0.00012339
-8.00   0.00033535
-7.00   0.00091105
-6.00   0.00247262
-5.00   0.00669285
-4.00   0.01798621
-3.00   0.04742587
-2.00   0.11920292
-1.00   0.26894142
0.00    0.50000000
1.00    0.73105858
2.00    0.88079708
3.00    0.95257413
4.00    0.98201379
5.00    0.99330715
6.00    0.99752738
7.00    0.99908895
8.00    0.99966465
9.00    0.99987661
10.00   0.99995460

上記の結果をgnuplotで表示すると以下のようになります.

シグモイド関数