楼主: spring0214
9780 11

求助,如何用matlab做蒙特卡罗模拟!!?? [推广有奖]

  • 0关注
  • 0粉丝

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
33 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
92 点
帖子
4
精华
0
在线时间
0 小时
注册时间
2007-4-17
最后登录
2007-4-18

楼主
spring0214 发表于 2007-4-17 09:00:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求助,如何用matlab做蒙特卡罗模拟!!??哪位朋友有相关程序阿,能给我发一个吗:spring0214@163.com 不胜感激!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:蒙特卡罗模拟 MATLAB matla atlab 蒙特卡罗 MATLAB 蒙特卡罗 模拟

沙发
shibarly 发表于 2009-3-6 15:15:00

楼上的spring0214朋友,你找到蒙特卡洛模拟的程序了么?有的话能不能发给我一份,谢谢!!!我的邮箱:wuyanli730@yahoo.cn

万分感激!!

藤椅
qianjb81 发表于 2009-3-8 11:45:00

re: 求助,如何用matlab做蒙特卡罗模拟!!??

monte carlo模拟有很多种,取决于实验目的。在matlab下面,生成随机数,然后进行了相关操作。随便找个模拟程序,未必有帮助。

板凳
fanglu0327 发表于 2010-6-15 17:30:30
请问楼上知道蒙特卡罗模拟法求VaR值的程序吗?

报纸
monker 发表于 2010-8-5 10:42:18
本人正在钻研,等做好了贴出来分享,matlab的程序。

地板
cleverxy007 发表于 2011-1-21 16:08:49
麻烦也发我一个吧:yi-zhang-2004@hotmail.com. 谢谢啦!

7
liuxin9023 发表于 2011-1-22 00:26:02
请楼上搜索本站 类似内容举不胜举

8
woody168 发表于 2011-4-16 21:14:47
别走私发到邮箱啊,贴在这里哈,大家一起看

9
woody168 发表于 2011-4-16 21:18:18
7# liuxin9023

最晕你这种人了,知道就直接说,说废话干啥噢

10
matlab-007 发表于 2014-12-1 19:39:01
我这儿正好有份程序,希望有所帮助。
代码:
一份蒙特卡洛程序
count=input('input the count:');%输入模拟粒子数
sigmaedata=[28370,13845,6908,2555,1223,2602,1925,905.3,479.7,164.5,74.24,23.86,66.60,36.62,22.29,9.978,5.298,1.668,0.7378,0.2361,0.1099,0.06211,0.03939,0.02030];
sigmacdata=[0.0220,0.0393,0.0568,0.0904,0.1209,0.1479,0.1722,0.2136,0.2480,0.3092,0.3486,0.3932,0.4153,0.4268,0.4319,0.4291,0.4215,0.3969,0.3691,0.3269,0.2944,0.2709,0.2512,0.2209];
Edata=[1,1.5,2,3,4,5,6,8,10,15,20,30,40,50,60,80,100,150,200,300,400,500,600,800];%截面数据
channel=zeros(1,ceil(662/5)+10);%多道数组
nget=0;%探测到的总计数
ntotal=0;%进入探测器的总计数
for ii=1:count%count个粒子循环
collidetime=0;%当前粒子碰撞次数
%粒子状态初始化
E0=622;
E=E0;
z=-2;
r=0;
theta=2*pi*rand(1);% 源抽样,z,r,theta坐标
miu=2*rand(1)-1;
fai=2*pi*rand(1);%方向角抽样
if miu<cos(pi/4) %是否能进入探测器
    continue;
else
    z=0;
    r=2*sqrt(1-miu^2)/miu;
    theta=fai;
end
while E>1%一个粒子在闪烁体中的输运过程
sigmae=interp1(Edata,sigmaedata,E,'linear');
sigmac=interp1(Edata,sigmacdata,E,'linear');
sigmat=sigmae+sigmac;%线性插值得到截面数据
L=-log(rand(1))/sigmat;%下次碰撞的距离
%计算下次碰撞位置坐标
rnew=sqrt(r^2+L^2*(1-miu^2)+2*r*L*sqrt(1-miu^2)*cos(fai-theta));
z=z+L*miu;
cdth=(rnew^2+r^2-L^2*(1-miu^2))/2/r/rnew;
sdth=L*sqrt(1-miu^2)*sin(fai-theta)/rnew;
dtheta=asin(sdth);
    if cdth<0
        dtheta=pi-dtheta;
    end
theta=theta+dtheta;
r=rnew;
    if(r>2)|(z>=4)|(z<0)%判断是否在闪烁体内
        break;
    else
        collidetime=collidetime+1;
    end
if rand(1)<(sigmae/sigmat) %光电效应
  E=0;
else%康普顿散射
    alpha=E/511;
    flag=0;
    while flag==0
        if rand(1)<=27/(4*alpha+29)
            x=(1+2*alpha)/(1+2*alpha*rand(1));
                if rand(1)<=0.5*((alpha+1-x/alpha)^2+1)
                    flag=1;
                end
        else
            x=1+2*alpha*rand(1);
            if rand(1)<=27/4*((x-1)^2)/x^3
                flag=1;
            end            
        end
    end  
    E=E/x;
    alphat=alpha/x;
    miuL=1-1/alphat+1/alpha;%散射后的方向
    a=miuL;
    b=sqrt(1-a^2);
    randangle=2*pi*rand(1);
    miunew=a*miu+b*sqrt(1-miu^2)*cos(randangle);
    sdf=b*sin(randangle)/sqrt(1-miunew^2);
    cdf=(a-miu*miunew)/sqrt(1-miu^2)/sqrt(1-miunew^2);
    sfn=sdf*cos(fai)+cdf*sin(fai);
    cfn=cdf*cos(fai)-sdf*sin(fai);
    fainew=asin(sfn);
    if(cfn<0)
        fainew=pi-fainew;
    end
    fai=fainew;
    miu=miunew;
end%conputon/electtron
%记录结果
end%while
ntotal=ntotal+1;%进入探测器的总计数
if collidetime>0
nget=nget+1;%探测到的计数
Edown=E0-E;%沉积能量
FWHM=0.01+0.05*sqrt(Edown+0.4*Edown^2);
delta=0.4247*FWHM;
Eget=Edown+delta*randn(1);%记录能量
num=ceil(Eget/5); %寻道址
    if num~=0
        channel(num)=channel(num)+1;
    end
end
end%for count
plot(channel);
fprintf(1,'探测效率为%1.5f',nget/ntotal);

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 05:54