Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Gauß-Verfahren - Matrix lösen (https://www.delphipraxis.net/186376-gauss-verfahren-matrix-loesen.html)

gammatester 1. Sep 2015 10:49

AW: Gauß-Verfahren - Matrix lösen
 
Wenn es nur:-D darum geht, schnelle Langzahlarithmetik einzusetzen, kannst Du auch meine MPArith-Bibliothek verwenden (die ca 150 Mio Dezimalstellen sollten ja ausreichen). Eine Schwierigkeit bei Problemen wie Deinem ist halt, das es kein fertige Lösung gibt, man es selbst programmieren und sich erstmal einarbeiten muß. Aber wenn Du Deine Stringroutinen durch mp_xxx-Routinen ersetzt, sollte es möglich sein.

Bjoerk 1. Sep 2015 13:30

AW: Gauß-Verfahren - Matrix lösen
 
Was kriegst denn raus, wenn du (bei Floats) die Probe machst, also z.B. so. Da kann doch nix nennenswertes rauskommen?
Delphi-Quellcode:
function TGauss.GetMaxInversError: Extended; // E = A x A^-1;
var
  I, J, K: integer;
  Value: Extended;
begin
  Result := 0;
  SetLength(FTemp, Count, Count);
  try
    for I := 0 to Count - 1 do
      for J := 0 to Count - 1 do
      begin
        Value := 0;
        for K := 0 to Count - 1 do
          Value := Value + FA[I, K] * FI[K, J];
        FTemp[I, J] := Value;
      end;
    for I := 0 to Count - 1 do
      for J := 0 to Count - 1 do
      begin
        if I = J then
          Value := 1
        else
          Value := 0;
        Result := Max(Result, Abs(Value - FTemp[I, J]));
      end;
  finally
    SetLength(FTemp, 0);
  end;
end;

Mikkey 1. Sep 2015 15:57

AW: Gauß-Verfahren - Matrix lösen
 
Mal ein wenig zurück zur Ursprungsfrage...

Das Verfahren hat der olle Gaus entwickelt, um Rundungsfehler zu minimieren. Wenn ich nun durch die Rechnungen gar keine Rundungsfehler habe, brauche ich die auch nicht zu minimieren und kann ganz geradeaus

a) Die Dreiecksform berechnen
b) Rückwärtseinsetzen
c) fertig sein

was das genaue Rechnen betrifft, wäre es doch ganz easy sich eine Klasse zu schreiben, die von Haus aus Natürliche Zahlen bis 2^256 unterstützt. Wird durch eine Operation eine größere Zahl erforderlich, holt sich diese Klasse einen weiteren 256-Bit-Integer dazu ...

Die Klasse implementiert dann Addition Subtraktion und Multiplikation (alles relativ einfach).

Eine weitere Klasse besorgt das Zusammenfassen von Zähler und Nenner und am Ende der Berechnung die Division.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Seite 4 von 4   « Erste     234   

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