AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Inverse einer matrix

Ein Thema von swarley · begonnen am 18. Aug 2011 · letzter Beitrag vom 19. Aug 2011
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

AW: Inverse einer matrix

  Alt 18. Aug 2011, 18:27
also in der aufgabenstellung ist nichts gegeben, demnach nehm ich ma ganz stark an, dass wir uns in Q befinden.
Das solltest du unbedingt klären oder den Algorithmus unabhängig vom Körper implementieren (aber deinem bisher gezeigtem Quellcode nach solltest du das besser nicht versuchen).

Die reellen Zahlen solltest du vermeiden, da man die im Computer nicht genau darstellen kann und deshalb nur Ärger hat.
Wenn du es dir aussuchen darfst: mit einer Restklasse modulo einer Primzahl gibt es imho am wenigsten Probleme.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Inverse einer matrix

  Alt 19. Aug 2011, 00:43
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Inverse einer matrix

  Alt 19. Aug 2011, 00:48
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)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Inverse einer matrix

  Alt 19. Aug 2011, 09:22
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
  Mit Zitat antworten Zitat
swarley

Registriert seit: 17. Aug 2011
6 Beiträge
 
#5

AW: Inverse einer matrix

  Alt 19. Aug 2011, 14:45
ich hab jetzt noch einmal eine frage zu dieser typdeklaration.
ich habe in meiner unitASM sozusagen stehen
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 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?

Geändert von swarley (19. Aug 2011 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz