matlab 如何用随机投点法求一元函数在闭区间上的最值?

如题所述

第1个回答  2019-10-13
<p>你手写的公式看得不是很清楚,这里认为被积函数如下</p>
<p></p>
<p>如果我理解的不对,你可以自己修改代码中ycr的公式。理论上nmax越大越接近真实解。程序执行最后一行时,可能会出现警告,没关系,可以正常返回精确的积分值用以对比随机投点的计算精度</p>
<p>nmax=1000;
</p>
<p>count=0;</p>
<p>for i=1:nmax</p>
<p>

x=rand();</p>
<p>

y=rand();</p>
<p>

ycr=exp(-x^2/2)/sqrt(2*pi);</p>
<p>

if ycr>=y</p>
<p>

count=count+1;</p>
<p>

end</p>
<p>end</p>area=count/nmax
<p> </p>
<p>eval(int('exp(-x^2/2)/sqrt(2*pi)',0,1))
%真实积分值</p>
<p> </p>
第2个回答  2019-03-13
以对勾函数为例,闭区间为[a,b],a=0.001,b=20为例;
注:由于随机因素的影响,每次结果略有差异,当N足够大时,差异可以忽略。
f=@(x)
x+1./x;
a=0.001;
b=20;
N=10000;%随机投点个数
rnd=rand(N,1)*(b-a)+a;
rndValue=f(rnd);
[maxValue,maxInd]=max(rndValue);
maxX=rnd(maxInd);
[minValue,minInd]=min(rndValue);
minX=rnd(minInd);
maxValue,maxX,minValue,minX