【发布时间】:2017-02-08 14:45:04
【问题描述】:
我正在学习 Python 和概率。
我有这样的表达:
c = n! /((n-1)!1!) + 2*n! /((n-2)*2!) + 3*n!/((n-3)*3!) + ...+ n*n!/((n-n)*n!
0! = 1 和 !表示“阶乘”,即 n! = 1*2*3*...*(n-1)*n。 等于:
(a + n^b)*2^(c*n + d). (^ signifies exponent)
我的目标是使用“蛮力”确定参数 a、b、c、d。
我使用上面的公式 c 计算了 n=3 (12), n=4 (38), n=5 (80), n=6 (192), n=7 (448)。
然后我将参数表示为两个整数的比率:即 a = a1/a2, b=b1/b2, c=c1/c2, d=d1/d2。
最后我定义了以下函数:
def com():
parms = []
for a1 in range(-10, 10):
for a2 in range(1,11):
for b1 in range(-10,10):
for b2 in range(1, 11):
for c1 in range(-10,10):
for c2 in range(1, 11):
for d1 in range(-10 , 10):
for d2 in range(1 , 11):
a = a1/a2
b = b1/b2
c = c1/c2
d = d1/d2
cr1 = ( 12 == (a + 3**b)*2**(c*3+d) )
cr2 = ( 38 == (a + 4**b)*2**(c*4+d) )
cr3 = ( 80 == (a + 5**b)*2**(c*5+d) )
cr4 = ( 192 == (a + 6**b)*2**(c*6+d) )
cr5 = ( 448 == (a + 7**b)*2**(c*7+d) )
criterion = cr1 & cr2 & cr3 & cr4 & cr5
if criterion == 1 :
parms = [a, b, c, d]
break
return parms
但是,我的函数返回一个空列表。
你能解释一下吗?您对如何实现我的目标有什么建议吗?
您的建议将不胜感激。
【问题讨论】:
-
嵌套太极端了;结帐
itertools -
你尝试调试什么程序?你试过打印出a、b、c、d吗?是否有 a、b、c、d 的值产生非常接近 12、38、80 等的近似值?为什么您认为在这个范围内有解决方案?
-
仅供参考,您的 a、b、c 和 d 值将是整数,因此不包含您期望的值。 (如果我明白你在做什么)。您可能希望将它们转换为浮点数 (
a = float(a1/a2)) -
@bouletta 不确定我是否正确理解了您的观点,但请注意,在 Python 2 中,
a = float(a1/a2)给出0.0,例如,a1=1和a2=2。不确定 OP 使用的是哪个版本,但如果你希望它是一个浮点数,你需要a = float(a1)/a2 -
@roganjosh 你是完全正确的。我写得太快了!你的版本当然是我的意思。
标签: python algorithm numerical-methods