我想在matlab中实现monte carlo算法,其方式与我在其他任何地方看到的方式略有不同。 我有一个工作示例,我生成一个1000点的向量并从中计算pi。 现在我想要一个模型,我可以在同一个例子中添加额外的点。
到目前为止,这是我的代码:
a=rand(1000,1); %initial random vectors
b=rand(1000,1);
n=1000;
m=0; %Number of points inside circle
while true
x1=a-0.5;
y1=b-0.5; %cirle has centre at (0.5,0.5)
r=x1.^2+y1.^2;
for i=1:n
if r(i)<=0.25
m=m+1;
end
end
pi=m/(0.25*n);
a=rand(1000,1);
b=rand(1000,1);
n=n+1000;
pause(1);
end
但这不起作用,因为for循环,你检查变量...... r(i)值应该转移到我在while循环底部创建的下一个1000个值... 有人知道解决方案吗?
答案 0 :(得分:3)
问题出在你的for循环范围内。每次您都会从1
转到n
,但 r
每次循环只有1000个条目(a
的大小和{ {1}})。从b
和n == 1000
开始,第一次循环不会出现问题,但在numel(r) == 1000
循环的连续时间内,while
会增加到2000,3000等。这超过了n
的大小。
您需要更改for循环,以便只从r
转到1
。
numel(r)
或者你可以完全删除for循环。
for k = 1:numel(r)
if r(k) <= 0.25;
m = m + 1;
end
end