我有下面的代码,我只是写它的最后一部分。出于某些原因,我们使用random.normal
值。很明显,func
函数有三个变量。你知道吗
我的问题是:计算的步骤是101
,而输出中的每个参数都有100
值。如果您看到Wo[i]>0
和Omo[i]<0
,我应该如何告诉Python重新计算该步骤(这将使用另一个随机数),直到得到正确的答案(Wo[i]<0 and Omo[i]>0
。你知道吗
我们必须这样做,因为如果我们打印输出,然后删除那些不满足条件的值,例如,我们有60个值而不是100个值。我知道我们可以用while loop
,但我不知道怎么用。你知道吗
N=101
for i in range (1,N):
R=np.random.uniform(0,1)
Omn[i] = Omo[i-1] + 0.05 * np.random.normal()
Wn[i] = Wo[i-1] + 0.05 * np.random.normal()
Mn[i] = Mo[i-1] + 0.1 * np.random.normal()
L = exp(-0.5 * ( func(Omn[i], Wn[i], Mn[i] ) - func( Omo[i-1], Wo[i-1], Mo[i-1] )))
if L>R:
Wo[i]=Wn[i]
Mo[i]=Mn[i]
Omo[i]=Omn[i]
else:
Wo[i]=Wo[i-1]
Mo[i]=Mo[i-1]
Omo[i]=Omo[i-1]
print(Wo[i],Mo[i],Omo[i])
您可以使用普通while循环并在计算后检查条件,例如:
插入
while
循环以重复所需的计算。你知道吗当
L > R
、Wo
和Omo
用Omn
和Wn
值更新时。所以如果这个值是Omn<0
或者Wn>0
,你需要重新计算它们。 从上一次迭代计算L <= R
、Wo
和Omo
时。因为上一次迭代已经是Wo[i]<=0
和Omo[i]>=0
,所以不需要重复这些计算。你知道吗因此,如下面的代码所示,您只需要重新计算Omn和Wn变量:
相关问题 更多 >
编程相关推荐