Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Inverse einer matrix (https://www.delphipraxis.net/162352-inverse-einer-matrix.html)

Bjoerk 19. Aug 2011 00:43

AW: Inverse einer matrix
 
Gegen eine Typendeklaration spricht in Delphi eigentlich nie etwas.

Delphi-Quellcode:
type
  TMat = array of array of double;
  TVek = array of double;

Vielleicht noch ein kleiner Hinweis. Die inverse Matrix zu berechnen ist sehr anspruchsvoll. Deshalb geht man in der Regel anders vor: N mal Gauss mit Einheitsvektor als Rechter Seite durchlaufen ergibt (Spaltenweise) die Reziproke Matrix.

Beispiel:

Matrix:
1 2 0
2 3 0
3 4 1

Rechte Seite 1. Durchlauf:
1
0
0
Lösungsvektor 1. Durchlauf:
-3
2
1

Rechte Seite 2. Durchlauf:
0
1
0
Lösungsvektor 2. Durchlauf:
2
-1
-2

Rechte Seite 3. Durchlauf:
0
0
1
Lösungsvektor 3. Durchlauf:
0
0
1

Reziproke Matrix:
-3 2 0
2 -1 0
1 -2 1

BUG 19. Aug 2011 00:48

AW: Inverse einer matrix
 
Zitat:

Zitat von Bjoerk (Beitrag 1117959)
Vielleicht noch ein kleiner Hinweis. Die inverse Matrix zu berechnen ist sehr anspruchsvoll. Deshalb geht man in der Regel anders vor: N mal Gauss mit Einheitsvektor als Rechter Seite durchlaufen ergibt (Spaltenweise) die Reziproke Matrix.

Lustigerweise entspricht das genau dem Algorithmus, über den wir die ganze Zeit reden (nur das man da alle Durchläufe gleichzeitig macht) :stupid:

Bjoerk 19. Aug 2011 09:22

AW: Inverse einer matrix
 
Hi Bug,

stimmt, auf die Idee bin ich noch gar nicht gekommen. Man kann den Gauss ja logischerweise für mehrere Reche Seiten gleichzeitig laufen lassen. Danke für den Hinweis.

Gruß
Thomas

swarley 19. Aug 2011 14:45

AW: Inverse einer matrix
 
ich hab jetzt noch einmal eine frage zu dieser typdeklaration.
ich habe in meiner unitASM sozusagen stehen
Delphi-Quellcode:
type TMatrix = array [0..5,0..5] of double;
dann will ich die eingelesenen matrizen mat1 und mat2 aus den beiden stringgrids in das unterprogramm meiner "myunitmatrix" übergeben. dazu habe ich den aufruf
Delphi-Quellcode:
addieren(zeilen1,spalten1,mat1,mat2);
in der Unit Myunitmatrix, befindet sich dann folgender quelltext bis jetzt:
Delphi-Quellcode:
unit MyUnitMatrix;

interface
type TMatrix = array [0..5,0..5] of double;

procedure addieren(spalten1, zeilen1: Integer; mat1, mat2: TMatrix);
procedure subtrahieren(spalten1, zeilen1: Integer; mat1, mat2: TMatrix);
procedure multiplizieren(spalten1, zeilen1, spalten2: Integer; mat1,mat2:TMatrix);

implementation

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Math, UnitASM, UnitINV;



procedure addieren(spalten1, zeilen1: Integer;mat1,mat2:TMatrix);
var
  i, j: Integer;
  mat3: TMatrix;
begin
  for i := 0 to (spalten1 - 1) do
  begin
    for j := 0 to (zeilen1 - 1) do
    begin
      mat3[i, j] := (mat1[i, j] + mat2[i, j]);
    end;
  end;
end;

end.
so wenn ich das ganze nun compiliere, dann erhalte ich in der unitASM die fehlermeldung beim aufruf von "addieren" : "[DCC Fehler] UnitASM.pas(83): E2010 Inkompatible Typen: 'MyUnitMatrix.TMatrix' und 'UnitASM.TMatrix'"

in meiner vorherigen fassung hatte ich die matrizen global deklariert, nur leider darf ich das nicht. Irgendwas mach ich bei der Übergabe falsch? Bzw kenn ich wohl die vorschriften für die übergabe von arrays nicht?! Wie kann ich denn ein Array ins unterprogramm einer anderen unit übergeben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.
Seite 2 von 2     12   

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