2013-05-09 43 views
0

我是一名物理學家。蒙特卡洛仿真條件循環在MATLAB中

我已經寫了一個關於蒙特卡羅仿真條件的代碼循環代碼。

我在運行這個模擬代碼時遇到了一些錯誤。我想考慮模擬結果的正面價值。當我運行代碼時,出現錯誤。

我正在運行10000次迭代,並且我有五個參數,例如A,B,C,D和E.我通過使用正態分佈幫助的每個參數的方差和平均值生成每個參數的隨機數。

的代碼如下:

n = 10000; 
    Constant = 5; 
    Arand = (3*10^(12)*randn(1,n)) + 7*10^(6)*ones(1,n); 
    Brand = (9*randn(1,n)) + 17*ones(1,n); 
    Crand = (2*10^(-4)*randn(1,n)) + 0.2*ones(1,n); 
    Drand = (0.0017*randn(1,n)) + 0.50*ones(1,n); 
    Erand = (0.00004*randn(1,n)) + 1.5*ones(1,n); 
    if P1 > 0 
     P1 = Constant*Arand.*Brand.*Crand.*Drand.*(1/Erand) 
    end 

    plot(P1); 
+1

1)這段代碼有什麼問題? 2)最初定義的「P1」在哪裏? – Ansari 2013-05-09 20:26:06

+2

這裏有三個錯誤:'Erand =('有一個缺失的括號,第二:P1在'if'之前沒有被定義並且把'1/Erand'改爲'1./Erand' – 2013-05-09 20:28:58

+0

請注意,matlab理解科學數字格式,你可以寫'2e-4'而不是'2 * 10 ^( - 4)' – Serg 2013-05-09 22:27:05

回答

0
P1 = Constant*Arand.*Brand.*Crand.*Drand./Erand; 

目前還不清楚是什麼P1if語句之前。

請注意,「if P1 > 0」表示「if all(P1 > 0)」。

0

如果你想繪製只有那些點,其中,P1爲正需要這方面的變革:

if P1 > 0 
    P1 = Constant*Arand.*Brand.*Crand.*Drand.*(1/Erand) 
end 
plot(P1); 

以下幾點:

定義P1:

P1 = Constant*Arand.*Brand.*Crand.*Drand./Erand; 

,然後選擇僅繪製正值:

plot(P1(P1>0)); 

希望這會有所幫助。