2013-05-09 81 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)); 

希望这会有所帮助。