如何在 Matlab 中编写 Monte Carlo 积分方法?
How do you program the Monte Carlo Integration method in Matlab?
我正在尝试弄清楚如何使用 Matlab 调整基于数学的应用程序,尽管我似乎无法弄清楚如何使 Monte Carlo 集成方法起作用。我觉得我也没有正确考虑算法。截至目前,我有类似的东西:
// 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
我觉得这是完全错误的,因为我的输出几乎没有接近预期。我应该如何正确地写这个?或者,设置它的算法应该如何?
两期:
1) 如果您查看您正在计算的内容,"ans" 将随着 i 的增加而增长。通过放置大量样本,您只是在增加输出值。无论样本数量如何,您如何标准化该值以使其保持相对相同?
2) 考虑一下您要在此处计算的内容。您当前的 "ans" 为您提供函数输出的 100000000 次独立随机测量的总和。如果你除以你采集的样本数,这个数字代表什么?您如何将这些知识与积分范围结合起来以获得预期的曲线下面积?
我设法用我找到的公式解决了这个问题 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
我正在尝试弄清楚如何使用 Matlab 调整基于数学的应用程序,尽管我似乎无法弄清楚如何使 Monte Carlo 集成方法起作用。我觉得我也没有正确考虑算法。截至目前,我有类似的东西:
// 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
我觉得这是完全错误的,因为我的输出几乎没有接近预期。我应该如何正确地写这个?或者,设置它的算法应该如何?
两期:
1) 如果您查看您正在计算的内容,"ans" 将随着 i 的增加而增长。通过放置大量样本,您只是在增加输出值。无论样本数量如何,您如何标准化该值以使其保持相对相同?
2) 考虑一下您要在此处计算的内容。您当前的 "ans" 为您提供函数输出的 100000000 次独立随机测量的总和。如果你除以你采集的样本数,这个数字代表什么?您如何将这些知识与积分范围结合起来以获得预期的曲线下面积?
我设法用我找到的公式解决了这个问题 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