October 13, 2022

Матричные вычисления

Есть ли в PascalABC.NET модуль для матричных вычислений?
Конечно есть! Это - NumLibABC.

В приведенной программе программе проиллюстрировано умножение матрицы на вектор, нахождение обратной матрицы, вычисление определителя матрицы, а также решение системы линейных алгебраических уравнений с одновременным нахождением числа обусловленности матрицы.

Программа

uses NumLibABC;

begin
  var v := new Vector(2,4,3);
  var m := new Matrix(3,3,1,2,3,2,4,5,9,4,1);
  Println('Исходный вектор =',v.Value);
  Println('Исходная матрица:');
  m.Value.Println;
  Println('Обратная матрица:');
  m.Inv.Value.Print;
  Println('Произведение матрицы на вектор =',(m*v).Value);
  Println('Определитель =',m.Det);
  var cond: real;
  var res := m.SLAU(v,cond);
  Println('Решение СЛАУ =',res.Value);
  Println('Число обусловленности =',cond);
end.

Результат

Исходный вектор = [2,4,3] 
Исходная матрица: 
   1.00   2.00   3.00
   2.00   4.00   5.00
   9.00   4.00   1.00
Обратная матрица: 
   1.14  -0.71   0.14
  -3.07   1.86  -0.07
   2.00  -1.00   0.00
Произведение матрицы на вектор = [19,35,37] 
Определитель = -14 
Решение СЛАУ = [-0.142857142857143,1.07142857142857,0] 
Число обусловленности = 69.9261742032323 

Напомним, что чем больше число обусловленности, тем менее точным оказывается решение системы линейных уравнений. И наоборот, решение тем точнее чем ближе число обусловленности к единице.