2016-09-16 231 views
0

私はMatlabで数学ベースのアプリケーションを正しく作成する方法を理解しようとしていますが、モンテカルロ法の統合方法を理解することはできません。私はアルゴリズムの考え方も正しくないと感じています。今のところ、私のようなものがあります:Matlabでモンテカルロ積分法をどのようにプログラムしますか?

// For the function {integral of cos(x^3)*exp(x^(1/2))+x dx 
    // from x = 0 to x = 10 
    ans = 0; 
    for i = 1:100000000 
     x = 10*rand; 
     ans = ans + cos(x^3)*exp(x^(1/2))+x 
    end 

を私は私の出力が期待されているものにもほとんど接近しているので、これは完全に間違っていると感じています。これを正しく書き込むにはどうすればよいですか?または、これを設定するためのアルゴリズムはどのようにすべきでしょうか?

+0

https://en.wikipedia.org/wiki/Monte_Carlo_integrationこれをありがとう – duffymo

+0

。私はそれを考え出した。 –

答えて

1

私はhereという式でこれを解決することができました。私が使用して終了:

ans = 0; 
    n = 0; 
    for i:1:100000000 
     x = 10*rand; 
     n = n + cos(x^3)*exp(x^(1/2))+x; 
    end 
    ans = ((10-0)/100000000)*n 
2

2つの問題:あなたは計算しているものを見れば

1)は、「ANS」私増加として成長しようとしています。膨大な数のサンプルを置くだけで、出力値を増やすだけです。サンプルの数にかかわらず、この値をどのようにして正規化することができますか?

2)ここで計算しようとしていることを考えてください。あなたの現在の "ans"は、あなたの関数への出力の100000000の独立したランダムな測定値の合計をあなたに与えています。あなたが採取したサンプルの数で割った場合、この数字は何を表していますか?どのようにして、その知識を統合の範囲と組み合わせて、期待される領域を曲線の下に得ることができますか?

関連する問題