Gauss-Jordan matrix inversion: Difference between revisions
→{{header|Free Pascal}}
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
var
i, j, Order: Integer;
begin
begin
for j :=
Write(A[i, j]:8:4
WriteLn;▼
▲ for i := 1 to Order do
for j := Order + 1 to 2 * Order do▼
WriteLn;
end;
end;
Line 2,594 ⟶ 2,585:
end;
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;
for i := 0 to Pred(Order) do
Result[i, j] := A[Succ(i), Succ(j) + Order];
▲ A: Matrix;
▲ Order := Length(B);
▲ A := PopulateMatrix(B, Order);
WriteLn('=== Original Matrix ===');▼
PrintMatrix(A, Order);▼
GaussJordan(A, Order);▼
WriteLn('=== Inverse Matrix ===');▼
end;
begin
DoGaussJordan(MATRIX_2);▼
writeln('== Original Matrix ==');
PrintMatrix(GaussJordan(MATRIX_2));
end.
</syntaxhighlight>
{{out}}
<pre>
1.0000
4.0000
7.0000
▲=== Inverse Matrix ===
-0.8125 0.1250 0.1875 ▼
0.
== 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
0.
</pre>
▲=== Inverse Matrix ===
=={{header|Generic}}==
|