Модуль реализации матричных вычислений для массивов больших размеров
Автор: Andrey
WEB-сайт: http://delphikingdom.com
В этом модуле «осели» все операции с матрицами и векторами, которые я использовал для работы. Но есть алгоритмы, которые многие, наверняка, увидят впервые: Divide – алгоритм прямого деления, MSqrt – квадратный корень, MAbs – абсолютная величина. Поскольку модуль содержит все, от элементарных операций до матричных, разобраться будет несложно:
Например, решение системы ЛУ (консольное приложение)
var
N : Integer;
A : Matrix;
b, x : Vector;
begin
N := . . .;
A.Init( N, N );
b.Init( N );
x.Init( N ); // или x.Init( B ); или x.InitRow( A );
. . .
{ формирование A и b }
. . .
x.Divide( b, A );
x.Print;
. . .
end.
Некоторые алгоритмы требуют пояснения, например:
Matrix.E( i, j : LongWord ) или Vector.E( i : Integer ) : RealPtr
(RealPtr = ^Real) функция для вычисления адреса элемента матрицы/вектора. Перешла из ДОС когда в модуле использовался алгоритм управления виртуальной памятью для больших размерностей.
Matrix.Multiple( X, Y : Vector )
Результатом, которого является произведение вектора X на транспонированный вектор Y - матрица ранга 1.
Matrix.Invert( A : Matrix )
– если A[N,M], и N <> M то результат – матрица размера [M,N] – псевдообратная = A+.
Matrix.Addition( A : Matrix; B : Real )
– добавление числа в главную диагональ.
Matrix.Diag( r : Real )
– присваивание значения главной диагонали.
Когда есть исходный текст - разобраться можно всегда.
Этот модуль используется почти во всех реализованных мной численных алгоритмах и методах. Те части, которые писал не я – приводятся без изменений(по возможности) стиля и комментариев.
Скачать hmatrixw.zip (14K)
|