Zurück Vor +Ebene Home Inhalt Index Hilfe

Matrixinversion nach Gauß-Jordan

Programm zur Matrixinversion einer (n x n)-Matrix nach dem Gauß-Jordan-Verfahren ohne Pivotisierung.

program GJordan(input, output);

    {Berechnung der inversen Matrix nach Gauss-Jordan}
    
    uses
        stdfile;
    
    const
        MaxArray = 32;
        
    var
        n:       integer;
        a, b:    array [1..MaxArray, 1..MaxArray] of double;
        i, j, k: integer;
        t:       double;
                        
    procedure init;
        var
            fName: string;
            f:     text;
            t:     double;
            i:     integer;
        begin {init}
            writeln('Berechnung der inversen Matrix nach Gauss-Jordan');
            writeln;
            writeln('In welcher Datei steht die Matrix? (In gjordan.dat liegt ein Beispiel.)');
            readln(fName);
            if StdOpen(f, fName) then begin
                if not StdRead(f, t) then begin
                    writeln('Kann Dimension nicht lesen.');
                    halt
                end; {if}
                if t > MaxArray then begin
                    writeln('Dimension zu gross (groesser als ', MaxArray,
                        ').');
                    halt
                end; {if}
                n := round(t);
                for i := 1 to n do begin
                    if not StdReadn(f, n, @a[i, 1]) then begin
                        writeln('Fehler beim Lesen der ', i, '-ten Zeile.');
                        halt
                    end {if}
                end; {for}
                writeln;
                close(f)
            end else begin {if}
                writeln('Kann Datei "', fName, '" nicht oeffnen.');
                halt
            end {if}
        end; {init}

    procedure result;
        var
            i, j: integer;
        begin {result}
            writeln('Das Ergebnis lautet');
            writeln;
            for i := 1 to n do begin
                for j := 1 to n do begin
                    write(b[i, j]:7:3, ' ')
                end; {for}
                writeln
            end {for}
        end; {result}

    begin {GJordan}
        init;
        for k := 1 to n do begin
            for j := 1 to n do begin
                b[k, j] := 0
            end; {for}
            b[k, k] := 1
        end; {for}
        for k := 1 to n do begin
            t := a[k, k];
            for j := 1 to n do begin
                a[k, j] := a[k, j] / t;
                b[k, j] := b[k, j] / t
            end; {for}
            for i := 1 to n do begin
                if i <> k then begin
                    t := a[i, k];
                    for j := 1 to n + 1 do begin
                        a[i, j] := a[i, j] - t * a[k, j];
                        b[i, j] := b[i, j] - t * b[k, j]
                    end {for}
                end {if}
            end {for}
        end; {for} 
        result     
    end. {GJordan}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik