蒙特卡洛算法举例,计算阴影部分面积MATLAB和C语言实现
计算阴影部分面积。
一个古人要求一个图形的面积,他把图形画在一块方形布上,然后找来一袋豆子,然后将所有豆子洒在布上,落在图形内豆子的重量比上那块布上所有豆子的重量再乘以布的面积就是他所要求的图形的面积。 两种编程思路来计算这个面积:
方法一:将整个坐标轴看成一个边长为12的正方形,然后均匀的这个正方形分成N(N的大小取决于划分的步长)个点,然后找出N个点中有多少个点是属于阴影部分中,假设这个值为k,则阴影部分的面积为:k/N12^2
方法二:将整个坐标轴看成一个边长为12的正方形,然后在(-6,6)中随机出N(N越大越好,至少超过1000)个点,然后找出这N个点中有多少个点在阴 影区域内,假设这个值为k,则阴影部分的面积为:k/N12^2。然后重复这个过程100次,求出100次面积计算结果的均值,这个均值为阴影部分面积。
对比分析:以上两个方法都是利用蒙特卡罗方法计算阴影部分面积,只是在处理的细节有一点区别。前者是把豆子均匀分布在布上;后者则是随机把豆子仍在布上。就计算结果的精度而言,前者取决点的分割是否够密,即N是否够大;后者不仅仅通过N来控制精度,因为随机的因素会造成单次计算结果偏高和偏小,所以进行反复多次计算最后以均值来衡量阴影部分面积。
C语言实现:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> int n=100000000;
int main()
{ int test=n,i,total=0; double s=0,func1,func2,func3,a,b,x,y; srand(time(NULL)); //选取当前时间作为随机数种子 for (i=1;i<=test;i++){ x=((double)rand()/RAND_MAX-0.5)*12; y=((double)rand()/RAND_MAX-0.5)*12; //生成两个不同的随机实数 func1=x*x/9+y*y/36-1; func2=x*x/36+y*y-1; func3=(x-2)*(x-2)+(y+1)*(y+1)-9; if ((func1<0)&&(func2<0)&&(func3<0)) total=total+1; } a=total;b=test; s=a*144/b; printf("%.4f",s); return 0;
}
MATLAB实现:
方法一:
clear
x=-6:0.01:6;
y=x;
s=size(x);
zs=s(1,2)^2;
k=0;
for i=1:s(1,2) for j=1:s(1,2) a1=(x(i)^2)/9+(y(j)^2)/36; a2=(x(i)^2)/36+y(j)^2; a3=(x(i)-2)^2+(y(j)+1)^2; if a1<1 if a2<1 if a3<9k=k+1; endendend end
end
mj=(12^2)*k/zs
运行结果: mj = 7.2150
方法二:
clear
N=10000;
n=100;
for j=1:n k=0; for i=1:N a=12*rand(1,2)-6; x(i)=a(1,1); y(i)=a(1,2); a1=(x(i)^2)/9+(y(i)^2)/36; a2=(x(i)^2)/36+y(i)^2; a3=(x(i)-2)^2+(y(i)+1)^2; if a1<1 if a2<1 if a3<9 k=k+1; end end end end m(j)=(12^2)*k/N;
end
mj=mean(m)
运行结果: mj = 7.2500
蒙特卡洛算法举例,计算阴影部分面积MATLAB和C语言实现相关推荐
- 用蒙特卡洛法计算阴影部分面积
首先看看上面这个问题.这个问题是我在一个MATLAB交流群里碰到的提问,计算阴影部分面积. 什么是蒙特卡罗在这里我就不多做介绍了,感兴趣的朋友可以看之前的几篇文章,更多具体的数学建模模型可以关注数模乐 ...
- 经典算法题计算积水面积——python
原题:给定一个整数数组,假设元素都是厚为1的挡板,往里面倒水,计算盛水的最大横截面积. 算法1思路: 实现思路:每次看到一个元素,就往回看会增加多少积水 时间复杂度,每遍历一个元素都有可能回看所有已经 ...
- 用蒙特卡洛求pi_蒙特卡洛算法(MCS)及其MATLAB实现
基本概念 蒙特卡洛模拟(Monte Carlo Simulation, MCS)是科学家冯·诺伊曼等人在1940年代发明的一种以概率为基础的方法,它以一座赌城命名--蒙特卡洛.如果用一句话来概括它的本 ...
- PSO粒子群算法(鸟群算法)计算二元函数极值(C语言实现、matlab工具箱实现)
算法讲解和感悟 PSO算法是经典的智能优化算法,在数学建模等比赛中非常常用,求解时的效果不错.对于智能优化算法,个人倾向于matlab实现,因为计算起来非常方便.但是这次因为老师的要求,准备C语言 ...
- vtk中的算法举例-计算法线、法线方向
研究使用vtk,必须要深入底层的实现方法,因为不管以后自己用来开发3D处理的框架还是用其他的cgal.pytorch3d.openmesh等框架,都需要将各种点线面的处理算法进行改造使用. inlin ...
- 【算法】计算三角形面积
题目 平面上有一个三角形,它的三个顶点坐标分别为(x1, y1), (x2, y2), (x3, y3),那么请问这个三角形的面积是多少,精确到小数点后两位.. Input 输入仅一行,包括6个单精度 ...
- matlab 计算阴影面积,MATLAB求解阴影面积
Figure 1 Matlab solution: STEP 1. Find the possible intersection points on two circles. ![][01] [01] ...
- 计算三角形面积循环结构c语言,c语言如何求三角形的面积_后端开发
php开发模式MVC中的控制器的作用_后端开发 MVC是一种将业务逻辑.数据.界面显示分离的方法,其控制器的作用是将业务逻辑聚集到控制器里面,从而实现在改进和个性化定制界面及用户交互的同时,不需要重新 ...
- 蒙特卡洛算法学习笔记
导语 蒙特卡洛算法是一大类随机算法,通过随机样本来估算真实值. 本节课我们使用几个例子来讲解蒙特卡洛算法. 通过均匀抽样计算π\piπ 假如我们不知道π\piπ值,现在我们来估算π\piπ值,假设我们 ...
最新文章
- java画笔覆盖在界面_Java实现画图程序和重绘
- 站在巨人的肩膀上,Adrian与dlib中face_recongnition模块的贡献者Adam的采访部分翻译
- Ubuntu21.04开机自动挂载Windows硬盘分区
- linux php运行用户名和密码,Linux实例(一)使用用户名密码验证连接Linux
- vs2008C1902程序数据库管理不匹配
- 同一个电脑可安装多个python版本吗_Linux下如何安装多个Python版本
- web项目中保存emoji到mysql数据库
- Lucene.NET入门实例
- Java继承中的构造方法使用的理解,白话文,简单易理解
- 用excel做logistic回归分析_利用Excel进行统计分析——入门篇
- 【清华大学】深入理解操作系统(陈渝) 第二章
- 电池SOC仿真系列-基于粒子群算法电池参数辨识
- 故障处理 | 网站500,无法打开站点(突然无法打开,代码和服务器没做调整)
- 计算机术语int,整型(计算机语言)_百度百科
- db是哪个城市的缩写_全国所有城市拼音及缩写
- 开始尝试淘宝直通车推广
- 多线程服务器的典型适用场合
- 如何让ffplay或者ffmpeg支持H265编码的rtmp/http-flv 实时直播流
- Oasys Analysis and Design of Concrete (ADC) v8.1 1CD
- 对视频的分辨率大小进行裁剪