Текст подпрограммы и версий
am16r_p.zip , am16e_p.zip , am16c_p.zip
Тексты тестовых примеров
tam16r_p.zip , tam16e_p.zip , tam16c_p.zip

Подпрограмма:  AM16R (модуль AM16R_p)

Назначение

Умножение симметричной матрицы, заданной в компактной форме, на вектор.

Математическое описание

Для симметричной матрицы  А размера 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. )