函数显示数据错误,蒙特卡洛方法

时间:2019-11-23 17:11:29

标签: matlab if-statement plot

我正在尝试编写一个与monte carlo方法集成的程序。它的功能之一是根据if语句在图形上将点颜色设置为蓝色或红色。如果将if语句放在“ for”循环中,我不知道为什么,但是似乎第一次迭代后第一个选项被忽略了。整个过程看起来像这样: enter image description here

但它应该看起来像这样:

enter image description here

此外,我不知道为什么,但是看起来情节在顶部增加了一些空白空间

整个代码尚未完成,仅需几行,但是这些点太烦人了,我想先找出问题所在。这是代码。

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。

1 个答案:

答案 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