RosettaCodeData/Task/Matrix-exponentiation-operator/PascalABC.NET/matrix-exponentiation-opera...

20 lines
453 B
ObjectPascal

uses NumLibABC;
function operator **(m: Matrix; exp: integer): Matrix;
extensionmethod;
begin
Assert(m.ColCount = m.RowCount, 'Matrix must be square.');
Assert(exp >= 0, 'Negative exponents not supported');
result := Matrix.Diag(m.RowCount, 1);
loop exp do result := result * m;
end;
begin
var A := new Matrix(2, 2, 1, 1, 1, 0);
'Original: '.Println;
A.Println;
A := A ** 10;
'Raised to the power of 10: '.Println;
A.Println;
end.