matlab编程问题
1个回答
展开全部
function [Smc,St]=MCquad(x,n)
%% 投点法计算高斯曲线积分值x 为上限值 ,n为投点个数
St=1/sqrt(2*pi)*quad(@(y)exp(-y.^2/2),-100,x);%数值积分理论值
%生成-inf(取-10即可) 到x的横坐标随机点
xi=-10+(x+10).*rand(n,1);
%生成纵坐标随机点
yi=rand(n,1);
%统计落到钟形曲线与横坐标轴间点的概率,即为所求的面积与长方形面积之比
m=sum(yi<=exp(-xi.^2/2));
% 计算积分值
Smc=(10+x)*m/n*1/sqrt(2*pi);
计算结果如下
[Smc,St]=MCquad(-3,1000000)
Smc =
0.0014
St =
0.0013
>> [Smc,St]=MCquad(-1,1000000)
Smc =
0.1591
St =
0.1587
>> [Smc,St]=MCquad(-0,1000000)
Smc =
0.4995
St =
0.5000
追问
其实公式是标准正态分布表的公式,我想通过matlab来编程完成分布表,不知可行不?
追答
肯定可行啊,这个式子就是计算积分值的,不过你要求蒙特卡罗法,所以有上面的函数
St=1/sqrt(2*pi)*quad(@(y)exp(-y.^2/2),-100,x);%数值积分
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |