我有这段代码,我试图从 1 到 n 的每次迭代中从函数中获取固定点:
import sympy as sp
def logistica():
return lambda r,x : r * x * (1 - x)
def orbitas_periodicas(f,n):
"""
Calcula las órbitas periódicas con periodo 'n' de una función f
que debe ser polinomica.
"""
lista_res = [] # Lista de listas que guarda los puntos fijos de cada fk con k = 1,2,3,...,n
x = sp.Symbol("x")
for i in range(1, n+1):
print(f"Calculando órbitas periódicas de periodo {i}")
# Calculamos las raices de: ecuacion(x) = f(x) - x = 0
ecuacion = sp.Eq(f(x) - x, 0)
raices = sp.solve(ecuacion)
derivada = sp.diff(f(x), x) # Derivada de f
derivada = sp.lambdify(x, derivada)
aux = []
for raiz in raices:
print(raiz)
if abs(derivada(raiz)) < 1:
aux.append((raiz, "atractivo"))
elif abs(derivada(raiz)) > 1:
aux.append((raiz, "repulsivo"))
lista_res.append(aux)
f = f(f(x))
return lista_res
函数
orbitas_periodicas
的调用方式如下:
f =lambda x: logistica()(5,x)
print(orbitas_periodicas(f, 2))
这是回溯
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
.../hoja1.ipynb Cell 22 line 6
1 c = 5
3 f =lambda x: logistica()(c,x)
----> 6 print(orbitas_periodicas(f, 2))
.../hoja1.ipynb Cell 22 line 1
9 print(f"Calculando órbitas periódicas de periodo {i}")
12 # Calculamos las raices de: ecuacion(x) = f(x) - x = 0
---> 13 ecuacion = sp.Eq(f(x) - x, 0)
15 raices = sp.solve(ecuacion)
16 derivada = sp.diff(f(x), x) # Derivada de f
TypeError: 'Mul' object is not callable
我想当我做
f = f(f(x))
时,我正在将我的函数转换为无效的类型,但我不知道哪个是错误。
您以一种不幸的方式混淆了 Python lambda 和 sympy 表达式。
请使用以下内容:
def orbitas_periodicas(f,n):
"""
Calcula las órbitas periódicas con periodo 'n' de una función f
que debe ser polinomica.
"""
lista_res = [] # Lista de listas que guarda los puntos fijos de cada fk con k = 1,2,3,...,n
x = sp.Symbol("x")
f_x = f(x)
for i in range(1, n+1):
print(f"Calculando órbitas periódicas de periodo {i}")
# Calculamos las raices de: ecuacion(x) = f(x) - x = 0
ecuacion = sp.Eq(f_x - x, 0)
raices = sp.solve(ecuacion)
derivada = sp.diff(f_x, x) # Derivada de f
derivada = sp.lambdify(x, derivada)
aux = []
for raiz in raices:
print(raiz)
if abs(derivada(raiz)) < 1:
aux.append((raiz, "atractivo"))
elif abs(derivada(raiz)) > 1:
aux.append((raiz, "repulsivo"))
lista_res.append(aux)
f_x = f(f_x)
return lista_res