6

¿Hay un algoritmo para verificar si una función dada (posiblemente no lineal) f es siempre positiva?Algoritmo para verificar si una función no lineal f es siempre positiva

La idea que tengo actualmente es encontrar las raíces de la función (usando el algoritmo newton-raphson o técnicas similares, ver http://en.wikipedia.org/wiki/Root-finding_algorithm) y buscar derivados, o encontrar el mínimo de f, pero no parece para ser las mejores soluciones a este problema, también hay muchos problemas de convergencia con los algoritmos de búsqueda de raíz.

Por ejemplo, en Maple, la función verificar puede hacer esto, pero tengo que implementarlo en mi propio programa. Ayuda de Maple en verificar: http://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells Ejemplo de Maple: asumir (x, 'real'); verificar (x^2 + 1,0, 'greater_than'); -> devuelve verdadero, ya que para cada x tenemos x^2 + 1> 0

[editar] Algunos antecedentes sobre la pregunta: La función $ f $ es el modelo diferencial no manual de mano derecha para un circuito . Un circuito no lineal se puede modelar como un conjunto de ecuaciones diferenciales ordinarias mediante la aplicación de análisis nodales modificados (MNA). En aras de la simplicidad, consideremos solo sistemas con 1 dimensión, entonces $ x '= f (x) $ donde $ f $ describe el circuito, por ejemplo $ f $ puede ser $ f (x) = 10x - 100x^2 + 200x^3 - 300x^4 + 100x^5 $ (Un modelo para el diodo túnel no lineal) o $ f = 10 - 2sin (4x) + 3x $ (modelo A para unión de josephson).

$ x $ está limitado y $ f $ solo se define en el intervalo $ [a, b] \ en R $. $ f $ es continuo. También puedo suponer que $ f $ es Lipschitz con Lipschitz constante L> 0, pero no quiero hacerlo a menos que sea necesario.

+0

¿El 'verificar' de Maple funciona para todas las funciones posibles? ¿Qué tal, por ejemplo, un polinomio de diez grados? – Kevin

+2

Supongo que te refieres a una función ** continua **, probablemente ** polinomial ** * (después de todo, 'f (x) = -1 si el programa X detiene el resto + 1' es una función válida) *? Si es así, ¿cuál es el problema real? Usted mencionó dos soluciones: encuentre las raíces de la función * (verifique el valor de la función en un punto entre cada una de las raíces) * o las raíces de la derivada * (verifique el valor de la función en cada uno de estos puntos) * - cualquiera de estos debería funcionar. –

+0

Un muy buen punto, sí, la función debe ser continua. Root-finding fue mi solución inicial, pero en mi caso, hay varios problemas de convergencia con ella. Estoy buscando un mejor algoritmo. –

Respuesta

3

Si entiendo su problema correctamente, se reduce a contar el número de raíces (reales) en un intervalo sin necesariamente identificarlas. De hecho, ni siquiera necesita obtener el número exacto, solo si es igual a cero.

Si su función es un polinomio, creo que Sturm's theorem puede ser aplicable. El artículo de Wikipedia afirma que se prefieren otros dos procedimientos, por lo que es posible que desee verificarlos también. No estoy seguro de si Descartes' rule of signs funciona en un intervalo, pero parece que Budan's theorem.

Cuestiones relacionadas