蒙特卡洛 光 matlab,用蒙特卡罗法模拟光散射问题
我用蒙特卡罗法模拟光在沙尘环境中的多次散射问题,编写了如下的程序,程序可以运行,但是感觉运行结果不正确。希望写过类似程序的高手可以指点一下。
fai_T=45*pi/180;%发散角
sita_T=10*pi/180;%发射仰角 45
fai_R=45*pi/180;%接收角
sita_R=10*pi/180;%接收仰角 45
Ksray=0.1;%瑞利散射系数 0.145
Ksmie=1.5;%米氏散射系数 0.261a
Ka=0.6;%吸收函数 0.039
Ks=Ksray+Ksmie;%消光系数
K=Ka+Ks; %吸收散射之和
w=1;%权重
A=1;%存活率0.01
g=0.7;%不对称因子0.2
f=0.5;%散射因子
Ar=1.8*10^(-2);%接收孔径
r=4.8;
gama=0.017;%非对称因子 大气粒子尺寸分布?
L=10;%传输距离
%for i=1:1:1000
%%发射端初始位置%%
w=1;
x=0;y=0;z=0;
ux=0;uy=0;uz=1;
while 1
ksi=unifrnd(0,1);
s=-log(ksi)/K;
x=x+ux*s;y=y+uy*s;z=z+uz*s;
if (z>0)&&(z
w=Ks/K.*w; %改变权重
if w>0.0001 %权重是否太小
ksi=unifrnd(0,1);
fai=2*pi*ksi;
temp=(1-g.^2)/(1-g+2*g*ksi);
cos_sita=(1+g.^2-temp.^2)/(2*g);
sin_sita=sqrt(1-cos_sita.^2);
ux1=ux;uy1=uy;uz1=uz;
if abs(uz1)>0.99999
ux=sin_sita*cos(fai);
uy=sin_sita*sin(fai);
uz=uz1/abs(uz1)*cos(fai);
else
temp1=sqrt(1-uz1.^2);
ux=sin_sita*(ux1*uz1*cos(fai)-uy1*sin(fai))/temp1+ux1*cos_sita;
uy=sin_sita*(uy1*uz1*cos(fai)+ux1*sin(fai))/temp1+uy1*cos_sita;
uz=-sin_sita*cos(fai)*temp1+uz1*cos_sita;
end %确定下一个光子的方向
else
ksi=unifrnd(0,1);
if ksi<=1/10
w=10*w;
ksi=unifrnd(0,1);
fai=2*pi*ksi;
temp=(1-g.^2)/(1-g+2*g*ksi);
cos_sita=(1+g.^2-temp.^2)/(2*g);
sin_sita=sqrt(1-cos_sita.^2);
ux1=ux;uy1=uy;uz1=uz;
if abs(uz1)>0.99999
ux=sin_sita*cos(fai);
uy=sin_sita*sin(fai);
uz=uz1/abs(uz1)*cos(fai);
else
temp1=sqrt(1-uz1.^2);
ux=sin_sita*(ux1*uz1*cos(fai)-uy1*sin(fai))/temp1+ux1*cos_sita;
uy=sin_sita*(uy1*uz1*cos(fai)+ux1*sin(fai))/temp1+uy1*cos_sita;
uz=-sin_sita*cos(fai)*temp1+uz1*cos_sita;
end
%确定下一个光子的方向
else
break%此光子结束,追踪下一个光子
end
end
else
sita_i=1/cos(uz);
n_i=1;n_t=2;%ni nt 分别是介质和空气中光子的折射率
sita_t=asin(n_i*sin(sita_i)/n_t); %菲涅尔定律
R=0.5.*((sin(sita_i-sita_t)/sin(sita_i+sita_t)).^2+(tan(sita_i-sita_t)/tan(sita_i+sita_t)).^2);
ksi=unifrnd(0,1);
if ksi
w=w*R;
if z<0
z=-z;
else
z=2*L-z;
end
uz=-uz;
else
w=w*(1-R);
break
end
end
end
%receive(i)=w;
%end
蒙特卡洛 光 matlab,用蒙特卡罗法模拟光散射问题相关推荐
- 2021-04-09 随机模拟—蒙特卡洛方法 Matlab代码实现
随机模拟-蒙特卡洛方法 Matlab代码实现 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出 ...
- 粒子的散射模拟matlab程序,基于Matlab的α粒子的散射实验模拟.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > matlab 基于Matlab的α粒子的散射实验模拟.pdf3页 ...
- 蒙特卡洛方法 matlab 实现
蒙特卡洛方法 matlab 实现 已有 12594 次阅读 2010-10-22 14:12 |个人分类:MATLAB|系统分类:科研笔记|关键词:蒙特卡洛方法 matlab 蒙特卡罗(Monte C ...
- V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电
V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. _:3120644246447334浪迹天涯
- V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电。 充电开始时刻、放电时刻、日行驶里程等参数可以自己设置,易于修改。
V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. :4720644246447334浪迹天涯
- 蒙特卡洛积分 matlab,菜鸟之路——数学建模之蒙特卡罗积分(投点法,平均值法)+牛顿法解方程组MATLAB实现...
蒙特卡罗方法这里不再赘述 1,例题 Matlab代码: %蒙特卡罗法求积分 N=1000; %随机选取1000个点 x=rand(1,N); y=rand(1,N); S=sum(y<=sin( ...
- 【Matlab】蒙特卡罗法模拟圆周率+对应解析的GIF生成【超详细的注释和解释】
文章目录 前言 模拟思路 GIF模拟动图的生成 GIF动图生成的基本思路 单张静态图的生成 GIF的生成 尾声 前言 因为博主最近要准备数学建模大赛了,在学习matlab和python之余,博主也会继 ...
- 数学建模多元线性回归内生性问题的蒙特卡洛模拟matlab代码
回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决.回归分析的任务就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预 ...
- 蒙特卡洛 股票 matlab,风险管理matlab蒙特卡洛模拟股票价格
1. 蒙特卡洛模拟用于风险分析 蒙特卡洛模拟是风险评价.评估中常用的一种方法. 主要用于,当在项目评价中输入的随机变量个数多于3个,每个输入变量可能出现3个以上以致无限多种状态时(如连续随机变量),就 ...
- matlab腔内光子寿命,mcFORnp matlab环境下,利用蒙特卡洛模拟光子包在生物组织内的光路传输 271万源代码下载- www.pudn.com...
文件名称: mcFORnp下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 215 KB 上传时间: 2014-12-29 下载次数: 8 提 供 者: 徐某 ...
最新文章
- npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! test_vue_0613@1.0.0 dev: 错误的解决方法
- 【安全漏洞】朝鲜InkySquid APT组织是怎么利用浏览器漏洞感染受害者
- 计算机将成为学生们的老师英语,七年级英语(牛津版)第一学期7A完成句子练习题...
- 【练习】c++用链栈实现计算器
- WinCE6.0的EBOOT概要
- php设置session 生命周期,设置session的生命周期(php)
- php mysql while循环,PHP_MySQL教程-第二天while循环与数据库操作第2/2页
- PAT乙级(1022 D进制的A+B )
- Spring入门示例及相关概念介绍
- Git 输入命令git branch -a 后怎么返回
- xml转matlab目标检测,将Cityscape转换为PASACAL VOC格式的目标检测数据集
- 2022全国高中数学联赛A1卷T2几何答案
- nginx架构(修改版)
- Idea中Git和SVN如何切换
- ubuntu14.04LTS下搜狗输入法问题汇总 (搜狗输入法崩溃,搜狗输入法候选区乱码,没有搜狗输入法皮肤)
- 告别Anaconda: Pycharm最简单的通过pip下载python包的方法(没有之一)
- VS2017 某项目无法打开包含文件
- 多种UI和界面设计汇总(一)
- 前端获取后端的数组对象处理(去重,排序,转为树状结构)
- 获取本机CPU,硬盘等使用情况