蒙特卡洛方法是一种利用计算机的随机数理论模拟实际的情况的一种方法。今天主要是以实例讲解蒙特卡洛方法的MATLAB编程实现。 实例1 程序清除命令行窗口命令清除工作区变量关闭图形窗口L1;正方形长度n100000;计算随机生成的10万点数科学计数法随机生成〔0,1〕范围内的随机数xunifrnd(0,L,〔1n〕);unifrnd连续均匀分布的随机数生成器yunifrnd(0,L,〔1n〕);pinshusum((x。2y。2L));判断点是否在单位圆内ixfind(x。2y。2L);绘图plot(〔0LL0〕,〔00LL〕,k);plot(x(ix),y(ix),r。);Pai4输出结果fprintf(蒙特卡洛算法求解圆周率:。20f,Pai);xlim(〔0L1。2〕);ylim(〔0L1。2〕);legend(正方形区域,单位圆内的点); 运行结果 实例2 程序symsxyf1x。42。y。481;f2x。2y。24;ezplot(f1);ezplot(f2);n1e6;xunifrnd(6,6,〔1n〕);unifrnd连续均匀分布的随机数生成器yunifrnd(6,6,〔1n〕);pinshusum((x。42。y。481)(x。2y。24));area1212pinshuncount0;fori1:nif(x(i)42y(i)4)81(x(i)2y(i)24)countcount1;x1(count)x(i);y1(count)y(i);plot(x1,y1,r);title(面积区域)结果area22。7863 运行结果 实例3 模拟抛硬币,计算正面出现的频率,并画出随着试验次数n的增大,频率和概率的关系图。(unidrnd(N):生成最大值为N的随机正整数。) 程序模拟抛硬币n100:1:1000;fori1:length(n)numn(i);xrand(1,num);rand(size)随机生成0到1之间均匀分布的浮点数假设大于0。5为硬币向上indexfind(x0。5);count(i)length(index);p(i)count(i)plot(n,p,r);xlabel(次数n);ylabel(正面向上的频率)ylim(〔01〕);disp(随着n不断增大,频率稳定在概率0。5。) 运行结果 实例4 程序a0;b1;f(x)4。(1x。2);n〔100100010000100000〕fori1:length(n)trand(1,n(i));rand(size)随机生成0到1之间均匀分布的浮点数xa(ba)t;ssum(f(x));S(i)s(ba)n(i);endSerrorpiS 运行结果n100100010000100000S3。19963。12273。13723。1419error0。05800。01890。00430。0003 网络上其他蒙特卡洛计算程序 程序dt1365。0;一天的年单位时间S020;股票在初始时刻的价格,程序中假设r0。031;期望收益率sigma0。6;波动率0。6expT漂移项dtstddevsigmasqrt(dt);波动项o:dz(t)nDays190;要模拟的总天数fornDays1:nDays1nDays表示时刻tnTrials10000;模拟次数forj1:nTrialsnrandn(1,nDays);生成nDays个标准正态分布随机数SS0;fori1:nDaysdSS(expTermstddevn(i));模拟计算股票价格的增量SSdS;计算股票价格endS1(nDays,j)S;将每天的股票模拟价格数据记录在S1中endendS2mean(S1);计算每天模拟的股票价格的均值,作为价格的估值plot(S2,o)90天期间股票价格估值的曲线图figure(2)hist(S1(90,:),0:0。5:65)第90天的股票价格模拟的直方图 运行结果 程序T1;S048;underlyingasset(股票为主)期初价格r0。05;riskfreerate无风险利率NStep200;numberofsteps将时间分成200份deltaTTNSTimeStepSigma0。1;StrandDerivationRep20000;Numberofreplication重复试验次数mu(rSigma22)deltaT;sigmadeltaSigmasqrt(deltaT);计算增量Incrementsmusigmadelta。randn(NStep,Rep);增量为(rsigma22)(Tt)加上标准差0,1正态分布的数,一共200个20000次模拟计算对数价格LogPricecumsum(〔log(S0)ones(1,Rep);Increments〕);累加增量之后返回1到20000次的价格PricePathexp(LogPrice);对价格路径画图plot(PricePath)title(SimulationofPricePath)ylabel(StockPrice);xlabel(TimeStep);xlim(〔0,NStep〕); 运行结果 本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。 作者郭志龙 编辑郭志龙 校对郭志龙