組み合わせ n!/(k!(n-k)!)
の計算は、matlabではnchoosek(n,k)だが(高橋くんの発見)、scilabにはない。
scilabには備わっていないので、次のように独自に関数を作る必要がある。1 (もちろん、下の例にあるコメント行はなくてもよい。必要なのは6行だけ。)
// combinations -- // Returns the number of combinations of j objects chosen from n objects . function c = combinations ( n , j ) c = exp( gammaln (n+1) - gammaln (j+1) - gammaln (n-j +1)); // If the input where integers , returns also an integer . if ( and( round (n)==n) & and( round (j)==j) ) then c = round ( c ) end endfunctionこれを読み込むと、定義どおり、combination(n,k)と使うことができる。関数名をnchoosekとしておけば、matlabと同じようにつかえる。
上記をcombinations.sciというファイルにセーブしておき、scilabで読み込むと(もちろん、scilabのeditツールを利用して書いてもよい。)次のようなscilabのeditツールに読み込まれる。これを丸印あるいは、「実行」メニューにより実行するとscilabのコンソールに読み込まれ実行される。
それが終わればコンソールにて関数combinations(10,5)のように実行できる。
1. 関数combinationsの中で使われているgammalnは対数ガンマ関数と呼ばれるものである。ガンマ関数は簡単に言えば、階乗の実数への拡張である。つまり(2.3!)というようなものをΓ(3.3)と表す.これは積分で定義することができる。詳細は、http://www.scilab.org/support/documentation/tutorialsにある "Introduction to discrete probabilities with Scilab"を参照。 なぜ、階乗やコンビネーションを計算するのにΓ関数を使うのかは、このチュートリアルにもかかれているが、考えてみてほしい。20!/(5!15!)のようなものを単純にコンピュータで計算するのは精度、メモリー上、困難があるのである。