3

Sympy无法解决以下代码吗?几分钟前我已经执行了这段代码,但它打印n = 5在屏幕上并且卡住了。

import sympy

Wmin = 31
m = 8

p = sympy.symbols('p')

for n in range(5, 10):
    print 'n = %3d' % n

    denominator = (1 + Wmin + p * Wmin * ((1 - (2 * p) ** m) / (1 - 2 * p)))
    right = 1 - (1 - 2 / denominator) ** (n - 1)

    p_solve = sympy.solve(sympy.Eq(p, right))

    print p_solve

实际上,我已经在 MATLAB 中用二分法求解了方程,我目前正在修改没有二分法并在 Python 中移植。

4

1 回答 1

1

您可以使用 nsolve 来解决这样的问题——但您需要猜测解决方案可能在哪里:

>>> for n in range(5, 10):
...     print 'n = %3d' % n
...     denominator = (1 + Wmin + p * Wmin * ((1 - (2 * p) ** m) / (1 - 2 * p)))

...     right = 1 - (1 - 2 / denominator) ** (n - 1)
...     p_solve = nsolve(sympy.Eq(p, right),p,0)
...     print p_solve
...
n =   5
0.181881594898608
n =   6
0.210681675044646
n =   7
0.235278433487669
n =   8
0.256480923202426
n =   9
0.27492972759045
于 2014-06-08T23:50:51.867 回答