Mathematica程序——计算函数对应图像所围成的面积
2011-09-13 18:58
1076 查看
【问题】试求如下曲线所围成图形的面积。
x^2 + y^2 ≤ 16; x^2/36 + y^2 ≤ 1; (x - 2)^2 + (y+1) ≤ 9;
第一种算法:
【运行结果】
第一种方法的思想很简单,就是细分矩形区域,将落在目标区域内的小矩形的面积进行累加
面积的近似程度与细分的精度step有关,算法较为笨拙,计算时间长,算法复杂度为O(1/step^2)。
第二种方法:基于概率思想的蒙特卡罗算法的启迪
该算法是近似算法,算法的复杂度依赖于随机产生的点的个数n,复杂度为O(n)
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)
相关文章推荐
- 5.7 编写一个程序,其中有一个函数指针*parea,通过它分别指向计算圆的面积函数 circle 和矩形面积函数 rect 来计算给定圆的面积和矩形面积。
- 我的第一个JAVA程序——计算正方形面积
- 用抽象类设计计算二维平面图形面积的程序,在基类TDshape中设计纯虚函数area()和printName()......C++的158页5题
- C#程序设计---->计算圆面积windows程序
- 编写函数计算圆的面积,参数是圆的半径。在main函数中测试。
- VB中函数的用法,计算三角形面积
- css positioning计算和jquery对应函数
- MATLAB中计算程序运行时间的几个函数
- 实验5-2: 编制程序,输入m、n(m≥n≥0)后,计算下列表达式的值并输出。 要求将计算阶乘的运算编写作函数fact(n),函数返回值的类型为float
- opencv for python (7) 计算中值滤波函数程序的运行时间,及简要解释中值滤波函数
- 设计程序,单击【随机数】按钮,使用Math对象的random函数产生一个0-100之间(含0-100)的随机整数,并在对话框中显示,如下图。单击【计算】按钮,计算该随机数的平方、平方根和自然对数,保留两位小数,并在对话框中显示,如下图。
- 练习1-15 重新编写1.2节中的温度转换程序,使用函数实现温度转换计算
- Shell程序集锦六--时间计算函数
- android小程序:计算圆面积
- 用带参数的宏设计一个计算矩形面积的程序
- 10分钟上线 - 利用函数计算构建微信小程序的Server端
- 稀疏矩阵A和B,其行数和列数对应相等,编写一个程序,计算A和B之和,假设稀疏矩阵采用三元组表示
- 用JAVA语言编写程序:包含两个类,一个类Cricle中包含计算圆周长,面积的方法。在另一个类Compute中给出半径值为10,创建对象,并调用Cricle类中的方法,计算该对象的面积、周长并显示出结
- 枚举桌面应用程序lnk路径并得到对应程序的绝对路径(使用SHGetDesktopFolder函数枚举,然后使用COM查询IShellFolder,IShellLink和IPersistFile接口)
- Mathematica 函数调用发生异常时停止计算