р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).
Ссылка на скачивание - внизу страницы.