不可欠MATLABを..評価するモンテカルロスタイルは、私たちは右上隅に「投げる」の点で、モンテカルロ法を用いた<strong>パイ</strong>を近似し、円などの内部にあるどのようにそれらの多く数えることができることを知っていた
私は F 機能毎ことをしたいので、私は長方形で [B]×[0、最大値(F)] ランダムな点を「投げ」しています私のrandom_point_y場合と私がテストしていますがf(random_point_x)よりも小さい場合は、fの下の点の数で合計を除算します。私は結果1.3414を持っている
しかし、: - (X^2)-1と1の間の例えば
clear
close all
%Let's define our function f
clear
close all
f = @(x) exp(-x.^2);
a=-1; b=1;
range = [a:0.01:b];
f_range = f(range);
%Let's find the maximum value of f
max_value = f(1);
max_x = range(1);
for i = range
if (f(i) > max_value) %If we have a new maximum
max_value = f(i);
max_x = i;
end
end
n=5000;
count=0;
%Let's generate uniformly distributed points over [a,b] x [0;max_f]
x = (b-a)*rand(1,n) + a;
y = rand(1,n) * max_value;
for i=1:n
if y(i)<f(x(i)) %If my point is below the function
count = count + 1;
end
end
%PLOT
hold on
%scatter(x,y,'.')
plot(range,f_range,'LineWidth',2)
axis([a-1 b+1 -1 max_value+1])
integral = (n/count)
hold off
Iは、F = E ^ためであった:
ここでは、コードされ1.3373は500.000ポイントです。 正確な結果はです1.49365
私は何が欠けていますか?
はところであなたができる:これとは別に
は、あなたのコードは、いくつかのベクトル化で、より速く、より明確になります '= -1;' 'B = 1;' 'F ='n = 5000;' 'randnums = a +(ba)* rand(1、n);' 'int(= ba)* mean(f randnums)) ' –
はい、動作しますが、私は本当にその"発射 "を実装したいと思います。 また、 '' x(i)^ 2 + y(i)^ 2 <= 1'なら 'f = @(x)exp(-x。^ 2);'と '' x '私は本当にどこから来たのか分かりません。 –