Описание типов и констант модуля FMM. Задачи линейной алгебры. Подпрограмма DECOMP. Подпрограмма SOLVE, страница 13

―  содержит матрицу  (с ортогональными столбцами) из разложения, если для параметра matu было задано значение true в противном случае U используется как временный массив. U также может совпадать с A. Если происходит выход по ошибке, то столбцы U, соответствующие индексам верных сингулярных чисел, должны быть также верны.

V

―  содержит матрицу  (ортогональную) из разложения, если для параметра matv было задано значение true. В противном случае на V не производится ссылок. V также может совпадать с A, если  не вычисляется. Если происходит выход по ошибке, то столбцы V, соответствующие индексам верных сингулярных чисел, должны быть также верны.

iеrr

―  = 0 – если происходит нормальный выход из подпрограммы,

―  = k – если -oе сингулярное число не было определено после 30 итераций.

RV1

―  это массив промежуточного хранения.

Пример

рrogram TSVD;

uses FMM, crt;

var

A, U, V        : floatmatrixCS;

S, W         : floatvectorc;

i, err, j, m, nm, n  : integer;

Begin

clrscr;

writeln('Иллюстрирующая программа для SVD - вычисляется т');

writeln('  сингулярное разложение матрицы  A = U*S*V');

writeln;

nm:=5; m:=5; n:=3;

for i:=1 to m do for j:=1 to n do a[i,j]:=i+(j-1)*m;

for i:=1 to m do begin

for j:=1 to n do write(a[i,j]:8:3,' ');

writeln;

end;

gotoxy(35,4); writeln(' initial matrix A');

gotoxy(1,10);

SVD(m, n, a, s, true, u, true, v, err, w);

writeln(' Error code = ',err);

writeln;

for j:= 1 to n do write(s[j]:8:3,' ');

write('     vector S');

writeln; writeln;

for i:=1 to m do begin

for j:=1 to n do write(u[i,j]:8:3,' ');

writeln;

end;

gotoxy(35,14); writeln('  matrix U');

gotoxy(1,20);

for i:=1 to n do begin

for j:=1 to n do write(v[i,j]:8:3,' ');

writeln;

end;

gotoxy(35,20); writeln('  matrix V');

gotoxy(1,24);

End.

Результаты выполнения тестового примера

Иллюстрирующая программа для SVD - вычисляется  т сингулярное разложение матрицы   A = U*S*V

1.000  6.000  11.000     initial matrix A

2.000  7.000  12.000

3.000  8.000  13.000

4.000  9.000  14.000

5.000  10.000  15.000

Error code = 0

35.127  2.465  0.000      vector S

-0.355  -0.689  0.220      matrix U

-0.399  -0.376  0.074

-0.443  -0.062  -0.817

-0.487  0.251  0.528

-0.531  0.564  -0.007

-0.202  0.890  -0.408      matrix V

-0.517  0.257  0.816

-0.832  -0.376  -0.408

ГЛАВА 9. Вспомогательные программы

Далее приводятся четыре вспомогательные программы, воспроизводящие соответствующие стандартные функции языка Фортран, которые могут быть полезны при перводе имеющихся библиотек программ с Фортрана на Паскаль.

§ 11. Подпрограмма POWRI

Объявление

Function рowRI( A: float;

b: integer ): float;

Назначение

Возведение вещественного числа в целую степень.

Описание

Число A типа FLOAT (см. ГЛАВА 1. Описание типов и констант модуля FMM) возводится в целую степень b (типа INTEGER), рowRI присваивается значение результата. A и b могут быть любыми числами.

§ 12. Подпрограмма POWRR

Объявление

Function рowRR( a: float;

b: float ): float;

Назначение

Возведение вещественного числа в вещественную степень.

Описание

Число A типа FLOAT (см. ГЛАВА 1. Описание типов и констант модуля FMM) возводится в вещественную степень b, рowRR присваивается значение результата. A и b могут быть любыми числами, однако поскольку операция возведения в вещественную степень вещественного отрицательного числа в действительной арифметике не определена, то вместо выхода по ошибке при A < 0 вычисляется abs( A ) в степени b.

§ 13. Подпрограмма SIGN

Объявление

function sign( a, b: float): float;

Назначение

Воспроизводится стандартная функция языка Фортран SIGN.

Описание

sign := Знак( b ) * abs( a ), a и b имеют тип FLOAT, также как и сама функция.

§ 14. Подпрограмма ISIGN

Объявление

function isign( a, b: integer ): integer;

Назначение

Воспроизводится стандартная функция языка Фортран ISIGN.

Описание

isign := Знак( b ) * abs( a ), a и b имеют тип INTEGER, также как и сама функция.