當前位置:編程學習大全網 - 編程語言 - Maltlab編程示例

Maltlab編程示例

樓上兩位的回答很有思想,很精彩。贊壹個。

我的代碼有以下優點:

(1) A采用稀疏矩陣存儲,克服內存不足的問題(n為1百萬,使用的內存小於20M)。

(2)繪圖動態顯示N次模擬過程中r/R的變化。

代碼如下(已作為附件上傳):

n?=?1000000;

m?=?2 * N;

答?=?稀疏(M+1,?m+1);

j?=?n?+?1;

k?=?n?+?1;

b?=?ceil(4*rand(1,N));

%?圖中顯示了計算過程(為了提高效率,每N個循環輸出壹個點)

n?=?500;

v?=?零(1,fix(N/n)+1)?*?南;

h?=?劇情(1?:?fix(N/n)+1,?v,?b-',?楠,?楠,?ro’);

xlabel(' N ');

y label(' R/R ');

set(gcf,?' DoubleBuffer ',?上’);

set(gca,?Xlim ',?[1?fix(N/N)+1]);

t = ceil(exp(1:15));

set(gca,' xtick ',t/n,' xgrid ',' on ',' xticklabel ',t)

為了什麽?我?=?1:N

切換?b(壹)

案子?1,?j = j+1;?a(j,k)=a(j,k)+1;

案子?2,?k = k+1;?a(j,k)=a(j,k)+1;

案子?3,?j = j-1;?a(j,k)=a(j,k)+1;

案子?4,?k = k-1;?a(j,k)=a(j,k)+1;

結束

%?更新繪圖

如果?~rem(我,?n)?||?我?==?普通

%?註:不能用?sum(a(:)~=0)?算,否則容易導致內存不足。

r?=?full(sum(sum(a ~ = 0));

c?=?fix(log(I));

r?=?full(sum(sum(a = = c));

idx?=?修復(i/n)?+?1;

v(idx)?=?R/R;

set(h(1),?yData ',?五);

set(h(2),?' xData ',?idx,?yData ',?v(idx));

標題(['N?=?'?int 2 str(I)];

drawnow

結束

結束

%?輸出結果

fprintf('R=%i,r=%i,?r/R=%.3g\n\n ',?r,?r,?R/R);

%?計算各個方向的移動次數(驗證隨機數的壹致性)

為了什麽?我?=?1?:?四

Fprintf('方向%i的次數是%i\n ',?我,?sum(b = = I));

結束程序的輸出如下:

R=204146,?r=2856,?r/R=0.014

1方向的次數是249327。

方向2的次數是250179。

方向3的次數是250085。

方向4的次數是250409。

簡單說明幾點:

1,因為是隨機模擬,每次運行的結果都會不壹樣。

2.運動是壹個上下文相關的過程,所以隨機數序列不僅要均勻,還要獨立(相鄰隨機數之間沒有相關性)。

3.圖中虛線表示int(ln(n))變化時的n,計算網格數發生了變化,所以通常是不連續的。

4.從圖中的變化趨勢來看,並沒有明顯收斂到某個數字的跡象。我兩次運行的結果分別是0.0118和0.014。

5.在我的機器上,取n = 1萬,運行時間約為N=100分鐘。

6.該程序對MATLAB版本沒有特殊要求。已經在6.5,2008a,2012b上測試過,可以正常運行。

  • 上一篇:福建自考計算機科學與技術專業就業前景如何?
  • 下一篇:紫金縣藍塘有初中培訓機構嗎
  • copyright 2024編程學習大全網