Я пытаюсь оценить пи путем равномерного случайного отбора точек (x, y) внутри круга радиуса 1, а затем вычислить соответствующее значение z в сфере. На самом деле это всего лишь четверть круга для упрощения вычислений. Затем я вычисляю среднее значение z (которое должно составлять примерно 1/8 объема всей сферы), а затем сравниваю его с объемом куба 1x1x1. Оно должно быть примерно 1/6 пи, но по какой-то причине это не так.
Это мой код Matlab:
r = rand(1000,1);
theta = rand(1000, 1) * pi/2;
x = zeros(1000);
y = zeros(1000);
z = zeros(1000);
for i = 1:1000
x(i) = r(i)^(0.5) * sin(theta(i));
y(i) = r(i)^(0.5) * cos(theta(i));
z(i) = (1.0 - x(i) * x(i) - y(i) * y(i))^0.5;
end
mean(z)(1) * 6
Он все время повторяет, что пи примерно равно 4, что бессмысленно, даже если я увеличу количество отсчетов. Не могли бы вы объяснить мне, в чем проблема, несмотря на то, что я использую число Пи для определения угла при выборке случайных точек внутри круга?
1/6 pi
, если вы позволитеx
иy
изменяться по всей единице квадрат[0, 1] x [0, 1]
. Как бы то ни было, можно ожидать, что среднее значение будет(1/6 pi) / (1/4 pi) = 2/3
. - person Mark Dickinson   schedule 23.11.2015x
равномерно на[0, 1]
и посмотрите на среднее значениеsqrt(1 - x*x)
.) - person Mark Dickinson   schedule 23.11.2015mean(z)(1)
не валидный матлаб. Вы используете октаву? 2. Я предлагаю избегать магических чисел, устанавливатьN=1000
в начале и использоватьN
каждый раз позже 3. Используйте операции с массивами вместо цикла: например,z=(1-x.^2-y.^2).^(0.5)
(более эффективно, результат тот же). 4. В сфере вам нужны тэта и фи иx=r.*sin(theta).*cos(phi); y=r.*sin(theta).*sin(phi); z=r.*cos(theta)
. В вашей текущей версииx.^2+y.^2==r
для всех точек, поэтому вы просто усредняетеsqrt(1-r)
, что не имеет смысла. - person Andras Deak   schedule 23.11.2015pi
в функции, которая вычисляетpi
, что не очень помогает! - person David   schedule 23.11.2015dec2rad
и скройте пи;) И попробуйте выделенную жирным шрифтом часть моего предыдущего комментария. - person Andras Deak   schedule 23.11.2015mean
. Например, вы сравниваете объем с отдельным компонентом в своем вопросе. Итак, выполнили ли вы сферический интеграл, необходимый для вычисления<z>
на сфере? Вы уверены, что он в1/6pi
раз больше куба? - person Andras Deak   schedule 23.11.2015pi
, чтобы сказать что-нибудь о результате. Я действительно не понимаю прямо сейчас, как мы могли бы спасти этот подход ... - person Andras Deak   schedule 23.11.2015