Mathematica程序——计算函数对应图像所围成的面积
来源:互联网 发布:外贸群发邮件软件 编辑:程序博客网 时间:2024/04/29 20:40
【问题】试求如下曲线所围成图形的面积。
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.8312Area[-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)
- Mathematica程序——计算函数对应图像所围成的面积
- 不可置信的图像操作——利用Mathematica
- opencv——计算轮廓的周长、所包含面积、中心点
- opencv3计算图像中轮廓的面积
- 我的第一个JAVA程序——计算正方形面积
- 编写 计算三角形面积的程序
- 自定义异常计算面积的小程序
- JAVA程序计算圆的周长面积
- 计算2个矩形所占的面积
- 计算2个矩形所占的面积
- 5.7 编写一个程序,其中有一个函数指针*parea,通过它分别指向计算圆的面积函数 circle 和矩形面积函数 rect 来计算给定圆的面积和矩形面积。
- 坐标系中直线所围成的阴影面积
- (补)计算图形面积——虚函数
- opencv3计算轮廓的面积-contourArea函数
- 函数调用计算面积
- opencv3计算图像中轮廓的面积-滚动条
- 基于opencv计算星云图像的面积与周长
- mathematica的图像处理0--七夕特刊
- 随笔
- Matlab实现——求矩阵的逆(LU分解)
- android GridView 长按事件不管用
- poj 1785 Binary Search Heap Construction( 分治 + RMQ )
- android 1.6 launcher研究之launcher的左右滑动
- Mathematica程序——计算函数对应图像所围成的面积
- [CentOs 5.5 X64] 手動安裝JDK
- hdoj4021(24 puzzle)
- 链接lib库#pragma comment
- Snow Leopard升级到 10.6.8后无法USB连接iPhone / iPad的问题
- 网络端口常见
- Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)
- VirtualBox虚拟机安装Windows XP
- vb.net 特别变量定义