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));
}
以下にシグモイド関数を計算するサンプルプログラムを示します.
/* 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で表示すると以下のようになります.
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.