Zurück Vor +Ebene Home Inhalt Index Hilfe

Pivotisierung

Programm zur Pivotisierung der Matrix und des Vektors des Gleichungssystems .

Dieses Programm ist sowohl für das Gauß-Verfahren als auch für das Gauß-Jordan-Verfahren einsetzbar.

program Pivotisierung(input, output);

        {Pivotisierung der Matrix A und des Vektors c des Gleichungssystems
        Ax = c}

    uses
        stdfile;

    const MaxArray = 32; {<= 32767}

    var
        i, j, k, n:  integer;
        a:           array [0..MaxArray, 0..MaxArray] of double;
        c:           array [0..MaxArray] of double;
        dummy, maxa: double;
        pivot:       integer;

    procedure init;
        var
            fName: string;
            f:     text;
            t:     double;
        begin {init}
            writeln('Darstellung der Pivotisierung der Matrix A und des Vektors c');
            writeln('des Gleichungssystems Ax = c');
            writeln;
            writeln('In welcher Datei liegen die Daten? (In pivot.dat liegt ein Beispiel.)');
            readln(fName);
            if StdOpen(f, fName) then begin
                if not StdRead(f, t) then begin
                    writeln('Konnte Dimension nicht lesen.');
                end; {if}
                n := round(t);
                if n > MaxArray then begin
                    writeln('Die Dimension ueberschreitet die vorgegebene Arraygroesse.');
                    halt
                end; {if}
                for i:=0 to n-1 do begin
                    if not StdReadn(f, n, @a[i, 0]) then begin
                        writeln('Konnte ', i+1, '-te Zeile nicht lesen.');
                    end; {if}
                end; {for}
                if not StdReadn(f, n, @c[0]) then begin
                    writeln('Konnte den Vektor nicht lesen.');
                end; {if}
            end else begin {if}
                writeln('Kann Datei "', fName, '" nicht oeffnen.');
                halt
            end; {if}
            close(f);
        end; {init}

    procedure result;
        begin {result}
            for i:=0 to n-1 do begin
                for j:=0 to n-1 do begin
                    write(a[i, j]:8:3, ' ');
                end; {for}
                writeln(' : ', c[i]:8:3);
            end; {for}
            writeln;
        end; {result}

   begin {Pivot}
       init;
       for k:=0 to n-1 do begin
           pivot := k;
           maxa  := abs(a[k,k]);
           for i:=k+1 to n-1 do begin
               dummy := abs(a[i, k]);
               if dummy > maxa then begin
                   maxa := dummy;
                   pivot := i
               end; {if}
           end; {for}
           if pivot <> k then begin
               for j:=k to n-1 do begin
                   dummy       := a[pivot, j];
                   a[pivot, j] := a[k, j];
                   a[k, j]     := dummy;
               end; {for}
               dummy    := c[pivot];
               c[pivot] := c[k];
               c[k]     := dummy;
           end; {if}
       end; {for}
       result;
   end. {Pivot}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik