在 matlab 中增加 monte carlo 的值
Incrementing the values for monte carlo in matlab
我想在 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 个值...
有人知道解决方案吗?
问题出在你的for循环范围内。你每次都从 1
到 n
但是 r
每次通过循环只有 1000 个条目([=15= 的大小] 和 b
)。自 n == 1000
和 numel(r) == 1000
以来第一次通过循环时这将不是问题,但在通过 while
循环的连续时间中,n
增加到 2000、3000 等。这超过了 r
的大小。
您需要更改您的 for 循环,以便您只从 1
转到 numel(r)
。
for k = 1:numel(r)
if r(k) <= 0.25;
m = m + 1;
end
end
或者您可以完全删除 for 循环。
m = m + sum(r <= 0.25);
我想在 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 个值... 有人知道解决方案吗?
问题出在你的for循环范围内。你每次都从 1
到 n
但是 r
每次通过循环只有 1000 个条目([=15= 的大小] 和 b
)。自 n == 1000
和 numel(r) == 1000
以来第一次通过循环时这将不是问题,但在通过 while
循环的连续时间中,n
增加到 2000、3000 等。这超过了 r
的大小。
您需要更改您的 for 循环,以便您只从 1
转到 numel(r)
。
for k = 1:numel(r)
if r(k) <= 0.25;
m = m + 1;
end
end
或者您可以完全删除 for 循环。
m = m + sum(r <= 0.25);