Einzelnen Beitrag anzeigen

Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#3

Re: Lineares Gleichungssystem lösen?

  Alt 6. Feb 2005, 17:02
Man sieht auf den ersten Blick, dass dein Gleichungssystem nicht linear ist. Gauss bzw. Gauss-Jordan können aber nur mit linearen Gleichungssystemen rechnen. Außerdem: darf ich fragen, warum deine Lösung wie eine kubische Gleichung aussieht?

btw: hier mein Gauss-Jordan, is etwas effektiver als Gauss:

//EDIT: musst den Code natürlich noch anpassen; is ein älterer Code, an dem ich nicht mehr arbeite

Delphi-Quellcode:
program gauss_jordan;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, j, k: Integer; //für Schleifen
  pivot, z: Integer; //für Pivotelement und gemerktes Element; zum Multiplizieren

var
  matrix: Array [1..3] of Array [1..3] of Integer;
  loesungsvektor: Array [1..3] of Integer;
  ergebnis: Array [1..3] of Integer;

procedure ZwischenergebnisAnzeigen;
var
  l, m: Integer;
begin
  WriteLn;
  for l := 1 to 3 do begin
    WriteLn;
    for m := 1 to 3 do begin
      Write(matrix[l, m]: 12);
      end;
    Write(' |', loesungsvektor[l]: 12);
    end;
  WriteLn;
  WriteLn('z: ', z, ' pivot: ', pivot, ', j: ', j, ', k: ', k);
end;

begin

  WriteLn('Gleichungslösen nach Gauss-Jordan');
  WriteLn('=================================');
  WriteLn;

  WriteLn('Bitte geben Sie die Komponenten der Koeffizientenmatrix ein (Zeile, Spalte):');
  WriteLn;

  for i := 1 to 3 do begin
    for j := 1 to 3 do begin
      Write('Element ', i, ',', j, ': ');
      ReadLn(matrix[i, j]);
      end;
    end;

  WriteLn;
  WriteLn('Bitte geben Sie die Komponenten des Lösungsvektors ein:');
  WriteLn;

  for i := 1 to 3 do begin
    Write('Komponente ', i, ': ');
    ReadLn(loesungsvektor[i]);
    end;

  //Gauss-Jordan

  for i := 1 to 3 do begin
    pivot := matrix[i, i]; //Pivotelement
    for j := 1 to 3 do begin //Zeilen
      if i <> j then begin //Pivotzeile unverändert lassen
        z := matrix[j, i]; //aktuelles Element merken
        for k := 1 to 3 do begin //Spalten
          ZwischenErgebnisAnzeigen;
          ReadLn;
          matrix[j, k] := pivot * matrix[j, k] - z * matrix[i, k]; //Elemente berechnen
          end;
        loesungsvektor[j] := pivot * loesungsvektor[j] - z * loesungsvektor[i]; //Komponenten des Lösungsvektors analog berechnen
        end;
      end;
    end;

    ZwischenergebnisAnzeigen;

  //Gauss-Jordan Ende

  for i := 1 to 3 do
    ergebnis[i] := loesungsvektor[i] div matrix[i][i];

  WriteLn;
  WriteLn;
  WriteLn('Lösung der Gleichung:');
  WriteLn;

  for i := 1 to 3 do
    WriteLn('Unbekannte ', i, ': ', ergebnis[i]);

  WriteLn;
  WriteLn('-----------------------------------------------------------------------------');
  WriteLn('Gleichungslösen nach Gauss-Jordan - (c) by Dust Signs Andreas Unterweger 2004');
  ReadLn;

end.
Dust Signs

//EDIT2+3: immer dieser Tippfehler ^^
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat