蒙特卡罗模拟法 —— matlab
生活随笔
收集整理的這篇文章主要介紹了
蒙特卡罗模拟法 —— matlab
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
1.簡介
2.實例分析
2.1 模擬求近似圓周率
2.2?估算定積分
2.3?求解整數(shù)規(guī)劃
1.簡介
????????蒙特卡洛又稱隨機抽樣或統(tǒng)計試驗,就是產(chǎn)生隨機變量,帶入模型算的結果,尋優(yōu)方面,只要模擬次數(shù)夠多,最終是可以找到最優(yōu)解或接近最優(yōu)的解。
???????? 基本思想:為了解決數(shù)學、物理、工程技術等方面的問題,首先建立一個概率模型或隨機過程,使它的參數(shù)等于問題的解;然后通過對模型或過程的觀察或抽樣試驗來計算所求參數(shù)的統(tǒng)計特征,最后給出所求解的近似值。
2.實例分析
2.1 模擬求近似圓周率
????????繪制單位圓和外接正方形,正方形ABCD的面積為:2*2=4,圓的面積為:S=Π*1*1=Π,現(xiàn)在模擬產(chǎn)生在正方形ABCD中均勻分布的點n個,如果這n個點中有m個點在該圓內,則圓的面積與正方形ABCD的面積之比可近似為m/n
程序如下:
%%1.模擬求近似圓周率 clc;clear;close all num=0:10:200000; mypi=ones(1,length(num)); for j=1:length(num)n=num(j);m=0; for i=1:nif (-1+2*rand)^2+(-1+2*rand)^2<=1m=m+1;endendmypi(j)=4*m/n; end plot(mypi) hold on line([0 ,length(num)*1.1],[pi,pi],'color','r') text(0,pi,'\pi','color','r','fontsize',16) legend('模擬π','實際π') grid minor返回:
2.2?估算定積分
程序如下:
%%用蒙特卡羅法估算定積分 clc;clear;close all; num=0:500:10^6; s=ones(1,length(num)); for j=1:length(num)n=num(j);a=0;b=1;d=max(a,b)+1;m=0;for i=1:nx=a+rand*(b-a);y=d*rand;if y<=x^2m=m+1;endends(j)=m/n*d*(b-a); end plot(s) hold on line([0 ,length(num)*1.1],[1/3,1/3],'color','r') text(0,pi,'1/3','color','r','fontsize',16) legend('模擬','實際1/3') grid minor返回:
2.3?求解整數(shù)規(guī)劃
要解的方程為:
條件如下:
程序如下:
%%用蒙特卡羅法求解整數(shù)規(guī)劃 clc;clear;close all; rand('state',sum(clock)); %設置該命令是因為每次產(chǎn)生隨機數(shù)的時候,隨機數(shù)生成器觸發(fā)器的狀態(tài)都會翻轉一次。 %matlab生成的隨機數(shù)是偽隨機數(shù),因此可生成時間相關的隨機數(shù),總之和當前時間相關。 %如果計算機運算太快的話,可能會生成相同隨機數(shù) p0=0;tic %計時開始 for i=1:10^7%只要次數(shù)夠高,最后肯定是實際的最優(yōu)值 x=randi([0,99],1,3);%產(chǎn)生一行五列的區(qū)間在【0,99】上的隨機整數(shù) f=2*x(1)+3*x(1)^2+3*x(2)+x(2)^2+x(3);%主函數(shù) g=[x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3) x(1)+x(1)^2+x(2)+x(2)^2-x(3) 2*x(1)+x(1)^2+2*x(2)+x(3) x(1)+2*x(2)];%條件 if g(1,1)<=100&&g(2,1)<=500&&g(3,1)<=400&&g(4,1)>=10 if p0<f%如果求最小值,則將if p0<f中的<改成>符號 x0=x; p0=f;%記錄當前較好的解 endend end x0 %x0為x1,x2,x3的值 p0 %p0為函數(shù)最大值toc%計時結束返回:
總結
以上是生活随笔為你收集整理的蒙特卡罗模拟法 —— matlab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TOPSIS与模糊Borda 的组合应用
- 下一篇: mysql数据库连接异常,mysql连接