2011-01-29 15 views
10

Dado:resolver ecuaciones funcionales mediante programación

F (F (n)) = n

F (F (n + 2) + 2) = n

F (0) = 1

donde n es un entero no negativo. F (129) =?

¿Cómo podemos resolver este tipo de ecuaciones funcionales programáticamente? Mi lenguaje de programación preferido es Python.

+0

Lo son las condiciones en F? Cuando n = 0, F (n) = 1. ¿En qué condiciones calcula F F (F (n)) y F (F (n + 2) +2)? – inspectorG4dget

+0

@ inspectorG4dget F es continuo en R. – Sharathiitr

+0

¿Puede dar una descripción más precisa de qué tipo de restricciones podrían surgir al resolver este tipo de problemas? Es fácil describir secuencias que no están definidas en todas partes si permite expresiones matemáticas arbitrarias. – templatetypedef

Respuesta

5

Las ecuaciones funcionales, en sus términos más generales, son realmente muy difíciles. No es coincidencia que prácticamente todas las competiciones internacionales de matemática tengan uno de ellos, generalmente tan inocente como el que has escrito. Los métodos para resolverlos varían desde la inducción simple hasta el análisis espacial de Banach de dimensión infinita y es muy poco probable un enfoque de programación genérico para resolverlos.

En este caso particular, aquí es una aproximación directa hacia adelante:

Supongamos que para cualquier par de números enteros m, n tenemos F (m) = F (n) = k. Pero entonces m = F (F (m)) = F (k) = F (F (n)) = n: por lo tanto m = ny F nunca toma el mismo valor en dos entradas diferentes. Pero sabemos que F (F (n)) = n = F (F (n + 2) +2) - por lo tanto, F (n) y F (n + 2) +2 deben ser el mismo número, lo que quiere decir , F (n + 2) == F (n) - 2 == F (n-2) - 4 = .... Ahora sabemos que F (0) = 1, entonces F (1) = F (F (0)) = 0. Pero luego F (129) = F (127) - 2 = F (125) - 4 = ... = F (1) - 128 = -128

Así que está su solución, pero un algoritmo mecánico para resolver cualquier variación simplemente no existe.

+0

También puede obtener el primer paso por el hecho de que 'F (F (n)) = n' es la ecuación de definición de 'F' para ser su propia inversa. El hecho de que es una biyección es una consecuencia de eso. – aaronasterling

+0

La regresión simbólica puede resolver estos problemas en muchos casos – Inverse

1

Sobre la base de lo que @ivancho y @aaronasterling han dicho, he podido escribir este programa que debe hacer el truco:

def f(n): 
    if not n: 
     return 1 
    else: 
     return f(n-2)-2 

>>> f(4) 
-3 

comentario si esto no es lo que está buscando

Cuestiones relacionadas