我试图使用数组来做这件事,但是我缺乏任何编程技巧使得这很困难。所以在这里尝试别的东西。
我有一个程序:
for x in range (0,N2):
I=1 #resets the variables
Q=0
U=0
for x in range (0,N):
theta= 90+randint (-dtheta,dtheta) #random component
Q0=Q
U0=U
I0=I
I=(I0*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
Q=(Ip*cos(2*theta)+Q0)*exp(-dT)
U=(Ip*sin(2*theta)+U0)*exp(-dT)
P=100*sqrt(Q**2+U**2)/I
print 'x=', x, 'P=', P
因此,程序通过复杂的方程式获得P值,并循环遍历这些方程N
次。然后它会随机更改一些变量,并经过N2
次过程。
我要做的是:每N2
次点击N
值,我想要这些值的平均值。
这是当前打印的程序(打印x
和P
)。
x=0 P= 0.666656790299
x=1 P= 1.33305129414
x=2 P= 1.99135189726
x=3 P= 2.65356540458
x=4 P= 3.31718464722
x=5 P= 3.94383330744
x=6 P= 4.57470649236
x=7 P= 5.22041300059
x=8 P= 5.87783977662
x=9 P= 6.53297448834
x=0 P= 0.666656790299
x=1 P= 1.33244225853
x=2 P= 1.96631331155
x=3 P= 2.6285933052
x=4 P= 3.2901846442
x=5 P= 3.95565476517
x=6 P= 4.61500717059
x=7 P= 5.27548752021
x=8 P= 5.87881617052
x=9 P= 6.53895040683
其中N2 = 2且N = 10。你看到有两个值如.66(x=0
)吗?还有两个像6.5(x=9
)?我希望能够得到具有相同N值的所有数字的平均值。因此,所有x = 0值(〜.66)的平均值x = 1值(~1.33)一直到x = 9值(~6.65)。
最终目标是将所有这些平均值与N进行对比。
任何帮助都会令人惊讶,因为我对编程几乎一无所知。
答案 0 :(得分:0)
我仍然不确定你在循环中请求平均值的位置。
将一个计数器变量置于其外。计算你计算P的次数。然后有一个sum_p变量来保持计算出的所有P的总值。
然后平均值只是sum_p / cnt。
如果你想开始追踪新的平均值,你可以设置cnt = 0和sum_p = 0.我们有免费的cnt与N.
for x in range (0,N2):
I=1 #resets the variables
Q=0
U=0
sum_p = 0
for x in range (0,N):
theta= 90+randint (-dtheta,dtheta) #random component
Q0=Q
U0=U
I0=I
I=(I0*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
Q=(Ip*cos(2*theta)+Q0)*exp(-dT)
U=(Ip*sin(2*theta)+U0)*exp(-dT)
P=100*sqrt(Q**2+U**2)/I
sum+p += P
print P
print 'Avg', sum_p//N
我不确定你为什么要创建Q,U,I的副本。而不是仅仅在计算中使用前一个副本。这是完全有效的,它使用旧值并设置新值。
I=(I*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
Q=(Ip*cos(2*theta)+Q)*exp(-dT)
U=(Ip*sin(2*theta)+U)*exp(-dT)