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
Напомним, что чем больше число обусловленности, тем менее точным оказывается решение системы линейных уравнений. И наоборот, решение тем точнее чем ближе число обусловленности к единице.