2016-04-03 85 views
0

我正在編寫一個代碼,用Octave中的蒙特卡羅模擬來給出一組給定的邊界條件的拉普拉斯算法。我寫了最初的代碼來尋找單一的解決方案,但是這需要運行好幾次,然後平均得到一個很好,順利的解決方案。這是我需要幫助的部分,因爲我不知道如何去做。我寫的代碼是:用蒙特卡洛模擬使用八度的平均解決方案

a=20; 
s=1 

for (m=s:s:a-s); 
for (n=s:s:a-s); 

x=m; 
y=n; 

for (i=1:5000) 
R=randi(4); 
if (R==1) 
    xnew=x+s; 
    ynew=y; 
elseif (R==2) 
    xnew=x-s; 
    ynew=y; 
elseif (R==3) 
    xnew=x; 
    ynew=y+s; 
elseif (R==4) 
    xnew=x; 
    ynew=y-s; 
endif 

%hold on; 
%figure(1); 
%plot([x xnew],[y ynew]) 

x=xnew; 
y=ynew; 

if (x==0); 
    u(n,m)=sin(pi*y/a); 
    break 
elseif (x==a); 
    u(n,m)=0; 
    break 
elseif (y==0); 
    u(n,m)=0; 
    break 
elseif (y==a); 
    u(n,m)=0; 
    break 
else 
    continue; 
endif 

endfor 


endfor 
endfor 

figure(2); 
contour(u) 

換句話說,我想要做的是創紀錄的「U」(解決方案),再次運行程序,錄製的「U」該值這個價值,繼續這個過程一百次左右,然後將它們平均並等高線繪製平均解。我對腳本相當陌生,所以你可以給任何建議,將不勝感激。

謝謝你,史蒂夫

回答

0

你爲什麼不乾脆把它變成另一個循環和存儲變量?

av_u=0; 
count=0; 
for i=1:hundred times 
    %>>>your code to get u here<<< 
    av_u=av_u+u; 
    count=count+1; 
end 
av_u=av_u/count;