Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Matrizen: Inverse, Transponierte und Determinante bestimmen (https://www.delphipraxis.net/69949-matrizen-inverse-transponierte-und-determinante-bestimmen.html)

xexex84 22. Mai 2006 19:44


Matrizen: Inverse, Transponierte und Determinante bestimmen
 
Hallo,
ich brauche ein Delphi Programm, mit dem ich für eine quadratische Matrix beliebiger Größe, die transponierte Matrix, die inverse Matrix und die Determinante ermitteln kann.

Gibt es so ein Programm schon irgendwo? Hat hier evtl. schon einmal jemand etwas ähnliches programmiert.
Ich kenne mich leider mit Delphi nicht sehr gut aus, hatte nur kurz in der Schule mal einige einfache Programme damit erstellt.
Kann mir jemand helfen? :?:

s.h.a.r.k 22. Mai 2006 19:53

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
hey. schon mal mit Microsoft Excel experimentiert? das kann das auch und zwar recht gut!

xexex84 22. Mai 2006 20:00

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Ja, natürlich kann Excel das.
Aber es soll ja eben leider ein Delphi Programm sein. :wink:

Dust Signs 22. Mai 2006 20:06

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Bei Omorphia haben die eine nette Unit dafür... einfach mal schaun Klick

Dust Signs

Jelly 22. Mai 2006 20:40

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Zitat:

Zitat von s.h.a.r.k
hey. schon mal mit Microsoft Excel experimentiert? das kann das auch und zwar recht gut!

:shock: :gruebel:
Seit wann kann Excel rechnen. Warum nur errechnet Excel immer wieder andere Werte als wissenschaftlich anerkannte und überall benutze Programme wie Origin oder Matlab. :mrgreen:

Aber was Du meinst, ist wohl Excel über OLE anzusteuern, und so die Matrizenoperationen durchzuführen.

alzaimar 22. Mai 2006 21:01

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Ich habe meine Bibel ("Algorithms") gerade nicht zur Hand, aber prinzipiell geht das doch mit dem Gauschen Eliminationsverfahren, oder nicht? Egal, es dürfte auch bei Wiki reihenweise Verfahren geben, die leicht nachzuprogrammieren sind. Bei den Inversen, die ich mal machen musste, weiß ich nur, das die LUP-Dekomposition numerisch stabil ist.

Der Codeaufwand hält sich übrigens in Grenzen...

jus 23. Mai 2006 01:31

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Ich habe mal die Jedi Math Bibliothek für Matrizzen von Type IJmFloatMatrix verwendet, sie enthält viele grundlegenden Matrizzenfunktionen wie auch das Transponieren, Invertieren,... schon. Die Implementierung klappte zumindest bei mir auf Anhieb. Ob die Bibliothek im Bereich der Matrizzen von der Performance gut ist, kann ich leider nicht sagen.

Grüsse,
jus

xexex84 24. Mai 2006 22:06

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Danke für die bisherigen Antworten. War schon sehr hilfreich, aber jetzt frage ich mich wie ich die Matrix an sich am besten implementiere.
Ich würde das als 2-dimensionales Feld machen, also zb. var Matrix : array[i,j], wie muss ich diesen Datentyp in oder die Variable definieren?
Und wie kann ich diese Matrix dann in der GUI am besten füllen, StringGrid sieht ganz gut aus, kann man das auch in der Größe variabel machen (also die Anzahl der Reihen etc.)? Gibt es eine Metheode den gesamten inhalt direkt in die Matrix zu übertragen oder ist die Schleife der beste Weg? :gruebel:

jus 24. Mai 2006 23:52

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
Zitat:

Zitat von xexex84
Danke für die bisherigen Antworten. War schon sehr hilfreich, aber jetzt frage ich mich wie ich die Matrix an sich am besten implementiere.
Ich würde das als 2-dimensionales Feld machen, also zb. var Matrix : array[i,j], wie muss ich diesen Datentyp in oder die Variable definieren?

:gruebel: hast du dir die Jedi Math Bibliothek überhaupt angeschaut? Da gibt es schon eine fertige zweidimensionale Matrix vom Typ IJmFloatMatrix.
d. h. zum Erstellen brauchst du nur die Matrix mit dem Befehl Matrix mit der Matrixgröße übergeben und fertig.
Delphi-Quellcode:

uses ...,JmTypes, JmFloatMatrix;

implementation

var
  TestMatrix: IJmFloatMatrix;

procedure Erstelle_Matrix(ZeilenAnzahl, SpaltenAnzahl: Integer);
begin
  TestMatrix:=Matrix(ZeilenAnzahl, SpaltenAnzahl);
end;
Zitat:

Zitat von xexex84
Und wie kann ich diese Matrix dann in der GUI am besten füllen, StringGrid sieht ganz gut aus, kann man das auch in der Größe variabel machen (also die Anzahl der Reihen etc.)? Gibt es eine Metheode den gesamten inhalt direkt in die Matrix zu übertragen oder ist die Schleife der beste Weg? :gruebel:

Intuitiv würde ich auch StringGrid zum Eingeben verwenden. Du kannst ja in deinem Programm mit z.B. SpinEdit Felder abfragen wie groß die Matrix sein soll, dann setzt du die Eigenschaften ColCount und RowCount von StringGrid z.B. StringGrid1.ColCount:=SpinEdit1.Value u. StringGrid1.RowCount:=SpinEdit2.Value.

Wenn der User fertig ist mit der Eingabe im StringGrid übernimmst es in deine Matrix, das du mit der Jedi Math erstellt hast.
z.B.
Delphi-Quellcode:
procedure StringGrid2JediMatrix(const SourceGrid: TStringGrid; var DestMatrix:IJmFloatMatrix);
var
  zeile, spalte: Integer;
begin
  for zeile:=0 to SourceGrid.RowCount-1 do
    for spalte:=0 to SourceGrid.ColCount-1 do
    begin
      DestMatrix[zeile+1,spalte+1]:=StrToFloat(SourceGrid.Cells[spalte,zeile]); //weil IJmFloatMatrix 1 basiert und StringGrid 0 basiert
    end;
end;
Ich habe das auf die schnelle eingetippt, also bitte nicht bös sein, wenn etwas auf Anhieb nicht funktioniert. :) Was hier fehlen könnte sind weitere Überprüfungen, wie z.B. ob in der StringGrid wirklich Zahlen drin stehen, aber das kannst du ja noch nachholen. :wink:


Grüsse,
jus

xexex84 25. Mai 2006 11:21

Re: Matrizen: Inverse, Transponierte und Determinante bestim
 
ja ich hab mir die angeschaut, aber ich will ja die matrix selbst machen, und wollte eigentlich keine "extra" unit verwenden. danke trotzdem ich werde das dann erstmal so probieren. :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz