6

Esiste un algoritmo per verificare se una determinata funzione (eventualmente non lineare) f è sempre positiva?Un algoritmo per verificare se una funzione non lineare f è sempre positiva

L'idea che ho attualmente è di trovare le radici della funzione (usando l'algoritmo di newton-raphson o tecniche simili, vedi http://en.wikipedia.org/wiki/Root-finding_algorithm) e controllare le derivate, o trovare il minimo della f, ma non sembrano per essere la migliore soluzione a questo problema, ci sono anche molti problemi di convergenza con gli algoritmi di ricerca delle radici.

Ad esempio, in Maple, la funzione verifica può farlo, ma è necessario implementarla nel mio programma. Maple Help on verify: http://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells Esempio di acero: assume (x, 'reale'); verify (x^2 + 1,0, 'greater_than'); -> restituisce true, poiché per ogni x abbiamo x^2 + 1> 0

[modifica] Alcuni precedenti sulla domanda: La funzione $ f $ è il modello non lineare differenziale sul lato destro per un circuito . Un circuito non lineare può essere modellato come un insieme di equazioni differenziali ordinarie applicando l'analisi nodale modificata (MNA), per semplicità, prendiamo in considerazione solo i sistemi con 1 dimensione, quindi $ x '= f (x) $ dove $ f $ descrive il circuito, ad esempio $ f $ può essere $ f (x) = 10x - 100x^2 + 200x^3 - 300x^4 + 100x^5 $ (Un modello per il diodo tunnel non lineare) o $ f = 10 - 2sin (4x) + 3x $ (Un modello per giunzione josephson).

$ x $ è limitato e $ f $ è definito solo nell'intervallo $ [a, b] \ in R $. $ f $ è continuo. Posso anche supporre che $ f $ sia Lipschitz con Lipschitz costante L> 0, ma non voglio a meno che non sia necessario.

+0

Il 'verify' di Maple funziona per tutte le funzioni possibili? Che ne dici, per esempio, di un polinomio di dieci gradi? – Kevin

+2

Suppongo che intendiate una funzione ** continua **, probabilmente ** polinomiale ** (dopo tutto, 'f (x) = -1 iff il programma X si ferma altrimenti + 1' è una funzione valida) *? Se sì, qual è il problema attuale? Hai citato due soluzioni: trova le radici della funzione * (controlla il valore della funzione in un punto tra ciascuna delle radici) * o le radici della derivata * (controlla il valore della funzione in ciascuno di questi punti) * - Uno di questi dovrebbe funzionare. –

+0

Un ottimo punto, sì, la funzione dovrebbe essere continua. Il reperimento delle radici era la mia soluzione iniziale, ma nel mio caso ci sono diversi problemi di convergenza con esso. Sto cercando un algoritmo migliore. –

risposta

3

Se ho compreso correttamente il problema, si riduce a contare il numero di radici (reali) in un intervallo senza necessariamente identificarle. In realtà, non è nemmeno necessario ottenere il numero esatto, solo se è uguale o uguale a zero.

Se la funzione è un polinomio, penso che sia possibile applicare Sturm's theorem. L'articolo di Wikipedia sostiene che sono preferibili altre due procedure, quindi potresti volerle controllare anche tu. Non sono sicuro che lo Descartes' rule of signs funzioni su un intervallo, ma sembra che sia Budan's theorem.

Problemi correlati