我正在试图弄清楚如何使用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 :(得分:4)
两个问题:
1)如果你看看你正在计算什么," ans"随着我的增加,它会增长。通过放置大量样本,您只需增加输出值。你怎么能将这个值标准化,使它保持相对相同,无论样本数量多少?
2)想想你在这里想要计算什么。你现在的" ans"给你的功能输出的100000000独立随机测量值的总和。如果您除以您采样的样本数,这个数字代表什么?您如何将这些知识与整合范围相结合,以获得曲线下的预期面积?
答案 1 :(得分:3)
我设法用我找到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