我尝试使用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*
答案 0 :(得分:1)
只需更改取幂(导致复杂的结果)
q**q1 < 0:
乘法
q*q1 < 0:
或者找另一种比较符号的方法。例如,C具有signbit功能。