Mitprogrammierer gesucht an Matrix Unit

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Mitprogrammierer gesucht an Matrix Unit

Beitrag von alexander »

Hi,

also ich habe eben die Anfänge von einer Unit geschrieben die in der Zukunft alles können soll, was man mit Matrizen (m x n) zu tun hat. In der Zukunft vielleicht sogar Matrizen in der spez. Relativitätstheorie (alo mit mü oben und nü unten und so) (könnte in eine eigene Unit kommen).

Alles natürlich mit komplexen werten (wenn dann auch richtig ;-) ).

Das Projekt ist hier:
http://forge.lazarusforum.de/projects/show/amatrix" onclick="window.open(this.href);return false;
SVN hier:
https://svn.lazarusforum.de/svn/amatrix" onclick="window.open(this.href);return false;

und ich würde mich freuen, wenn ein Mathematik begeisterter Programmierer mit programmieren würde.

Es wäre schön, wenn die Unit funktioniert und gut getestet ist, dass sie dann eventuell ins fpc Projekt aufgenommen würde. Denn eine gute Vector/Matrixrechnung könnte fpc noch gebrauchen. Alles natürlich unter der GPL3.

Gruß
Alexander
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

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 »

Hallo Alexander,
Denn eine gute Vector/Matrixrechnung könnte fpc noch gebrauchen.
Das stimmt allerdings!

Ich weiß nicht, inwiefern Du davon mitbekommen hast, daher folgende Links:

Erst vor kurzem öffnete Traude folgenden Thread, der darauf hindeutet, dass er/sie an einem ähnlichen Projekt arbeitet: http://www.lazarusforum.de/viewtopic.ph ... 41&start=0" onclick="window.open(this.href);return false;
Dann gibt es noch die Komponente von mschnell, der einmal an einem ähnlichen Projekt (mit reellwertigen Komponenten) gearbeitet hat. Allerdings ist die Lizenz, unter der der Code steht, für mich zunächst unklar (möglicherweise habe ich was übersehen): http://www.lazarusforum.de/downloads.ph ... l&df_id=12" onclick="window.open(this.href);return false;

Nehme aber an, dass Dein Projekt über die bestehenden Projekte hinaus geht. Es hört sich vielmehr nach einer komplexen Vektoralgebra an, die zur Implementierung von Vierervektoren u.ä. notwendig wird. Aber eventuell sind die genannten Projekte dennoch von Interesse.

Viele Grüße, Euklid

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von alexander »

Ja es geht darüber hinaus. Es soll so allgemeine wie möglich über Matrizen sein. D.h. das schließt Vektoren natürlich auch ein.

Ich bin gerade am überlegen, ob ich nicht die Klasse TMatrix (in der nicht viel drin ist) lieber in einen normalen typ umwandeln soll. Dann wäre alles zwar ein weniger OOP aber das muss in einer Unit für mathematik ja auch nicht unbedingt sein. Wenn es ein typ wäre, wäre die Variablen übergabe wesentlich einfacher...

Auszug von der Unit, wie sie bisher (man kann da sicherlich noch wesentlich mehr machen) ist:

Code: Alles auswählen

{ TMatrix }
 
  TMatrix=class
  private
    Fm,Fn:integer;
 
    Fitem:array of array of complex;
 
    function Getitem(i, j: integer): complex;
    procedure Setitem(i, j: integer; const AValue: complex);
  public
 
    constructor Create(m,n:integer);    //m are the rows ;  n are the coloums
    constructor Create;    //m are the rows ;  n are the coloums
    property item[i,j:integer]: complex read Getitem  write Setitem ; default;
  published
    property m:integer read Fm write Setm ;
    property n:integer read Fn write Setn ;
  end;
 
 
  function CheckSquare(a:TMatrix):boolean;
  function CheckSameDim(a1,a2:TMatrix):boolean;
  function CheckMultiplicatable(a1,a2:TMatrix):boolean;
 
  function IsItOneMatrix(a:TMatrix; var err: boolean):boolean;
  function IsItZeroMatrix(a:TMatrix):boolean;
 
 
  procedure ResetZeroMatrix(a:TMatrix);
  procedure ResetOneMatrix(a:TMatrix; var err:boolean);
 
 
  procedure add(a1,a2:TMatrix; var result:TMatrix ; var err:boolean);
  procedure sub(a1,a2:TMatrix; var result:TMatrix ; var err:boolean);
  procedure mul(a1,a2:TMatrix; var result:TMatrix ; var err:boolean);   overload;
  procedure mul(var a:TMatrix; const factor:complex; var err:boolean);   overload;
 
 
  procedure Delnm(a:TMatrix; m,n:integer; var result:TMatrix ; var err:boolean);           // deletes the m's row and the m's column
  procedure ExtractVectorN(a:TMatrix; n:integer; var result:TMatrix ; var err:boolean);
 
 
  procedure Trans(a:TMatrix; var result:TMatrix; var err:boolean);
  procedure Gramian(a:TMatrix; var result:TMatrix; var err:boolean);
 
  function  Det(a1:TMatrix; var err:boolean) : complex;
 
  procedure Adjugate(a:TMatrix; var result:TMatrix; var err:boolean);     //if possible (d.h. if det <>0)
  procedure Invert(a:TMatrix; var result:TMatrix; var err:boolean);     //if possible (d.h. if det <>0)
 
  //todo
//eigenvectors
//eigenvalues
 
//extract a local Jacobi Matrix from a diffeomorphism
//etc.
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von mschnell »

ich habe Folgendes:

Code: Alles auswählen

{*
  Contains several matrix operations for a matrix type based on dynamic arrays.
 
  @author Copyright: Julian und Michel Schnell, Krefeld, Germany, mschnell@bschnell.de
  @version 1.0
}
unit Matrix;
 
interface
 
type          
  {*
    Type of the elements in the matrices
  }
  TMatrixBaseType = Extended;
 
  {*
    Vector of TMatrixBaseType
  }
  TVector = array of TMatrixBaseType;
  {*
    Matrix of TMatrixBaseType
  }
  TMatrix = array of TVector;
 
function SolveLinearSystem(A: TMatrix): TVector;
 
function SolveLinearSystems(A: TMatrix): TMatrix;
 
function MatrixTrans (A: TMatrix) : TMatrix;
 
function MatrixMulti (A, B: TMatrix) : TMatrix;
 
function MatrixVektorMulti (A: TMatrix; V:TVector ) : TVector;
 
function MatrixConcat (A, B: TMatrix): TMatrix;
 
function MatrixIdent (n: Integer): TMatrix;
 
function MatrixInvert (A: TMatrix) : TMatrix;
 
procedure MatrixBubbleSort(var A: TMatrix; m: Integer);
 
procedure MatrixDeleteLine(var A: TMatrix; n: Integer);
 
//procedure DoSolveMatrix(A: TMatrix);
Interessant ist eigentlich nur die Gauss-Funktion (SolveLinearSystem) mit permanenter vollständiger Pivot-Optimierung. Der Rest sind triviale Hilfs-Funktionen.

Wir haben das in einem größeren Projekt eingesetzt, das gemischt lineare/nichtlinear Optimierung macht.

Meiner Ansicht nach ist es meist sinnvoll dynamische Arrays als Vektoren und Matrizen zu verwenden.
Komplexe Matrizen sind sicherlich in einigen Anwendungsfällen sinnvoll, das sollte aber nicht den Code beeinflussen, der für reelle Matrizen erzeugt wird.

-Michael
Zuletzt geändert von mschnell am Sa 27. Feb 2010, 09:55, insgesamt 2-mal geändert.

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von alexander »

ja an das Gleichungslösen (Gauss ) habe ich mich noch nicht dran gewagt. Willst du mitprogrammieren? Kannst ja wahrscheinlich größtenteil einfach den algorithmus reinkopieren. Bist du schon bei lazforge (ist im moment gerade down)

Ich bin gerade dabei, die klasse TMatrix in einen typ umzuformen und dann kann ich auch die operatoren neu definieren und brauche nicht mehr so viele funktionen.
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von mschnell »

Operator overload ist natürlich ein nettes Feature.Ich würde die "normalen" Funktionen ebenfalls exportieren und die für Opeator Overload als "Benefit" notwendigen Zeilen mit {$ifdef FPC} versehen, damit der Unit-Sourcecode Delphi-kompatibel bleibt.

Mitprogrammieren möchte ich nicht. Ich kann aber ein bisschen Testen (auch auf Delphi).

Den Code für den Gaus-Algorithmus (die beide "SolveLinearSystem" Funktion kannst Du natürlich verwenden. Das ist ziemlich gut getestet und arbeitet m.E. sehr stabil.

-Michael

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 »

Hast du einmal das packages/numlib Verzeichnis nachgeschaut?

Traude
Beiträge: 29
Registriert: Mo 18. Aug 2008, 11:59
OS, Lazarus, FPC: Ubuntu 8.04 + XP SP2 DualBoot, Lazarus 0.9.28, FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Wien

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Traude »

Ich habe jetzt in die numlib reingeschaut, aber ich kenn mich nicht aus. Gibt es da auch eine Doku dazu?


EDIT: Das habe ich gefunden: http://www.at.freepascal.org/packages/numlib.html, aber das ist ein bissl wenig.
Wenn man auf "View Interface" klickt kommt: "Page not found".

Und die Benennungen in dem Package "numlib" sind auch nicht grade alle sehr ausdrucksstark. :(


Und ich habe das Interface von meinem Linear Solver beigepackt.
Dateianhänge
LinearSolver_Interface.txt
(7.94 KiB) 97-mal heruntergeladen

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von mschnell »

Numlib arbeitet mit Matrizen, die keine dynamischen, sondern Statische Arrays sind. Das ist zwar für viele Anwendungen schneller, aber nicht so gut handhabbar und umsortieren der Zeilen (z.B. Pivot-Optimierung) ist viel aufwändiger.



======================
TMatrixData = Record
Col: TMatIndex;
Value: TMatValue;
End;
======================

Das ist vielleicht sinnvoll, wenn Du mit massiv unbesetzten Matrizen rechnen willst. (Das schreibst Du ja auch.) Wo braucht man das ?

Für allgemeine Anwendungen halte ich das für keine gute Idee.

Entsprechend sollte das Projekt dann auch benannt werden. Also nicht einfach "Matrix-Unit" :)

-Michael

Traude
Beiträge: 29
Registriert: Mo 18. Aug 2008, 11:59
OS, Lazarus, FPC: Ubuntu 8.04 + XP SP2 DualBoot, Lazarus 0.9.28, FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Wien

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Traude »

Naja, ich habe ja nicht gemeint, das dem Threadstarter einfach so aufs Auge zu drücken, sondern ich wollte nur sagen: "Mich gibts auch und sieht mal, was ich hier habe, vielleicht kannst Du das brauchen". Ist ja sein Projekt und er kann damit machen, was er will.

Was kann ich mit schnellen Solvern für dünn besetzte Matrizen machen:

1) Ich möchte Mesh Parametrisierung betreiben (http://www.inf.usi.ch/hormann/parameter ... index.html)
Das ist jetzt nicht nur so eben hingesagt. Ich beackere dieses Thema schon seit zwei Jahren, konnte aber nichts machen, weil man dafür einen schnellen linearen Solver braucht, und hatte jetzt erst die Gelegenheit, so etwas zu machen

2) Ich habe vor eine 3D Engine zu schreiben und möchte meinen Physikteil damit schneller machen. Ich habe auch einen Gauss-Seidel-Solver mit an Bord, so etwas ähnliches ist in ODE (die Open-Source-Physik-Engine) eingebaut.

Etwas betroffene Grüße
Traude

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von mschnell »

Verstehe ich das richtig:

Die dünn besetzten Matrizen braucht man zur Berechnung bestimmter physikalischer Prozesse (z.B. in einer Physik-Engine).

Es gibt Verfahren, die dünn besetzte Matrix-Gleichungen besser (schneller und/oder genauer) lösen als das normale Gauss-Jordan-Verfahren.

Fragen:

direkt oder iterativ ?

Dein Verfahren macht keine bestimmten Voraussetzungen über die besetzten Stellen der Matrix (ist aber nur sinnvoll, wenn die allermeisten Elemente = 0 sind).
Sind nicht meist strengere Vorgaben sinnvoll, die eine weniger komplexe Definition der Matrix erlauben ?
Bleiben die Matrizen im Laufe der Bearbeitung so unterbesetzt, dass die komplexe Darstellung mit Records sinnvoll bleibt, oder müssen neue Elemente <> 0 kreiert werden ?

Ist für die Mesh-Geschichte (Polygon-Netze) nicht tatsächlich eine Bearbeitung in der Grafikkarte das gegebene ?

Gruß
-Michael

Traude
Beiträge: 29
Registriert: Mo 18. Aug 2008, 11:59
OS, Lazarus, FPC: Ubuntu 8.04 + XP SP2 DualBoot, Lazarus 0.9.28, FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Wien

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von Traude »

mschnell hat geschrieben:Die dünn besetzten Matrizen braucht man zur Berechnung bestimmter physikalischer Prozesse (z.B. in einer Physik-Engine).
Nein. die Feststellung lautet vielmehr: "Es gibt relativ viele lineare mathematische Probleme, die beim Lösen mit Matrizen dünnbesetzte Matrizen erzeugen. Die Vorgänge, die eine PhysikEngine berechnet, gehören auch dazu."
mschnell hat geschrieben:Es gibt Verfahren, die dünn besetzte Matrix-Gleichungen besser (schneller und/oder genauer) lösen als das normale Gauss-Jordan-Verfahren.
JA! Insbesondere schneller. Die Wikipedia sagt dazu: http://de.wikipedia.org/wiki/Krylow-Unterraum-Verfahren Das sind relativ neue Verfahren. Aber sie haben den Nachteil, dass sie nur auf bestimmte Matrizen anwendbar sind. Das Verfahren der Konjugierten Gradienten ist zwar das Schnellste, aber in Bezug auf die Matrizen, die es akzeptiert, ist es eine Primadonna. Daher wurden etliche Verfahren daraus abgeleitet, die einen ähnlichen Lösungsansatz haben, aber die man auf eine ganz normale dünnbesetzte Matrix anwenden kann. Zum Beispiel das BiCGStab-Verfahen (Bi-Konjugate-Gradient-Stabilized-Method).
mschnell hat geschrieben:direkt oder iterativ ?
Iterativ.
mschnell hat geschrieben:Dein Verfahren macht keine bestimmten Voraussetzungen über die besetzten Stellen der Matrix (ist aber nur sinnvoll, wenn die allermeisten Elemente = 0 sind).
Ja. Ich mache deshalb keine Voraussetzungen, weil das Zeug noch in Entwicklung ist. Du hast also keine ausgereiften Verfahren vor Dir. Zum Beispiel ist Dein Verfahren sicherlich viel effektiver als mein Gauss-Jordan-Solver. Du betreibst Pivot-Optimierung, wohingegen ich eine Methode "SetDominatingDiagonal" laufen lasse (ich vertausche Zeilen, aber nicht sehr effektiv) und Du hast zusätzlich beim Lösen Threads laufen und ich nicht. Man muss aber sagen, dass der Gauss-Jordan-Solver meist die letzte Rettung ist, der geht fast immer, wenn die anderen Solver irgendwo im Wald veschwinden. Nur einmal habe ich festgestellt, dass sogar der Gauss-Jordan-Solver versagt hat, aber ich bin dem Fehler nicht nachgegangen. Da muss vermutlich noch viel getestet werden.

Ach ja: und Alexander hat komplexe Zahlen dabei. Leider rührt er sich nicht mehr. Er ist aber vermutlich der einzige Mathematiker hier und würde daher dringend gebraucht werden. Es gibt vielleicht Dinge, die man im Ansatz eines solchen Projektes auch berücksichtigen sollte. Dünnbesetzte Matrizen gehören meiner Meinung nach dazu. Es ist nämlich so: WENN Alexander ein Mathematiker ist und WENN er sich für numerische Mathematik interessiert, dann wird er sich dann in seinen Allerwertesten beißen, weil er dunnbesetzte Matrizen nicht berücksichtigt hat. Ein Rewrite wird dann notwendig sein und genau das will ich ihm ersparen. :wink:
mschnell hat geschrieben:Sind nicht meist strengere Vorgaben sinnvoll, die eine weniger komplexe Definition der Matrix erlauben ?
Ich weiß jetzt nicht genau, was Du damit meinst. Meine Definition ist eigentlich ganz simpel, einfacher gehts nicht. Die Matrix hat quadratisch zu sein und man muss zunächst definieren, wieviele Zeilen man hat. Dann wird Zeile für Zeile eingegeben, zum Schluß die Rechte Seite. Null-Elemente müssen nicht eingegeben werden. Der Algo für das Finden von Elementen ist eine schnelle binäre Suche. Das wars schon. :wink:
mschnell hat geschrieben:Bleiben die Matrizen im Laufe der Bearbeitung so unterbesetzt, dass die komplexe Darstellung mit Records sinnvoll bleibt, oder müssen neue Elemente <> 0 kreiert werden ?
Die Eingabematrix muss bei der Berechnung der schnellen Solver unverändert erhalten bleiben. Unverändert bedeutet, dass sie höchstens in eine andere Matrix mit dem gleichen Lösungsvektor umgewandelt werden darf, also Zeilen umsortieren etc. ist erlaubt. Kurz: Nein, es müssen keine neuen Elemente <> Null erzeugt werden. Das wäre auch kontraproduktiv, wegen den dynamischen Arrays würde das zuviel Zeit in Anspruch nehmen und wäre, soweit ich weiß auch nicht sehr speicherfreundlich.
mschnell hat geschrieben:st für die Mesh-Geschichte (Polygon-Netze) nicht tatsächlich eine Bearbeitung in der Grafikkarte das gegebene ?
Tja, das glauben die meisten Leute. Aber das ist definitiv nicht so. Das alte OpenGL, das den meisten Leuten viele Goodies und Erleichterungen angeboten hat, wird nicht mehr weiterentwickelt. Es gibt jetzt Geometry-Shader, aber die erwarten für Ihre Berechnungen ziemlich viele Eingaben vom Programmierer. Die berechnen beileibe nicht alles selbst. Die schwierigen langwierigen Dinge müssen der Grafikkarte mundgerecht zur Kenntnis gebracht werden, also vorberechnet werden. Ich habe den Leuten zugesehen, die gejubelt haben: "Es gibt jetzt OpenGL3!" Aber was dabei nicht so laut gesagt wurde: vom Programmierer wird jetzt viel mehr höhere Mathematik verlangt also voher. Und Mathematiker sind eine dünngesäte Spezies.

Ich bin auch kein Mathematiker. Aber ich brauche das Zeug. Ich habe nachgesehen, ob es solche Software gibt. Ja die gibt es. Aber alles in C,C++,Fortran(!), sogar Python. Aber nichts in Pascal.

Viele Grüße
Traude

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 »

Traude hat geschrieben:Ich habe jetzt in die numlib reingeschaut, aber ich kenn mich nicht aus. Gibt es da auch eine Doku dazu?
Ja, aber auf Papier und in Niederländisch.
EDIT: Das habe ich gefunden: http://www.at.freepascal.org/packages/numlib.html, aber das ist ein bissl wenig.
Wenn man auf "View Interface" klickt kommt: "Page not found".
Jemand von Jedi Math hat angefangen die Dokumenten zu Übersetzen, aber das ist nicht gelungen. Jedi math ist tot.

Das starke Punkt der numlib Package ist das es hier an der Uni manche Jahre benutzt ist, also validiert durch Mathematiker.

Die Algorithmen kommen meistens von eine Buchenreihe "Handbuch der Automatik" ( Siebziger Jahren) glaube ich

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 »

marcov hat geschrieben:
Traude hat geschrieben:Ich habe jetzt in die numlib reingeschaut, aber ich kenn mich nicht aus. Gibt es da auch eine Doku dazu?
Ja, aber auf Papier und in Niederländisch.
Ist es möglich, das zu Scannen und zugänglich zu machen ? So hat man eine Chance sich zumindest zu orientieren.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mitprogrammierer gesucht an Matrix Unit

Beitrag von mschnell »

Traude hat geschrieben: Er ist aber vermutlich der einzige Mathematiker hier
Ich habe einmal Mathematik studiert. Das ist aber knapp 100 Jahre her :( .

Mich interessieren heute eher die informations-theoretischen Deteils. Threads habe ich in unserem Verfahren zwar nicht am Start, wäre aber kein allzu großes Problem.

"weniger komplexe Definition der Matrix". Ich meine eine Darstellung, die vermeidet Für jeden wert explizit die Koordinaten anzugeben. Wenn z.B, vorher bekannt ist, dass die Matrix aus einer dreier-Diagonalen besteht, reichen die Werte ohne Koordinaten als Beschreibung. Damit könnte man schneller rechnen, als mit Deiner allgemeingültigen Darstellung. (So was ist aber möglicherweise praktisch nicht anwendbar.)

"wegen den dynamischen Arrays würde das zuviel Zeit in Anspruch nehmen"
Nö. Im Gegenteil. Bei Deiner Darstellung braucht man neue Elemente nur hinten an das dynamische Array anzuhängen, weil Du ja beide Indizes immer explizit mit angibst.

-Michael

Antworten