Mathematica程序——计算函数对应图像所围成的面积

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

【问题】试求如下曲线所围成图形的面积。

x^2 + y^2 ≤ 16; x^2/36 + y^2  ≤ 1; (x - 2)^2 + (y+1) ≤ 9;

第一种算法:

 

Area[x1_, x2_, y1_, y2_, step_] :=
Block[{nx, ny, i, j, xx, yy, s = 0},
    nx = IntegerPart[(x2 - x1)/step];
    ny = IntegerPart[(y2 - y1)/step];
    For[i = 1, i ≤ nx, i++,
      For[j = 1, j ≤ ny, j++, xx = x1 + i*step; yy = y1 + j*step;
        If[xx^2 + yy^2 ≤ 16 && xx^2/36 + yy^2 ≤ 1 && (xx - 
    2)^2 + (yy + 1)^2 ≤ 9, s = s + step^2]]];
    Return[s]]


【运行结果】

 

 

Area[-2, 6, -2, 2, 0.01]

8.8312

Area[-1, 4, -1, 1, 0.001]

8.83922

 

 

 

第一种方法的思想很简单,就是细分矩形区域,将落在目标区域内的小矩形的面积进行累加

面积的近似程度与细分的精度step有关,算法较为笨拙,计算时间长,算法复杂度为O(1/step^2)。

 

第二种方法:基于概率思想的蒙特卡罗算法的启迪

AreaMC[x1_, x2_, y1_, y2_, n_] :=
Block[{rx, ry, i, s, calin = 0},
    For[i = 1, i ≤ n, i++,
      rx = Random[Real, {x1, x2}];
      ry = Random[Real, {y1, y2}];
      If[rx^2 + ry^2 ≤ 16 && rx^2/36 + 
      ry^2 ≤ 1 && (rx - 2)^2 + (ry + 1)^2 ≤ 9, calin = calin + 1]];
    s = (x2 - x1)*(y2 - y1)*N[calin/n];
    Return[s]]


 

AreaMC[-2, 6, -2, 2, 1000000]

8.85734


 

该算法是近似算法,算法的复杂度依赖于随机产生的点的个数n,复杂度为O(n)

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值