Gauss-Jordan matrix inversion: Difference between revisions

Line 2,518:
{$mode ObjFPC}{$H+}
 
const
MATRIX_1: array of array of Real = ((1, 2, 3),
(4, 1, 6),
(7, 8, 9));
MATRIX_2: array of array of Real = ((3.0, 1.0, 5.0, 9.0, 7.0),
(8.0, 2.0, 8.0, 0.0, 1.0),
Line 2,541 ⟶ 2,542:
end;
 
procedure PrintMatrix(const A: Matrix; Order: Integer);
var
i, j, Order: Integer;
begin
for iOrder := 1 to Order doLength(A);
for i := 10 to Pred(Order) do
begin
for j := 10 to Pred(Order) do
Write(A[i, j]:8:4, ' ');
WriteLn;
end;
end;
 
procedure PrintInverse(const A: Matrix; Order: Integer);
var
i, j: Integer;
begin
for i := 1 to Order do
begin
for j := Order + 1 to 2 * Order do
Write(A[i, j]:8:4, ' ');
WriteLn;
end;
WriteLn;
end;
 
Line 2,594 ⟶ 2,585:
end;
 
procedurefunction GaussJordan(var AB: Matrix; Order): Integer)Matrix;
var
i, j, Order: Integer;
Pivot, Multiplier: Real;
A: Matrix;
begin
Order := Length(B);
SetLength(Result, Order, Order);
A := PopulateMatrix(B, Order);
 
// Create the augmented matrix
for i := 1 to Order do
Line 2,622 ⟶ 2,618:
end;
end;
end;
 
for i := 0 to Pred(Order) do
procedure DoGaussJordan(B: Matrix);
for j := Order + 10 to 2 * Pred(Order) do
var
Result[i, j] := A[Succ(i), Succ(j) + Order];
A: Matrix;
Order: Integer;
begin
Order := Length(B);
A := PopulateMatrix(B, Order);
WriteLn('=== Original Matrix ===');
PrintMatrix(A, Order);
GaussJordan(A, Order);
WriteLn('=== Inverse Matrix ===');
PrintInverse(A, Order);
end;
 
begin
WriteLnwriteln('=== Original Matrix ===');
DoGaussJordan(MATRIX_1);
PrintMatrix(A, OrderMATRIX_1);
WriteLn;
WriteLnwriteln('=== Inverse Matrix ===');
DoGaussJordan(MATRIX_2);
PrintMatrix(GaussJordan(A, OrderMATRIX_1));
writeln('== Original Matrix ==');
DoGaussJordanPrintMatrix(MATRIX_2);
= writeln('== Inverse Matrix ===');
PrintMatrix(GaussJordan(MATRIX_2));
end.
 
</syntaxhighlight>
{{out}}
<pre>=== Original Matrix ===
1.0000 2.0000 3.0000
4.0000 1.0000 6.0000
7.0000 8.0000 9.0000
 
=== Inverse Matrix ===
=== Inverse Matrix ===
-0.8125 0.1250 0.1875
-0.12508125 -0.2500 1250 0.1250 1875
0.5208 1250 -0.12502500 -0.1458 1250
- 0.8125 5208 0.1250 -0.1875 1458
 
== Original Matrix ==
3.0000 1.0000 5.0000 9.0000 7.0000
8.0000 2.0000 8.0000 0.0000 1.0000
1.0000 7.0000 2.0000 0.0000 3.0000
0.0000 1.0000 7.0000 0.0000 9.0000
3.0000 5.0000 6.0000 1.0000 1.0000
 
=== OriginalInverse Matrix ===
30.00000286 10.00001943 50.00001330 9-0.00000596 7-0.0000 2578
8 -0.00000058 2-0.00000326 80.0000 1211 -0.00000380 10.0000 0523
1 -0.00000302 7-0.00000682 2-0.0000 1790 0.00000605 30.0000 2719
0.00001002 1-0.00000673 7-0.0000 0562 -0.00000626 90.0000 0981
30.00000241 50.00000567 60.00001258 10.00000682 1-0.0000 2173
</pre>
=== Inverse Matrix ===
0.0286 0.1943 0.1330 -0.0596 -0.2578
-0.0058 -0.0326 0.1211 -0.0380 0.0523
-0.0302 -0.0682 -0.1790 0.0605 0.2719
0.1002 -0.0673 -0.0562 -0.0626 0.0981
0.0241 0.0567 0.1258 0.0682 -0.2173</pre>
 
=={{header|Generic}}==
44

edits