SSブログ

組み合わせを計算するJavaScriptを作ったケロ [ひとこと言わねば]

組み合わせを計算するJavaScriptを作ったにゃ。
そして、Bloggerの方にアップしておいたケロ。


これがその計算結果

keisankekka1.png

n=30、r=15とすると、

keisankekka2.png

断っておきますが、上のは画像なので、クリックしても計算はしてくれない。
上記urlにアクセスし、nとrに値を入れて、計算ボタンをクリックすると、を計算してくれる。ただし、エラーチェック機能は含んでいないので、n、rに変な値を入れないように。

では、例によって、ネムネコ自尊ソングを♪


さらに、この曲を♪


hirefuse-gumin.png

kakuno-chigai.png

kakunochigai-miseteyaruze.png

Fuck_Sign-Seija.png

(画像元:YouTubeの上の動画)

C言語ならば5、6行で計算するプログラムを作ることができる。

次の関係

 

を使って、再帰処理を用いての値を求めることもできる。

C言語なならば、たとえば、次のようになる。


#include <stdio.h>

// 再帰処理で計算
int Combi(int n, int r) {
       
    if(r==0 || r==n) {
        return 1;
    } else {
        return Combi(n-1,r)+Combi(n-1,r-1);
    }
}

main() {
    int n,r;

    for (n=0; n<=9; n++) {
        for (r=0; r <=n; r++) {
            printf("%dC%d=%d  ", n,r,Combi(n,r));
        }
        printf("\n");
    }
}



これは、パスカルの三角形を用いて、の値を求めるのと同じなのですが、
他に手段がない場合や再帰処理を用いないとプログラムが冗漫になる場合などはしょうがないけれど、
プログラムが自分自身を呼ぶ、このような再帰プログラムは作らないほうがいい。

 return Combi(n-1,r)+Combi(n-1,r-1);

ここで、Combiという関数が自分自身を呼び出している!!

パスカルの三角形

Pascal triangle.svg


何故、再帰処理を使ったプログラムはできるだけ書かないほうがいいのかについては、きっと、
ddt³さんが解説してくださるに違いない!!


問題 次の関係

 

を利用し、n!を求めるプログラムを作りなさい。

できたら、再帰処理を利用したプログラムを作れ。

(ヒント)

 

とおくと、

  

したがって、

 

f(n) {

  if(n==0) {

  return 1;

  else {

  return n*f(n-1);

 }

}

 

 


nice!(0)  コメント(0) 
共通テーマ:音楽

お前等に質問 確率・統計の検定の問題 (2月24日) [お前らに質問]

お前らに確率・統計の検定の問題を一つ出すにゃ。解けるかな。

 

問題 コインを10回投げたところ、表が8回出た。

このことから、このコインは表が裏よりも出やすいと言えるか。危険率5%で判定せよ。

表が9回出たら、どうか。

 

計算しなくても、問題の問い方を見ただけで、

表が8回のときは「表が裏より出やすい」と結論できないこと、そして、表が9回ならば「表が裏より出やすい」と言えることがわかるが・・・。

 

nanikanograph.png

 

なんだかわからない、このグラフをサービスしてやろう。

 

ここまでサービスしたんだから、この問題を解けよな!!

 

ところで、この問題を解くためには、組み合わせ、すなわち、

 

の計算が必要になる。

表計算ソフトには、組み合わせの関数COMBINというものがあり、これを使えば、COMBIN(n,r)と計算することができるが、C言語などのプログラム言語の関数には、組み合わせを計算する組み込み関数は存在しない。

で、組み合わせ(1)の値を求めるプログラムを自作しないといけないのだが、たとえば、

 

などと計算すると、20!というのはトンデモなくデカイ数字(約2.432902008×10¹⁸)なので、オーバーフローしてしまう。

ということで、プログラムを作れる環境を持っている奴は、組み合わせを求める関数を自作し、の値を求めよ。

そして、この記事のコメント欄にその自作プログラムを書き、送信するように。

ただし、使用していい言語は、(十進)BASICFortranC/C++JAVAJavaScript、情報技術者の試験で使われるアセンブラCASLなどとする。COBOLは駄目だケロよ。

 

 

某計算サイトによると、

 

らしいね。




nice!(1)  コメント(0) 
共通テーマ:音楽

ネムネコ、コイン投げをコンピュータでシミュレートする [ひとこと言わねば]

昨日、コンピュータの乱数を使って、二項分布を求めたのだけれど、試行回数をトンデモなく大きくとらないと数学的確率の値に近づかないことに気がついて、コンピュータを使って、コインを10回投げて何回表が出るかシミュレーションしてみた。

 

コインを10回投げて表が出る回数をrとすると、その確率は

 

になる。

これは数学的な確率だにゃ。

 

コンピュータを使って、コインを10回投げて表が何回出るかという試行をn=10100100010000100000回行うと、これは次のような分布になる。

 

 

このグラフを見ると、コインを10回投げることを100回、1000回くらい行っても、(1)式で与えられる二項分布B(10,1/2)は得られないことがわかる。

1000回位じゃ、誤差が大きすぎて、信用できない。

コインを10回投げることを1万回、できたら10万回回くらいやらないと、使い物にならない。

そして、この結果に正直強い衝撃を受けている。

だって、1000回も繰り返せば、かなり良く近似できると思っていたんだもん。

それと同時に、「数学的確率っていったい何なんだ」という、確率に対する不信感を募らせた。

 

では、ここで問題を一つ。

 

問題1 1枚のコインを1000回投げたところ、表が493回出た。信頼度95%で、このコインの表が出る確率を推定せよ。

【解答例】

表が出る確率をpとすると、

 

(解答終)

 

この実験からわかるのは、

「信頼度95%で、このコインの表の出る確率は0.462以上かつ0.524以下である」ということ。

これ以上のことは言えない。

 

不思議なもので、コンピュータの乱数を使って、コインを10000回投げると、表が4913回という結果が出てしまった。コインを10000回投げて測定された表のが出る確率が0.4913なのに対し、コインを1000回投げたときに測定された表が出る確率0.493より悪化してしまったケロ。

ではあるが、95%の信頼度でこのコインの表が出る確率を推定すると、

 

となるので、「このコインの表の出る確率は、信頼度95%で、0.4913以上で0.5011以下である」となり、10000回投げた確率の推定値のほうが信頼できる。

 


nice!(1)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。