р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
Наиболее распространенный подход к решению задач сглаживания данных основывается на методе наименьших квадратов. Его суть заключается в следующем:
Пусть заданы точек
,
где
интерпретируется как
независимое переменное, а
– как
зависимое, связанное с
некоторой
неизвестной функциональной зависимостью
.
Строится линейная аппроксимация
линейной
комбинацией из
базисных функций:
.
Приведенное выражение называют линейной моделью, которая должна
быть согласована с данными .
Учитывая, что – число
точек данных обычно больше
– числа неизвестных
в разложении на базисные функции, задача выбора
переопределена
и интерполирующая модель обычно построена быть не может. Невязкой
называют
.
Критерий наименьших квадратов требует, чтобы выбирались из условия
.
Известно, что наиболее надежный метод вычисления коэффициентов в общей задаче наименьших квадратов основан на матричной факторизации, называемой сингулярным разложением. Реализация этого метода выполняется процедурой 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.