Autor Beitrag
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mi 06.09.06 16:05 
Hi allerseits!
Ich habe ein Finite Elemente Programm entwickelt, das die Steifigkeitsmatrix und den RHS-Vektor aufbaut - also das numerische Problem stellt. Diese können recht groß werden. Bisher habe ich die Steifigkeitsmatrix und den Lastvektor als Textdatei herausgeschrieben und das Problem von MATLAB lösen lassen. Ich würde aber gerne einen Solver in mein Programm integrieren. Kennt einer fertige Routinen? Bitte keine Gauss'schen Eliminationsverfahren!
Gruß


Moderiert von user profile iconraziel: Topic aus Open Source Units verschoben am Mi 06.09.2006 um 16:59
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mi 06.09.06 17:05 
Fertige Routinen kenn ich keine, aber solche Algorithmen sind nicht sonderlich schwer zu implementieren (höchstens QR-Zerlegung, mit Schrecken erinnere ich mich daran :hair: ). Außer Suche in Wikipedia QR-ZERLEGUNG und Gauss-elimination fällt mir spontan noch das Suche in Wikipedia GAUß-SEIDEL-VERFAHREN und das Suche in Wikipedia JACOBI-VERFAHREN ein. Einige davon sind nur für spezielle Matrizen, hab grad nicht im Kopf, welche :)

Gruß,
raziel

_________________
JSXGraph
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 06.09.06 19:51 
Um dich bei der Suche zu unterstützen: Wenn das System klein ist (vielleicht 10'000 Unbekannte), kannst du versuchen das ganze direkt zu lösen. Dein Gleichungssystem ist ja eigentlich recht dünnbesetzt, weswegen direkte Verfahren für kleinere System durchaus Sinn machen. Grosse Probleme werden häuffig iterativ gelöst. Wie raziel schon gesagt hat gehören zu den einfachsten Verfahren Jacobi/Gauss-Seidel/SOR; wobei Jacobi eher nur akademischen Wert hat, da die Konvergenz recht langsam ist. Es bringt auch schon viel, die Matrizen vorzukonditionieren. Was es auch noch gibt sind Krylov-Subspace Methoden wie CG (konjugierte Gradienten). Davon gibt mindest ein halbes duzend Methoden, die meist nur auf bestimmen Matrizen funktionieren (Symmetrie).

Code kann ich dir keinen geben. Zu den bekannten Lineare-Algebra Packeten gehören Linpack, Blitz++, Numerical Recipes(, Blas). Das sind zwar Fortran bzw. C++-Routinen, vielleicht findest du ja aber Objektfiles oder eine DLL, die du einbinden kannst. Soweit ich weiss benützt Matlab zum grössten Teil diese uralten Fortran/C Routinen.
Sonst kenne ich noch diese Numerikseite mit PASCAL-Code.

Wie gut der Delphi-Compiler in Sachen Numerik ist, weiss ich nicht. Ich denke eher schlecht (keine Erzeugung von parallelen Floatingpoint Instruktionen, Loop unrolling, etc.)
Calculon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mi 06.09.06 21:55 
Hi nochmal!
Bei meinen Rechnungen können durchaus mehr als 10000 Unbekannte entstehen. Dass Fortran für numerische Probleme die bessere Wahl ist, hat mein Chef auch schon mehrfach betont. Aber ich kann nunmal kein Fortran.
Ich habe mich bereits mit diversen numerischen Verfahren beschäftigt und habe festgestellt, dass viele - gerade wegen Geschichten wie Vorkonditionierungen - nicht trivial (für mich) zu programmieren sind. Deshalb kam meine Anfrage.
Das Jacobi-Verfahren als Iterationssolver zu implementieren traue ich mir noch zu. Ich denke trotz der Schwächen, die das Verfahren hat, werde ich das mal versuchen.
Danke für eure Tipps! Die Numerikseite übrigens scheint sehr vielversprechend zu sein. Danke auch für den Link!
Gruß
Calculon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Do 07.09.06 19:33 
Also, das Tool, das ich programmiert habe stellt auch schlechte mathematische Probleme (das numerische Verfahren hat mein Chef neu hergeleitet - es handelt sich dabei um eine Art inverse FEA), d.h. es entstehen überbestimmte Gleichungssysteme. Man hat mehr Gleichungen, als man für eine eindeutige Rechnung eigentlich bräuchte. Idealsterweise habe ich unter dem Link den du mir geschickt hast ein Lösungsverfahren entdeckt, das solche Probleme mit einschließt. Es handelt sich hierbei um die Unit "TSVBKSB.PAS" und das numerische Verfahren, das hierbei benutzt wird ist die Singulärwertzerlegung. Ich habe eine kleine Konsolenanwendung daraus gemacht. Das Verfahren eignet sich aber auch für alle anderen Arten von linearen Gleichungssystemen - wenn vielleicht auch nicht schlau wegen der Rechenzeit.
:D Nochmal vielen Dank Delphifan für den Link!
Gruß