Mitprogrammierer gesucht an Matrix Unit

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von marcov »

Ich bin angefangen einige Dokumenten zu scannen:

http://www.stack.nl/~marcov/numlib/" onclick="window.open(this.href);return false;

und habe auch etwas Allgemeines geschrieben unter

http://wiki.freepascal.org/numlib" onclick="window.open(this.href);return false;

Neben dies braucht man auch unbedingt das packages/numlib Verzeichnis ins FPC Quellarchiv.


Traude: weil du an Matrices Transformationen interessiert bist, habe ich unit OMV am ersten getan. Siehe dich auch "preface.pdf" an, mit das Inhaltsverzeichnis der Dokumentation. Gibt ein gutes Übersicht.

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Patito »

Etwas spät, aber wen das ganze Thema interessiert, dem würde ich empfehlen sich z.B. mal das Buch
Numerical Recipes (in C++) anzusehen:

http://www.nr.com/" onclick="window.open(this.href);return false;

Kapitel 2 behandelt recht ausführlich Matrizen.
Früher (in den 80ig-ern) gab es von dem Buch sogar mal eine Version für Pascal.
(Numerical Recipes in Pascal) - eventuell bekommt man das sogar noch.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von marcov »

Patito hat geschrieben:Etwas spät, aber wen das ganze Thema interessiert, dem würde ich empfehlen sich z.B. mal das Buch
Numerical Recipes (in C++) anzusehen:

http://www.nr.com/" onclick="window.open(this.href);return false;

Kapitel 2 behandelt recht ausführlich Matrizen.
Früher (in den 80ig-ern) gab es von dem Buch sogar mal eine Version für Pascal.
(Numerical Recipes in Pascal) - eventuell bekommt man das sogar noch.
War das kein Lizenz Problem? Man durfte glaub ich die Beispiel Quellen nicht frei distribuieren.

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Patito »

marcov hat geschrieben:
Patito hat geschrieben:Etwas spät, aber wen das ganze Thema interessiert, dem würde ich empfehlen sich z.B. mal das Buch
Numerical Recipes (in C++) anzusehen:

http://www.nr.com/" onclick="window.open(this.href);return false;

Kapitel 2 behandelt recht ausführlich Matrizen.
Früher (in den 80ig-ern) gab es von dem Buch sogar mal eine Version für Pascal.
(Numerical Recipes in Pascal) - eventuell bekommt man das sogar noch.
War das kein Lizenz Problem? Man durfte glaub ich die Beispiel Quellen nicht frei distribuieren.
Sicherlich. Wörtlich da abschreiben sollte man sicher nicht. Aber im Prinzip steht da eh nur das gröbst drin. Wenn man ein konkretes Problem lösen will, muß man die ganze Feinarbeit ja eh selbst machen. Meine Anregung war nur zum Lernen gedacht.

Insgesamt würde ich zum Thema noch ganz allgemein folgendes anmerken:

Eine "einzig wahre" Art und Weise eine Matrix programmiertechnisch umzusetzen gibt es sicher nicht.
Je nach Anwendungsfall muß man die Daten ganz unterschiedlich ablegen.
Dünn besetzte Matrizen würde ich im Speicher definitiv anders ablegen als voll besetzte, etc..

Auch halte ich für mathematische Sachen Operator-Overloading nicht für wirklich angebracht.
Es gibt immer mehrere Arten und Weisen wie man die ganzen Algorithmen umsetzen kann.
z.B.:
- optimiert auf Speicherverbrauch
- optimiert auf Laufzeit
- optimiert unter Ausnutzung konkreter Gegebenheiten (dünn besetzte Matrizen, ...)
- schneller (ungenauer) Schätzer
- mit/ohne einer Art Ergebnis-Cache (um nicht mehrmals dasselbe Teilergebnis ausrechnen zu müssen)
...

Von vorneherein ist einfach nicht wirklich klar welche der Methoden man dann zum "+" oder "*" erklären soll.
Und nicht jede Methode passt immer gleich gut.

Außerdem:
Um mit Matrizen-Gruppen rumzuspielen fand ich GAP recht nützlich:
http://www.gap-system.org/" onclick="window.open(this.href);return false;

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von u-boot »

paar kleine Kommentare von mir:

zu dem Buch: Numerical recipes in Pascal. - Auch mit Diskette (5,25") erschienen .... ok damals waren die computerressourcen etwas knapper also musste man spärlicher damit umgehn ...

zu Matrix-Unit: Da hatte sich wohl schon mal jemand etwas arbeit angefangen was in FPC auch enthalten ist. Genauer hab ich mir das nicht angesehn... scheint im schnelldurchlauf meines Erachtens aber nicht sooo toll für Sachen die ich mir so bei Matrixoperationen vorstelle. Ich verwende meistens dyn. Arrays.... öfter auch mal schwach besetzt.

zu Operatoren: also ich würde A x B als A * B schreiben lassen und für mich ist auch ein A + B ziemlich eindeutig. Es kann aber sein, dass es da noch andere Interpretationen gibt die mir nicht so geläufig sind und daher die vermeintliche Eindeutigkeit rührt. Ich persönlich fände auch + und - für TPoints ganz gut und ein TControl.Position:TPoint.

zu Solvern: Bin mir nicht so sicher ob man da wirklich nen Standard direkt eingebunden in FPC anbieten sollte, eben aus dem schon genannten Grund der Vor-und Nachteile je nach Problemstellung. Aus meiner momentanen Sicht fände ich Solver als externe(s) Package(s) besser aufgehoben, letztenendes bin ich da aber kein Entscheider.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von af0815 »

Vorschlag: Zum Thema numlib ist es sinnvoll einen neuennThread eröffnen. Ich glaube, das es das Thema dieses Threads deutlich verlässt.

Andi
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Euklid »

Das ist ja lustig: Den Text kann man lesen, ohne je Niederländisch gelernt zu haben! Das macht die Sprache natürlich sehr sympathisch... :)

Nun: Ich kenne mich mit den Lazarus-Internas nicht so aus, daher weiß ich nicht, wie ich die numlib einbinden kann. Bei einem einfachen "uses numlib" kommt es zur Fehlermeldung
/usr/bin/ld: cannot find -lTpNumLib
und auf dieser Seite klingt es an, dass die Einbindung der NumLib ein komplizierterer Prozess zu sein scheint: http://www.at.freepascal.org/packages/numlib.html" onclick="window.open(this.href);return false;
In jedem Fall verstehe ich nicht, wie man das macht:
All units can be compiled into a library, and the library routines can be accessed through the tpnumlib unit.
Viele Grüße, Euklid

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von marcov »

Euklid hat geschrieben:
Das ist ja lustig: Den Text kann man lesen, ohne je Niederländisch gelernt zu haben! Das macht die Sprache natürlich sehr sympathisch... :)
Deutsche Freunde sagen das ein bisschen Platt-Deutsch Kenntnisse helfen kann
Nun: Ich kenne mich mit den Lazarus-Internas nicht so aus, daher weiß ich nicht, wie ich die numlib einbinden kann. Bei einem einfachen "uses numlib" kommt es zur Fehlermeldung
Numlib.pas war der unit um ein DLL zu machen. Es wird nicht genutzt. Nutze die Namen der units (sle,det,roo usw, siehe preface.pdf). Ich werde kompilation von numlib.pas unterbinden.

und auf dieser Seite klingt es an, dass die Einbindung der NumLib ein komplizierterer Prozess zu sein scheint: http://www.at.freepascal.org/packages/numlib.html" onclick="window.open(this.href);return false;
In jedem Fall verstehe ich nicht, wie man das macht:
All units can be compiled into a library, and the library routines can be accessed through the tpnumlib unit.
Viele Grüße, Euklid
Das ist alt. Am einfachsten ist zu versuchen die Programmen ins packages/numlib/examples zu kompilieren

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Euklid »

Ok, danke. Werde es so nocheinmal versuchen, sobald ich es benötige.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von af0815 »

Thema numlib geht hier im Thread Package numlib weiter.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von marcov »

Patito hat geschrieben:
marcov hat geschrieben:
War das kein Lizenz Problem? Man durfte glaub ich die Beispiel Quellen nicht frei distribuieren.
Sicherlich. Wörtlich da abschreiben sollte man sicher nicht. Aber im Prinzip steht da eh nur das gröbst drin. Wenn man ein konkretes Problem lösen will, muß man die ganze Feinarbeit ja eh selbst machen. Meine Anregung war nur zum Lernen gedacht.
Stimmt, aber das gilt für alle Ressourcen, nicht nur Numeric methods in xx.
Insgesamt würde ich zum Thema noch ganz allgemein folgendes anmerken:

Eine "einzig wahre" Art und Weise eine Matrix programmiertechnisch umzusetzen gibt es sicher nicht.
Je nach Anwendungsfall muß man die Daten ganz unterschiedlich ablegen.
Dünn besetzte Matrizen würde ich im Speicher definitiv anders ablegen als voll besetzte, etc..
Das würde Cache/Speicher technisch günstiger sein, aber kann auch Negativ auspacken, wenn man
oft zwischen die beide Formats konvertieren muss.
Auch halte ich für mathematische Sachen Operator-Overloading nicht für wirklich angebracht.
Ich auch nicht, weil das Typen nicht wirklich limitierend ist, aber sicher machen das alles Korrekt ist.
Performance-technisch ist Operator-Overloading basierter nicht sehr günstig weil es drei-adres Notation ist (A=B+C, wenn man vielleicht keinen neu Alloziertes Speicher nötig hat, in Gegensatz zu normalen integer Kalkulationen, kosten mehr dynamisch allozierte Zwischenresultate mit Matrices extra Zeit )
Es gibt immer mehrere Arten und Weisen wie man die ganzen Algorithmen umsetzen kann.
z.B.:
- optimiert auf Speicherverbrauch
- optimiert auf Laufzeit
- optimiert unter Ausnutzung konkreter Gegebenheiten (dünn besetzte Matrizen, ...)
- schneller (ungenauer) Schätzer
- mit/ohne einer Art Ergebnis-Cache (um nicht mehrmals dasselbe Teilergebnis ausrechnen zu müssen)
- optimiert auf relatif kleine Matrices mit Saturation und SIMD (fuer 3D anwendungen)

Antworten