matlab - Matlab 蒙特卡罗积分循环
问题描述
我正在尝试编写使用 MATLAB 中的蒙特卡洛方法计算积分的函数。我对 MATLAB 不够熟悉,无法理解为什么每次都会遇到不同的集成问题。这是我的代码:
f=@(x)exp(-(x-3).^2);
N = 1000; %random samples
a = 0; % lower bound
b = 3; %upper bound
x2=linspace(0,3,1000);
syms z % zero vector holder to find max y value
z = zeros(size(x2));
z = f(x2);
y = f(b).*rand(1,1000);
x = a +(b-a)*rand(1,N);
count = 0;
for k=1:numel(x);
%produce random x coordinate
if y(k) <= f(x);
count= count +1;
end
end
count;
i = (b-a)/N*sum(f(x));
当我运行它时, i 值每次都会改变,但我希望使用 for 循环计算积分。谢谢
解决方案
你最后的 i 计算是错误的,它应该是
count/numel(x) * max(z) * (b-a)
推荐阅读
- python - 向models.py添加了额外的模型,但我得到`OperationalError:没有这样的表`
- docker - Docker 运行安装卷,但 docker inspect 的卷为空
- python - 迭代数据框时所做的更改不保存
- kdb - 使用长度不同的向量索引的双三重 for 循环
- html - 如果内部有多行文本,则inline-block获得父级的 100% 宽度
- linux - 在bash中并排合并两个csv文件的内容
- c# - 通过 Python 从 cvent 中提取数据
- excel - 如何在列中找到第 n 次出现的值
- hadoop - xpath udf (Hive) 返回所有数组元素,我想在单独的行中查看每个数组元素而不是单行
- javascript - 如何在回调中推送到数组并在回调函数Node.js之外返回该值