算数 数学

ガウス関数に似た関数 update 20181104

ガウス関数とは

受験生にとって偏差値という単語はあまり響きの良いものではないでしょう。この偏差値のもとになっているのが統計の標準偏差の考え方です。個々には個性があるが、たくさん集まればその集団の特徴が見えてくる、というものです。
特徴をあらわすものとして、平均とそこからのばらつき具合があります。

 

統計では、いろいろな形の分布がでてきますが、代表的な形がガウス分布です。ガウス分布は、次で示すガウス関数で表すことができます。
y=exp(-x^2) ・・・@
これは、上に凸の単峰性の関数です。

 

この関数は使い勝手が良いので統計の分野だけではなく、いろいろな場面で使われています。そのときは、一般的な関数の形にして使います。
y=d+c*exp(-1*(b*(x-a))^2) ・・・A

 

係数a、dはx軸、y軸方向への平行移動の大きさ、係数b、cでx軸、y軸方向への伸縮の大きさを表し、いずれも0以上の実数です。
a=0、b=1、c=1、d=0、とおくと@式になります。
図に描くと次のグラフになります。

y=exp(-x^2)

y=1/(1+x^2)

次にガウス関数のように上に凸の単峰性の関数として
y=1/(1+x^2) ・・・B
が考えられます。
ここで@式とB式を見て、これらの関数がどれほど似ているのか、あるいは似ていないのかを判断してみましょう。

 

比較する関数は、
y=d+c*exp(-1*(b*(x-a))^2) ・・・A
なので、この係数を使ってB式を一般の形式にすると、

 

y=d+c/(1+(k*(b*(x-a))^2) ・・・C
という形になります。a〜dまでが共通の係数で、kの変化でガウス関数に対して比較する関数の広がり具合を調整します。関数相互の似ている関係を数字で表すとき、この数字のことを仮に相関係数と呼ぶこととします。

 

ちなみに、a=0、b=1、c=1、d=0とし、k=e−1(e:ネイピア数)とすると、A式及びC式は、x=±1でy=1/e になります。

 

2つの関数を比較する方法の一つに相互相関関数があります。
一般的な関数f(x)とg(x)の相互相関関数φfg(τ)は、

 

φfg (τ)= lim (1/(2*x)) f(x)*g(x+τ)dx
ここでlim(極限)は【x → ∞】であり、∫(積分)の範囲は【-x → x】です。

 

離散的表現の積和相互相関関数は

 

φfg (τ)=(1/n)f(xi)*g(xi+τ)
ここで煤i積和)の範囲は【i=1 → n】です。

 

相関関数の形はどうあれ、規格化された最大値の数値が着目点です。
関数の自分自身の相関は自己相関関数といいますが、規格化された自己相関関数の最大値はどの関数をとっても1になります。
つまり、規格化された相関関数の最大値が1にどれだけ近いかで関数が似ていることを表現できるとします。すなわち、
最大値での規格化相関係数は s= φfg (0)/(sqrt(φff (0))*sqrt(φgg (0)))
となります。
φfg (0)と書けるのは、A式もC式もx=0で最大値の偶関数だから、相互相関関数がτ=0で最大値を示すからです。

 

それでは、
f(x)=exp(-x^2)、
g(x)=1/(1+(k*x^2))
とおいて、x1=-3.0、x2=-2.9、・・・、x60=2.9、x61=3.0、の間の相関係数sを積和計算します。
kを変化させてsの動きを見ると

 

k=1.00、 s=0.9637638900
k=1.25、 s=0.9750893706
k=1.50、 s=0.9818002228
k=e-1、 s=0.9852351488
k=1.75、 s=0.9855932236
k=2.00、 s=0.9874479508
k=2.2485、s=0.9879686321
k=2.2490、s=0.9879686352
k=2.2495、s=0.9879686346
k=2.25、 s=0.9879686303
k=2.50、 s=0.9875169655
k=3.00、 s=0.9848519010

 

k=2.2490の周辺にsの最大値がありそうです。
今、2次曲線s=a*k^2+b*k+cとおいて最大値とその位置を求めてみます。

 

k1=2.2485、s1=0.9879686321
k2=2.2490、s2=0.9879686352
k3=2.2495、s3=0.9879686346
を使って連立一次方程式を次のように立てます。

 

0.9879686321=a*(2.2485)^2+b*(2.2485)+c
0.9879686352=a*(2.2490)^2+b*(2.2490)+c
0.9879686346=a*(2.2495)^2+b*(2.2495)+c

 

これを解いて、a、b、cは以下のようになります。
a= -0.0074000001
b= 0.0332877005
c= 0.9505338048

 

最大値のk座標はk=-b/(2*a)
∴ k= 2.2491689188
その時の最大値はs=a*k^2+b*k+c
∴ s= 0.9879686354

 

この時の関数の形は次のグラフのようになります。x=1.2付近でガウス関数と交差します。

2次曲線

ガウス関数に似た関数の例が一つだけですと心もとないのですが、残念ながら準備できているのはこの関数のみです。
上に凸の2次曲線も候補に挙がりますが、xを変化させるときにy≧0の範囲をいちいち考慮しないといけないため、ガウス曲線と比べるには難があります。

 

しかし、やってみましょう。

 

C式のような形に整えると、2次曲線は以下のように表せます。

 

y=d+c-c*k*((x-a)*b)^2・・・D

 

同じように、a=0、b=1、c=1、d=0とし、k=1-(1/e)(e:ネイピア数)のときにD式は、x=±1でy=1/e になります。

 

g(x)=1-k*x^2 (y≧0)
g(x)=0 (y<0)

 

として-3.0≦x≦3.0の範囲でkを変化させて積和相互相関関数φfg (τ)を計算し、規格化相関関数sの動きをみてみます。

 

k=0.20、 s=0.9229401295
k=0.30、 s=0.9673858325
k=0.40、 s=0.9862630203
k=0.45、 s=0.9903837742
k=0.50、 s=0.9923506371
k=0.525、s=0.9926885058
k=0.550、s=0.9928081451
k=0.575、s=0.9922822059
k=0.60、 s=0.9914749649
k=0.70、 s=0.9867401283

 

k=0.550の周辺にsの最大値がありそうです。
今、2次曲線s=a*k^2+b*k+cとおいて最大値とその位置を求めてみます。

 

k1=0.525、s1=0.9926885058
k2=0.550、s2=0.9928081451
k3=0.575、s3=0.9922822059
を使って連立一次方程式を次のように立てます。

 

0.9926885058=a*(0.525)^2+b*(0.525)+c
0.9928081451=a*(0.550)^2+b*(0.550)+c
0.9922822059=a*(0.575)^2+b*(0.575)+c

 

これを解いて、a、b、cは以下のようになります。
a=-0.0074000001
b= 0.0332877005
c= 0.9505338048

 

最大値のk座標はk=-b/(2*a)
∴ k= 0.5421330268
その時の最大値はs=a*k^2+b*k+c
∴ s= 0.9928401086

 

sを比較すると、2次曲線の表現の方が、よりガウス関数に似ているということになりました。複雑な心境です。

 

この時の関数の形は次のグラフのようになります。この関数もx=1.2付近でガウス関数と交差します。

次は・・

ある曲線の一部をy≧0及びx=0で偶関数という条件付きで切り取ってきてガウス関数に似た関数として扱うことはできます。しかし、条件に気を使いながらというのは、とても扱いづらい関数ということになります。

 

もうひとつかふたつ、条件を気にしなくてよいガウス関数に似た単峰性の関数を見つけてきて、規格化相関係数を計算してみたいと思っています。

 

ページのトップへ

 

----- ここまで 20181104 -----

 

HOMEに戻る

おまけ

おまけとして、三角関数の余弦曲線を使って

 

y=d+c*(cos(b*k*(x-a)))^2
を考えてみます。ただし、−(π/2)≦b*k*(x-a))≧(π/2)です。

 

ここで、a=0、b=1、c=1、d=0とし、k=arccos(1/e)のとき、x=±1で与式はy=1/eになります。

 

g(x)=(cos(k*x))^2
−(π/2)≦k*x≧(π/2)

 

として-3.0≦x≦3.0の範囲でkを変化させて積和相互相関関数φfg (τ)を計算し、規格化相関関数sの動きをみてみます。

 

k=1.000、s=0.9939720180
k=0.950、s=0.9968806440
k=0.925、s=0.9978217530
k=0.900、s=0.9983741840
k=0.875、s=0.9985044640
k=0.850、s=0.9981707070
k=0.800、s=0.9959493020

 

k=0.875の周辺にsの最大値がありそうです。
今、2次曲線s=a*k^2+b*k+cとおいて最大値とその位置を求めてみます。

 

k1=0.900、s1=0.9983741840
k2=0.875、s2=0.9985044640
k3=0.850、s3=0.9981707070
を使って連立一次方程式を次のように立てます。

 

0.9983741840=a*(0.900)^2+b*(0.900)+c
0.9985044640=a*(0.875)^2+b*(0.875)+c
0.9981707070=a*(0.850)^2+b*(0.850)+c

 

これを解いて、a、b、cは以下のようになります。
a=-0.3712296000
b= 0.6537213400
c= 0.7107209540

 

最大値のk座標はk=-b/(2*a)
∴ k= 0.8804811631
その時の最大値はs=a*k^2+b*k+c
∴ s= 0.9985156169

 

sを比較すると、余弦曲線の表現の方が、2次曲線の表現よりも、さらにガウス関数に似ているということになりました。さらにさらに複雑な心境です。

 

この時の関数の形は次のグラフのようになります。この関数もx=1.2付近でガウス関数と交差します。

 

(おまけ)^2

(おまけ)^2として、単発の三角波を使って

 

y=d+c*(-1*k*b*abs(x-a)+1)
を考えてみます。

 

ここで、a=0、b=1、c=1、d=0とし、k=(e-1)/eのとき、x=±1で与式は y=1/eになります。

 

g(x)=-k*abs(x)+1
 (ただし g(x)<0 のとき g(x)=0)

 

として-3.0≦x≦3.0の範囲でkを変化させて積和相互相関関数φfg (τ)を計算し、規格化相関関数sの動きをみてみます。

 

k=0.50、s=0.9850231022
k=0.55、s=0.9935982368
k=0.60、s=0.9974543052
k=0.65、s=0.9974779310
k=0.70、s=0.9944148687
k=0.75、s=0.9890006580

 

k=0.65の周辺にsの最大値がありそうです。
今、2次曲線s=a*k^2+b*k+cとおいて最大値とその位置を求めてみます。

 

k1=0.60、s1=0.9974543052
k2=0.65、s2=0.9974779310
k3=0.70、s3=0.9944148687
を使って連立一次方程式を次のように立てます。

 

0.9974543052=a*(0.60)^2+b*(0.60)+c
0.9974779310=a*(0.65)^2+b*(0.65)+c
0.9944148687=a*(0.70)^2+b*(0.70)+c

 

これを解いて、a、b、cは以下のようになります。
a=-0.6173376200
b= 0.7721445410
c= 0.7564091238

 

最大値のk座標はk=-b/(2*a)
∴ k= 0.6253827047
その時の最大値はs=a*k^2+b*k+c
∴ s= 0.9978520445

 

sを比較すると、単発の三角波の表現の方が、2次曲線の表現よりも、さらにガウス関数に似ているということになりました。とてもとても複雑な心境です。

 

この時の関数の形は次のグラフのようになります。

 

(おまけ)^3

(おまけ)^3として、単発の矩形波を使って

 

y=1 ,if(abs(x-a)

 

ここで、a=0、b=1 のとき

 

g(x)=-k*abs(x)+1
 (ただし g(x)<0 のとき g(x)=0)

 

として-3.0≦x≦3.0の範囲でkを変化させて積和相互相関関数φfg (τ)を計算し、規格化相互相関係数sの動きをみてみます。

 

k=0.800、s=0.9278615780
k=0.850、s=0.9362820566
k=0.900、s=0.9395205725
k=0.950、s=0.9432901871
k=1.000、s=0.9426415025
k=1.050、s=0.9425998825
k=1.100、s=0.9425998825

 

k=0.95の周辺にsの最大値がありそうです。
今、2次曲線s=a*k^2+b*k+cとおいて最大値とその位置を求めてみます。

 

k1=0.90、s1=0.9395205725
k2=0.95、s2=0.9432901871
k3=1.00、s3=0.9426415025
を使って連立一次方程式を次のように立てます。

 

0.9395205725=a*(0.90)^2+b*(0.90)+c
0.9432901871=a*(0.95)^2+b*(0.95)+c
0.9426415025=a*(1.00)^2+b*(1.00)+c

 

これを解いて、a、b、cは以下のようになります。
a=-0.8836598400
b= 1.7101629960
c= 0.1161383465

 

最大値のk座標はk=-b/(2*a)
∴ k= 0.9676591142
その時の最大値はs=a*k^2+b*k+c
∴ s= 0.9435657514

 

この時の関数の形は次のグラフのようになります。

 

規格化相互相関係数sは、単発の矩形波でも 0.9435657514 という値を示しています。
関数自身の規格化自己相関係数が1であることを考えると、今回計算した5つの関数とガウス関数との規格化相互相関係数sが0.94以上というのは不思議な気がします。
特に矩形波については0.6とか0.7とかの値だろうと考えていたので、びっくりしています。

 

 

ページのトップへ

 

----- ここまで 20181108 -----

 

HOMEに戻る