【发布时间】:2020-10-16 19:58:22
【问题描述】:
我正在尝试运行此函数以求解 f(f(....(f(x))) = x 形式的方程,这是我的 python 代码:
from sympy import *
x=symbols('x')
def give_list(x1):
P,Q=x**2-1,x
l=[]
for k in range(x1):
print(x1)
U=P/Q
P,Q=P.simplify(),Q.simplify()
eqn = U - 1/U - x
l+=(Poly(eqn.as_numer_denom()[0]).nroots(n=4))
P,Q=P**2-Q**2,P*Q
P,Q=P.simplify(),Q.simplify()
return l
print(len(give_list(24)))
我收到了这个错误:
24
24
24
24
24
24
Traceback (most recent call last):
File "C:\Users\MSI\AppData\Local\Programs\Python\Python39\lib\site-packages\sympy\polys\polytools.py", line 3649, in nroots
roots = mpmath.polyroots(coeffs, maxsteps=maxsteps,
File "C:\Users\MSI\AppData\Local\Programs\Python\Python39\lib\site-packages\mpmath\calculus\polynomials.py", line 195, in polyroots
raise ctx.NoConvergence("Didn't converge in maxsteps=%d steps." \
mpmath.libmp.libhyper.NoConvergence: Didn't converge in maxsteps=50 steps.
在处理上述异常的过程中,又发生了一个异常:
Traceback (most recent call last):
File "C:\Users\MSI\AppData\Local\Programs\Python\Python39\PE729.py", line 66, in <module>
print(len(give_list(24)))
File "C:\Users\MSI\AppData\Local\Programs\Python\Python39\PE729.py", line 62, in give_list
l+=(Poly(eqn.as_numer_denom()[0]).nroots(n=4))
File "C:\Users\MSI\AppData\Local\Programs\Python\Python39\lib\site-packages\sympy\polys\polytools.py", line 3657, in nroots
raise NoConvergence(
mpmath.libmp.libhyper.NoConvergence: convergence to root failed; try n < 4 or maxsteps > 50
注意:我不能再减少 n 了,是否有另一种解决方案可以使用 x1 = 24 运行我的函数 give_list
【问题讨论】:
-
您好,您是否尝试过设置更高的最大步数?您能否更明确地说明您要解决的方程是什么?
-
我想提高 n 的值(n = 4 对我来说更精确),不,我没有尝试更改 maxsetps(我不知道在哪里更改它代码 ) ,问题是:给定 f(x) = x-1/x ,我想解决 f(f(x) = x , f(f(f(x)) = x , f(f(f (f(x))) = x 等
-
嗯,这很奇怪。假设您有一个
x和f(x)=x它应该遵循 f(f(f(x)))=f(f(x))=f(x)=x 对吗?那么为什么不直接解决 f(x)=x 呢? -
maxsteps是nroots的关键字参数。默认情况下它是 50,因此它会执行 50 步以更接近解决方案,如果它所拥有的还不够接近,则会引发错误。 -
是的,函数很奇怪,但是 f(x)=x 没有解决方案,另一方面,f(f(f(x))=x 给我解决方案,我没有'不明白你的推理
标签: python calculation