Sympy库中可能存在的错误,当没有虚数时,使用虚数

时间:2014-02-18 02:51:53

标签: python math numerical-methods

我尝试使用Sympy库在python中编写 regula falsi 方法,但是对于某些函数,我遇到了一个问题,告诉我正在使用虚数。

这是我的代码:

def reglaFalsa(fx,p0,p1,tolerancia,iteracionesMaximas):

    fx = S(fx)
    i = 2
    q0 = fx.subs(x,p0)
    q1 = fx.subs(x,p1)


    while i<=iteracionesMaximas:
        p = p1 - q1*(p1-p0)/(q1-q0)
        if absolute(p-p1) < tolerancia:
            return p

        q = fx.subs(x,p)

        if (q**q1) < 0:
            p0 = p
            q0 = q
        else:
            p1 = p
            q1 = q
        i+= 1
    return p

我用以下参数调用了这个:

fx =3*x+sin(x)-2.71828182846**x, po=0.0, p1=2.0, tolerancia=.0001, iteracionesMaximas=15

fx =2*x**2+x-1, po=0.0, p1=1.0, tolerancia=.0001, iteracionesMaximas=15

对于sin(x)作为参数,我应该在某些变量上获得NaN,而不应该

我正在关注Traceback:

Traceback (most recent call last):
  File "../Prácticas/python/ReglaFalsa.py", line 16, in <module>
    print json.dumps(reglaFalsa(y,a,b,tolerancia,iteracionesMaximas), indent=1)
  File "/home/diegoaguilar/Copy/buap/Métodos/Prácticas/python/reglafalsa.py", line 45, in reglaFalsa
    if (q**q1) < 0:
  File "/usr/local/lib/python2.7/dist-packages/sympy/core/decorators.py", line 77, in __sympifyit_wrapper
    return func(a, b)
  File "/usr/local/lib/python2.7/dist-packages/sympy/core/expr.py", line 248, in __lt__
    raise TypeError("Invalid comparison of complex %s" % dif)
TypeError: Invalid comparison of complex 0.0114119631147945 - 0.179219618952309*

1 个答案:

答案 0 :(得分:1)

只需更改取幂(导致复杂的结果)

q**q1 < 0:

乘法

q*q1 < 0: 

或者找另一种比较符号的方法。例如,C具有signbit功能。