Welche guten Bibliotheken gibt es, um ein System nichtlinearer Gleichungen in C ++ zu lösen?

8

In einer C ++ - Anwendung, die ich kodiere, muss ich ein System von nicht linearen Gleichungen (N Gleichungen, N Unbekannten) lösen.

Die Systeme, die ich löse, sind eher klein (bis zu 10 Gleichungen / Unbekannte), daher wird Leistung kein echtes Problem sein. Ich habe das Internet ein wenig nach einer nichtlinearen Solver-Bibliothek durchsucht, und ich kam nicht zu etwas, das einfach zu benutzen ist (zu NOX und C / C + + Minpack , aber beide scheinen ein Overkill für meine Bedürfnisse zu sein.

Irgendwelche Gedanken und Ideen von einfach zu bedienenden Bibliotheken für diesen Zweck?

    
hoffer 20.11.2010, 17:16
quelle

7 Antworten

2

Es gibt zwei Möglichkeiten für Sie, Sie können die Sonnenuhren-Pakete verwenden, die einen nichtlinearen Löser enthalten, geschrieben in C, denke ich. Das einzige Problem, das ich damit gefunden habe, ist, dass Sie gute Anfangsschätzungen geben müssen. Die zweite Option ist die Verwendung von NLEQ oder NLEQ2, die meiner Meinung nach überlegen sind (in FORTRAN geschrieben, aber leicht mit C-ähnlichen Sprachen verlinkt werden). Allerdings hatte ich einige Probleme, sie zu finden. Es gibt eine gute Website mit einer Liste möglicher Optionen unter: Ссылка

    
rhody 21.11.2010, 02:03
quelle
3

Eins sollte klar sein: Nichtlineare Gleichungslösung ist nicht einfach. Es ist nicht das Gleiche wie lineare Gleichungen zu lösen. Sie erhalten nicht immer eine Lösung. Und Ihre Wahl der Anfangsbedingung und der Inkrementierungsstrategie kann tiefgreifende Auswirkungen auf die Lösung haben, die Sie erhalten.

Damit kann ich eine bestimmte Bibliothek nicht empfehlen, aber Sie sollten nach einem linearen Algebra-Paket Ausschau halten, das Newton-Raphson-Iteration in seinem Auswahlmenü enthält.

    
duffymo 20.11.2010 17:24
quelle
1

Numerische Rezepte hat eine Routine, die die Arbeit für Sie erledigen wird.

    
David Heffernan 20.11.2010 17:28
quelle
1

Es hängt davon ab, wie nichtlinear die Gleichungen sind. Wenn sie einige "nette" Eigenschaften besitzen ... am offensichtlichsten sind positiv-semi-definite Matrix oder Konvexität, können spezialisierte Algorithmen verfügbar sein. Ich verwende IBM / ILOG CPLEX für die meisten meiner linearen Programmieranforderungen. Es werden Bibliotheken bereitgestellt, die in C ++ - Anwendungen eingebunden werden können. Obwohl ich ihr quadratisches Programmiermodul nicht benutzt habe, ist es wirklich der Stand der Technik in der linearen und nichtlinearen Programmierung mit hoher Leistung.

    
Tryer 20.11.2010 17:41
quelle
1

Es gibt immer GSL, aber alle Kommentare in den anderen Antworten gelten auch hier:

Ссылка

    
rubenvb 20.11.2010 19:08
quelle
0

Haben Sie sich COIN-OR angesehen? Es kann hilfreich sein, wenn Sie Ihre Frage an den OR-Exchange senden.

    
adamo 20.11.2010 17:22
quelle
0

Es ist nicht frei, aber Solver würde hier funktionieren.

    
Steve Townsend 20.11.2010 17:42
quelle