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.
Il 'verify' di Maple funziona per tutte le funzioni possibili? Che ne dici, per esempio, di un polinomio di dieci gradi? – Kevin
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. –
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. –