Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Matrizen: Inverse, Transponierte und Determinante bestim

  Alt 24. Mai 2006, 23:52
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?
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 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?
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.


Grüsse,
jus
  Mit Zitat antworten Zitat