用Sympy符号求解方程

时间:2013-08-30 07:21:51

标签: python solver sympy

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中的移植。

1 个答案:

答案 0 :(得分: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