So-net無料ブログ作成

シグモイド関数が凄く便利です。 [プログラミング]

Sigmoid Function_SS_(2016_11_03)_1_resized_1 2つのシグモイド関数の和を表したグラフ。 表計算ソフトウェアのLibreOffice Calcのスクリーンショット画像である。 グラフの左寄りの一部が縦軸方向で0近くまで窪んでいる。
https://c2.staticflickr.com/6/5744/30743914875_63e44f7b51_o.png
これはオープン ソースで無償の表計算ソフトウェアである " LibreOffece Calc " で作成した、2つの " シグモイド関数 " の和のグラフのスクリーンショット画像です。

->->
[2016年11月16日追記]
記事内容を更新致しました。
<-<-

私がブログに掲載している、 " HTML5 インタラクティヴ アート " の中で、80[Hz]付近の低周波数領域の音だけ音の終わりの方で徐々に周波数を下げて行く処理が施してあります。
その際、特定の領域にだけ左右非対称な形の滑らかな曲線による重み付けをする為の係数を計算させる必要がございました。

ブログ記事: リズム演奏機能を追加致しました。
http://crater.blog.so-net.ne.jp/2016-11-16

大抵の場合、滑らかな曲線による重み付けの為の係数は、sine関数などの三角関数で事足りるのですが、今回はグラフが左右非対称の形状かつ、1箇所の窪んだ領域以外はほぼ一定の値にする必要があり、これを周期関数である三角関数で記述しようとすると条件分岐で定義域を区切ったり周波数を計算したりと煩雑になってしまいます。
ところが、これをシグモイド関数で求めると非常に簡単に出来るのです。

yの値が0から1までに収まり、80[Hz]付近が窪んだ形になるxの関数として次のような式を使用致しました。
(後日、プログラム中で使用する式の形は変更致しました。)
y =
 (1 / (1 + Math.pow( Math.E, - 0.08 * (x - 160))))
 + (1 / (1 + Math.pow( Math.E, - 0.2 * (40 - x))));

ここで、 " Math.E " は自然対数の底でもあるネイピア数を返します。
冪乗は " Math.pow( base, exponent ) " となります。

独立変数xについてのシグモイド関数yはゲインをaとすると次の式で表されます。
y = (1 / (1 + Math.pow( Math.E, - a * x)));


私はこの曲線に1を加えて、更に係数を乗じた上で、これの逆数を時刻を表す変数に掛け合わせました。
そしてその値を各時刻毎に正弦波を表す関数内の時刻の値から減算する事により、一部の低周波数領域に於いて時間経過と共に周波数が下がって行く処理を実装致しました。

皆様も是非、シグモイド関数を御活用なさってみて下さい。

オンライン百科事典 "Wikipedia" の "シグモイド関数" のページのURL:
https://ja.wikipedia.org/wiki/シグモイド関数

オンライン百科事典 "Wikipedia" の "ロジスティック方程式" のページのURL:
https://ja.wikipedia.org/wiki/ロジスティック方程式

->->
[2016年11月4日追記]
シグモイド関数も含めて様々な曲線を持つ、プログラミングに役立つ関数を紹介してくれているウェブページへのリンクを掲載させて頂きます。

"東京工業大学 ロボット技術研究会" の記事 "簡単・便利な関数" のURL:
http://titech-ssr.blog.jp/archives/1046417061.html
<-<-

nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

トラックバック 0