楼主这个题目有点问题,灾害损失数据不知道,所以不知道你给出的数据是否符合你所说的那种特定分布(比如正态分布、泊松分布),但你要从某种分布(我用你给出的分布:正态、泊松分布做出模拟)的数据中找出最大值还是有办法的,希望能对你具体计算有所启发。如下:
(我用随机数模拟的方法,假设灾害损失数据个数为200个,灾害损失次数为200个)Matlab程序:
%%%%%%%%%%
%蒙特卡罗方法模拟灾害问题
clc;clear;
r=normrnd(91388,13577,[1 200]) %建立灾害损失程度随机数组(u为 91388, sigama为13577的正态分布,数据为200个)
p=poissrnd(8,[1 200]) %建立灾害次数随机数组(lamda等于8的poisson分布,数据为200个)
rmax=max(max(r)) %输出正态矩阵中最大值
pmax=max(max(p)) %输出泊松矩阵中最大值
%%%%%%%%%%
结果如下:
rmax =126008
pmax = 21
这个很简单的。掌握了这两个函数就行了。有什么问题欢迎探讨QQ:182335530
6月1日·回答补充
首先,normrnd这个函数是存在的。其次,看了你发的数据图,我对你问的问题有点迷惑,请问你要的“从每年当中选出一个极大值”这个“极大值”是否是指的:“每年最有可能遭到的最大经济损失”?如果是的话,答案很明显,是1亿元乘以每年发生的灾害次数,并不需要matlab计算,直接观察就可以得到答案;如果指的是:“每年最有可能遭受的经济损失”,那么这是一个二维随机变量的计算,容易求出。
6月2日·回答补充
首先说声对不起,问题反复研究,我发现你给出的条件不够,问题在于给出的灾害经济损失数据是确定的,而又说其服从对数正态分布,其实此处服的数据服从哪种分布已经不重要了,因为数据是确定的。如果这个数据需要用对数正态分布的蒙特卡罗方法模拟的话或许会有其他办法,因为你问题的题目是用的蒙特卡罗方法。除此之外,我能力有限,暂时想不到其他方法来有效解决你所提出的问题,再次再次说声抱歉。
现在按照我的理解解这道题,我求的最终结果是每年最有可能遭受的经济损失,而不是求其中某次最大的。蒙特卡罗方法的体现在于对于其中年份数据(年灾害次数)的模拟,使用了lamda=8的泊松分布,函数为poissrnd;然后求出每年最有可能遭受的经济损失(期望);再给出年灾害次数与各类灾害造成经济损失(亿元)的二维随机变量分布;最后计算出这个分布列中期望与频数的数量积,此值就为:每年最有可能遭受的经济损失。
%%%%%%%%%%%%%Matlab程序如下:%%%%%%%%%%%%%%%
format long;clc;clear;
%相应灾害等级的损失频数:
f1=[142 50 26 13 6 4 1 1 0 1];
%1990年到2006年的灾害次数数据
fa=[8 8 5 8 7 5 9 9 9 9 7 10 4 18 10 11 7];
%模拟1990年之前对应183年间每年发生的灾害次数,服从参数为8的泊松分布如下:
fb=poissrnd(8,[1 183]) ;
%连接前后两组数据
f2=cat(2,fa,fb); %实际数据
subplot(2,1,1);
plot(1807:2006,f2,'r'); %自1807年至2006年每年发生灾害的次数图像
title('每年灾害次数服从amda为8的泊松分布');
subplot(2,1,2);
plot(1:10,f1,'b');
title('灾害经济损失服从对数正态分布')
%每次灾害时发生相应经济损失(亿元)的概率:
for i=1:10
p1(i)=f1(i)/sum(f1);
end
%200年间每年发生灾害的概率
for j=1:200
p2(j)=f2(j)/sum(f2);
end
%关于经济损失和年份的二维随机变量
for j=1:200
for i=1:10
c(j,i)=p2(j)p1(i);
end
end
%计算每年造成的经济损失期望emax
for i=1:10
e(i)=p1(i)i;
end
emax=sum(e);
%损失期望指数;参考:周俊华《中国台风灾害风险评估》p52-p55
%计算相应年份发生灾害的损失
f3=f2' ;%转置每年灾害次数
money=f3emax;
disp('相应年份最可能造成的经济损失');
money
fp=fopen('d:\moneytxt','wt');
fprintf(fp,'%42f ',money);
fclose(fp);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
计算结果如下:
1479 1479 924 1479 1294 924 1664 1664 1664 1664 1294 1848 739 3327 1848 2033 1294 1664 739 1109 1109 1294 1294 1479 1479 1294 739 1109 1294 1294 1294 1109 1848 1664 1294 1294 1479 924 2588 1109 2957 1479 2033 1479 1664 1479 924 1848 1664 1479 1109 2033 924 1848 739 1109 2403 2033 1479 555 1479 1664 555 1109 1479 1294 924 739 1479 2403 370 3327 1109 555 924 739 1109 1664 1848 1848 1294 1479 2033 1109 739 1294 924 1479 2033 2033 924 1848 739 1848 1479 1479 1848 1109 924 924 1294 3512 2957 2218 924 1664 555 1294 924 2033 1294 2033 1479 1664 1848 924 1294 2588 739 1294 1109 924 1664 924 1109 1479 1479 1664 1664 739 1109 1479 1109 1664 1664 1848 555 1848 1479 1664 1479 1109 924 1109 1664 1109 1294 2218 1294 1664 2033 1294 1109 1294 1109 1109 1664 1109 739 1848 1664 1294 1294 1848 2033 739 1479 370 924 2403 2588 1479 2033 1294 924 2033 2957 924 1294 2033 1664 1848 1479 1848 739 2957 924 2403 2218 924 739 1294 1294 1109 2403 1848 1479 1109 1479 1109
%%%%%%%%文件存储于D:/moneytxt,是short型数据%%%%%%%%%%%%
模拟点如下:
用法如下:1、首先要求的是先打开泊松分布表,然后按照方法进行查找。
2、首先找到泊松分布表的分布函数,如果知道λ的值,在列表中找到对应的P是多少。
3、与查表得到的值完美吻合,即问题解决。泊松分布的概率公式:P{X=k}=(λ^k/k)。Poisson分布,是一种统计与概率学里常见到的离散概率分布,由法国数学家西莫恩·德尼·泊松(Siméon-DenisPoisson)在1838年时发表。泊松分布的预测区间可以通过计算概率的方法来求得,主要是对对应的概率事件进行计算,等分配相应的概率空间,然后通过连续的方式求出预测范围。首先要计算预测区间的上限,首先确定最大值,然后计算从小到大的概率,当概率累计到达一定值时,即为预测区间的上限。而下限的求法也是一样,从大到小计算概率,当概率累计到达一定值时,即为预测区间的下限。由此可以得出泊松分布的预测区间。
用matlab 上画泊松分布图,首先用cdf函数求出当入=3时P{X=k}的值,然后用plot函数绘出其图形。实现过程如下:
x=0:1:10;
y =cdf('Poisson',x,3)
plot(x,y)
double U_Rand( double a,double b ) // 均匀分布
{
double x=random( MAX_VAL );
return a + (b - a)x/(MAX_VAL - 1);
}
double P_Rand( double Lamda ) // 泊松分布
{
double x=0,b=1,c=exp( -Lamda ),u;
do{
u = U_Rand( 0,1 );
b = u;
if( b >= c )
x ++;
}while( b >= c );
return x;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)