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

Пример

рrogram tfmin;

{$N-}

uses FMM, crt;

Var

a, b, z, tol : float;

i, j     : integer;

{$F+}

function f1(x : float) : float;

begin

f1:=x*(x*x-2)-5;

inc(j);

end;

{$F-}

Begin

clrscr;

writeln('  Иллюстрирующая программа для FMIN');

writeln;

a:=0;

b:=1;

writeln(' Определяется минимум функции F(X) = X**3 - 2*X - 5');

writeln('   при',a:2:0,' < X < ',b:2:0);

writeln;

tol:=1e-1;

writeln('    Tol         Xmin      Nofun');

writeln;

tol:=1e-1;

for i:=-2 downto -15 do begin

j:=0;

tol:=tol*0.1;

writeln(tol,'   ',fmin(a,b,tol,@F1):12:8,

'     ',j);

end;

end.

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

Иллюстрирующая программа для FMIN

Определяется минимум функции F(X) = X**3 - 2*X - 5

при 0 < X < 1

Tol         Xmin      Nofun

1.0000000000E-02    0.81692846     7

1.0000000000E-03    0.81646282     8

1.0000000000E-04    0.81649699     9

1.0000000000E-05    0.81649699     9

1.0000000000E-06    0.81649587     9

1.0000000000E-07    0.81649536     15

1.0000000000E-08    0.81649542     15

1.0000000000E-09    0.81649543     15

1.0000000000E-10    0.81649543     15

1.0000000000E-11    0.81649543     15

1.0000000000E-12    0.81649543     15

1.0000000000E-13    0.81649543     15

1.0000000000E-14    0.81649543     15

1.0000000000E-15    0.81649543     15

ГЛАВА 8. Наименьшие квадраты и сингулярное разложение

Наиболее распространенный подход к решению задач сглаживания данных основывается на методе наименьших квадратов. Его суть заключается в следующем:

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

.

Приведенное выражение называют линейной моделью, которая должна быть согласована с данными .

Учитывая, что  – число точек данных обычно больше  – числа неизвестных в разложении на базисные функции, задача выбора  переопределена и интерполирующая модель обычно построена быть не может. Невязкой  называют

.

Критерий наименьших квадратов требует, чтобы  выбирались из условия

.

Известно, что наиболее надежный метод вычисления коэффициентов в общей задаче наименьших квадратов основан на матричной факторизации, называемой сингулярным разложением. Реализация этого метода выполняется процедурой SVD.

§ 10. Подпрограмма SVD

Объявление

рrocedure SVD( m, n: integer;

var A: floatmatrixCS;

var W: floatvectorC;

matu: boolean;

var U: floatmatrixCS;

matv: boolean;

var V: floatmatrixCS;

var ierr: integer;

var Rv1: floatvectorC );

Назначение

Эта подпрограмма вычисляет сингулярное разложение  действительной прямоугольной матрицы  с размерами  и . При этом используются двухдиагонализация посредством хаусхолдеровых отражений и вариант QR-алгоритма.

Описание

Входная информация

m

―  число строк матрицы  (и ).

n

―  число столбцов  (и ) и порядок .

A

―  содержит прямоугольную входную матрицу, для которой находится разложение.

matu

―  должен иметь значение 'true', если нужно вычислять матрицу  из разложения, и значение 'false' в противном случае.

matv

―  должен иметь значение 'true', если нужно вычислять матрицу  из разложения, и значение 'false' в противном случае.

Размерности  и  матрицы  не должны превышать значения объявленной в модуле FMM размерности массивов типа floatmatrixCS (константы NDIMS и NDIMC соответственно). Если это условие не выполняется, то следует переопределить значения этих констант соответствующим образом в своей головной программе.

Выходная информация

A

―  не изменяется (если на ее месте не записываются  либо ).

W

―  содержит  (неотрицательных) сингулярных чисел  (диагональных элементов ), они не упорядочены. Если происходит выход по ошибке, то для значений ierr + 1, ierr + 2, …, n сингулярные числа должны быть верны.

U