|
Текст подпрограммы и версий am16r_p.zip , am16e_p.zip , am16c_p.zip |
Тексты тестовых примеров tam16r_p.zip , tam16e_p.zip , tam16c_p.zip |
Умножение симметричной матрицы, заданной в компактной форме, на вектор.
Для симметричной матрицы А размера N * N, заданной в компактной форме, и вектора B длины N вычисляется вектор C длины N, C = A B .
procedure AM16R(var A :Array of Real; var B :Array of Real;
var C :Array of Real; N :Integer);
Параметры
| A - | вещественный вектор длины N * (N + 1)/2, содержащий симметричную матрицу A, заданную в компактной форме; |
| B - | вещественный одномерный массив длины N, содержащий заданный вектор - сомножитель; |
| C - | вещественный вектор длины N, в котором запоминается результат произведения; |
| N - | заданный порядок исходной матрицы А (тип: целый). |
Версии
| AM16E - | умножение с расширенной (Extended) точностью вещественной симметричной матрицы, заданной в компактной форме, на вектор; |
| AM16C - | умножение эрмитовой матрицы, заданной в компактной форме, на комплексный вектор. |
Вызываемые подпрограммы: нет.
Замечания по использованию
| 1. |
В подпрограмме АМ16E параметры А, B, C имеют тип Extended. | |
| 2. | В подпрограмме AM16C параметры А, B, C имеют тип Complex. |
Unit tam16r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AM16R_p;
function tam16r: String;
implementation
function tam16r: String;
var
N,K,_i :Integer;
R :Real;
A :Array [0..9] of Real;
B :Array [0..3] of Real;
C :Array [0..3] of Real;
label
_1,_2;
begin
Result := '';
N := 4;
for K:=1 to 10 do
begin
R := K;
_1:
A[K-1] := R;
end;
for K:=1 to 4 do
begin
R := 5.0-K;
_2:
B[K-1] := R;
end;
AM16R(A,B,C,N);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%20.16f ',[C[_i]]);
if ( ((_i+1) mod 2)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tam16r',Result); { вывод результатов в файл tam16r.res }
exit;
end;
end.
Результат: С = ( 25., 35., 52., 80. )