我正在尝试编写一个与monte carlo方法集成的程序。它的功能之一是根据if语句在图形上将点颜色设置为蓝色或红色。如果将if语句放在“ for”循环中,我不知道为什么,但是似乎第一次迭代后第一个选项被忽略了。整个过程看起来像这样:
但它应该看起来像这样:
此外,我不知道为什么,但是看起来情节在顶部增加了一些空白空间
整个代码尚未完成,仅需几行,但是这些点太烦人了,我想先找出问题所在。这是代码。
function p=montecarlo(f, a, b, n, t)
%f is a function provided by user
%a and b is a range
%n is the amount of random points
%t is a t=a:01:b vector to draw a plot
upper=max(f(t));
lower=min(f(t));
x=a+(b-a).*(rand(n,1)) %generates vector of random numbers from a to b
y=lower+(upper-lower).*(rand(n,1)) %generates vector of ranom numbers from min to max
hold on
for i=1:n
if y(i)>=f(i)
plot(x(i),y(i),'bo')
else
plot(x(i),y(i),'ro')
end
plot(t,f(t),'k')
end
end
提供给该函数的参数:f = x。^ 2 + 3 * x + 5,a = -4,b = 2,n = 1000。
答案 0 :(得分:1)
问题很简单。声明:
if y(i)>=f(i)
是错误的。您要做的是将随机值y(i)与对应点x(i)处的函数值进行比较,因此应该是:
if y(i)>=f(x(i))
plot(x(i),y(i),'bo')
else
plot(x(i),y(i),'ro')
end