2011-01-29 12 views
10

Dato:Risoluzione equazioni funzionali programmazione

F (F (n)) = n

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

F (0) = 1

dove n è un numero intero non negativo. F (129) =?

Come possiamo risolvere questo tipo di equazioni funzionali a livello di programmazione? Il mio linguaggio di programmazione preferito è Python.

+0

Cosa sono le condizioni su F? Quando n = 0, F (n) = 1. A quali condizioni F calcola F (F (n)) e F (F (n + 2) +2)? – inspectorG4dget

+0

@ inspectorG4dget F è continuo su R. – Sharathiitr

+0

Puoi fornire una descrizione più precisa di quali tipi di vincoli potrebbero emergere quando si risolvono questi problemi? È facile descrivere sequenze che non sono definite ovunque se si consentono espressioni matematiche arbitrarie. – templatetypedef

risposta

5

Le equazioni funzionali, nei loro termini più generali, sono davvero molto difficili. Non è un caso che praticamente ogni competizione di matematica internazionale ne presenti uno, di solito considerato innocente come quello che hai scritto. I metodi per risolverli variano dalla semplice induzione all'analisi spaziale di Banach a dimensione infinita e un approccio di programmazione generico per risolverli è molto improbabile.

In questo caso particolare, ecco un approccio diretta:

Supponiamo per ogni due interi m, n abbiamo = F (n) = k (m) F. Ma allora m = F (F (m)) = F (k) = F (F (n)) = n: quindi m = n e F non prende mai lo stesso valore su due ingressi diversi. Ma sappiamo che F (F (n)) = n = F (F (n + 2) +2) - quindi F (n) e F (n + 2) +2 devono essere lo stesso numero - vale a dire , F (n + 2) == F (n) - 2 == F (n-2) - 4 = .... Ora sappiamo F (0) = 1, quindi F (1) = F (F (0)) = 0. Ma poi F (129) = F (127) - 2 = F (125) - 4 = ... = F (1) - 128 = -128

Quindi c'è la soluzione - ma un algoritmo meccanico per risolvere qualsiasi variazione proprio non esiste.

+0

Puoi anche ottenere il primo passo dal fatto che 'F (F (n)) = n' è l'equazione che definisce che 'F' è la sua propria inversa. Il fatto che sia una biiezione è quindi una conseguenza di ciò. – aaronasterling

+0

La regressione simbolica può risolverli bene in molti casi – Inverse

1

In base a quanto @ivancho e @aaronasterling hanno detto, sono stato in grado di scrivere questo programma che dovrebbe fare il trucco:

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

>>> f(4) 
-3 

commento se questo non è quello che stai dopo