matlab 蒙特卡洛二重积分

图中是计算二重积分的Monte-Carlo 方法,请编写该方法MATLAB的函数程序,并用实例演示。

代码如下:

function result=monte_carlo(a,b)   %a,b为x下界和上界

x=a:0.001:b;

c=min(g(x))-0.1;           %[c,d]区间要包含y的上下界,大概自己确定就好。这里求函数最值有更精   d=max(h(x))+0.1;             确的方法

n=100000;                    %随机取100000个散点,当然取点数越多越精确

N=0;

sum=0;

while n>0

    X=a+(b-a)*rand();

    Y=c+(d-c)*rand();

    if Y>g(X)&&Y<h(X)

        N=N+1;

        sum=sum+f(X,Y);

    end

    n=n-1;

end

n=100000;

s=sum/N;

result=(b-a)*(d-c)*N/n*s;

实例:

function g=g(x)   %y下界

g=x;

function f=f(x,y)   %被积函数

f=x*y; 

function h=h(x)     %y上界

h=sqrt(x);

实例计算的二重积分为:

结果:

r=monte_carlo(0,1)

r =0.0414

计算器的结果为0.041666666667

还有许多可以改进的地方,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值