迭代函数时不可调用“Mul”对象

问题描述 投票:0回答:1

我有这段代码,我试图从 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
1个回答
0
投票

您以一种不幸的方式混淆了 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
© www.soinside.com 2019 - 2024. All rights reserved.