逆風に背中を向けて追い風に

ある理系のフリした文系人間の手記

GNU Octaveの正規分布を作る関数名はnormal_pdfではない

f:id:LingerBelong:20161120213956j:plain

こんばんは。ゆらとです。

今回はGNU Octave正規分布を作ろうとして躓いたので、そのあらましと解決法について書きます。

Octave、使用者の少なさ故かググってもトラブルの原因が分からないことが結構あるんですよね。

同じことで苦しんでいる方の役に立てれば嬉しいです。

日本語のリファレンス


さて、日本語のマニュアル(GNU Octave: 日本語マニュアル for 2.1)のGNU Octave: 25.4 分布のページを参照すると、正規分布の作り方について次のように書いています。

Function File:normal_pdf (x, m, v)


xの各要素について,平均がmで分散がvである 正規分布の,xにおけるPDF(確率密度関数)を返す。
初期値はm = 1およびv = 1である。


なるほどなるほど……。で、これを参考に次のコードを打ち込みます。


すると、次のエラーが返ってきました。

error : 'normal_pdf' undefined

いやいや、定義されてないって言われても困りますやん。じゃあ何を使えと。

英語のリファレンス


日本語では有用そうな情報が見つからなかったので、原典(GNU Octave: Distributions)を調べてみると……

Function File: normpdf (x)
Function File: normpdf (x, mu, sigma)


For each element of x, compute the probability density function (PDF) at x of the normal distribution with mean mu and standard deviation sigma.

Default values are mu = 0, sigma = 1.

こ、これだああああぁぁぁぁ~~~!!!

関数名がnormal_pdfじゃなくてnormpdfなのかあああぁぁぁ~~!!

こんな初歩的なことなのに、一人でめっちゃテンション上がってました(*'▽')

で、次のように入力してみると

晴れて正規分布のグラフを出力することができました!

f:id:LingerBelong:20161120214016j:plain

日本語版マニュアルの関数名は古い可能性がある

他にも

- 正規分布の累積分布関数
  × normal_cdf(x, mu, sigma)
   normcdf(x, mu, sigma)

- 正規分布に従う乱数
  × normal_rnd(mu, sigma, row, column)
   normrnd(mu, sigma, row, column)


などなど、日本語のリファレンスが新しい関数名に対応していない例が多々あるようです。


日本語マニュアルよく見たらOctave 2.1.xと古めのものですし、こういうことがあるのも致し方ないことかもしれませんね。

関数が未定義だと言われたら英語のリファレンスを見てみるのが良いようです。


一応、僕の環境も書いておきます。
OS : Ubuntu 14.04
GNU Octave version 3.8.1



ここまでお読み下さり、ありがとうございました。