J'ai un système de équations non linéaires que je veux résoudre numériquement:
f = ( f 1 , … , f n )
Ce système présente un certain nombre de caractéristiques qui le rendent particulièrement difficile à manipuler. Je cherche des idées sur la façon de gérer le système plus efficacement.
Pourquoi le système est-il difficile?
Les fonctions sont similaires à celle-ci (mais bien sûr en plusieurs dimensions):
Ils ont des plateaux plats séparés par une région de changement en douceur. En 2D, vous pouvez imaginer quelque chose comme ça pour un :
Généralement, chaque a deux plateaux séparés par un changement régulier autour d'un hyperplan de dimension n - 1 .
Des fonctions comme celle-ci sont difficiles à gérer avec des méthodes de type Newton car le dérivé est effectivement nul sur les plateaux. Dans plusieurs dimensions, je ne peux pas facilement trouver une région où aucun des n=1 n'a de plateau - si je le pouvais, cela résoudrait le problème. La méthode de bissection fonctionne bien pour , mais elle ne se généralise pas bien à plusieurs dimensions.
Les fonctions sont très lentes à calculer. Je recherche une méthode qui puisse obtenir une approximation raisonnable de la racine en aussi peu d'itérations que possible.
Les fonctions sont calculées avec une méthode de Monte Carlo. Cela signifie que chaque fois qu'ils sont calculés, j'obtiens une valeur aléatoire légèrement différente. Les dérivés sont difficiles à estimer. Une fois que nous sommes suffisamment proches de la racine, le bruit commencera à dominer, et il est nécessaire d'utiliser la moyenne pour augmenter la précision. Idéalement, il devrait être possible de généraliser la méthode à une version d' approximation stochastique équivalente (par exemple, Newton → Robbins-Monro).
Le système est de grande dimension. peut être aussi grand que 10-20. Lorsque , une méthode efficace serait probablement la suivante: essayez de suivre les contours définis par et et voyez où ils se croisent. On ne sait pas comment cela se généraliserait aux dimensions élevées.n = 2 f 1 ( x 1 , x 2 ) = 0 f 2 ( x 1 , x 2 ) = 0
Que sais-je d'autre sur le système?
Il y a précisément une racine (à partir des résultats théoriques).
Je connais la valeur de sur les plateaux (disons que c'est 0 et 1 pour tout ). i
x i f i ( … , x i , … ) x i - ∞ ∞ x j ≠ i a une relation spéciale avec : change de façon monotone de 1 à 0 lorsque passe de à . Cela est vrai pour toute valeur fixe des autres .
Réponses:
Puisqu'il n'y a qu'une seule racine et qu'il n'y a pas de contraintes, vous pourriez avoir de la chance de la poser comme un problème d'optimisation: minimisez la somme (le long de chaque dimension) des carrés de votre fonction d'origine.
Les méthodes classiques d'optimisation échoueront probablement, mais des méthodes heuristiques telles que les algorithmes génétiques ou CME-ES (adaptation de matrice covariante, etc. - stratégie évolutive) pourraient fonctionner.
la source