Текст подпрограммы и версий
ia12r_p.zip  ia12r1_p.zip 
Тексты тестовых примеров
tia12r_p.zip  tia12r1_p.zip 

Подпрограмма:  IA12R (модуль IA12R_p)

Назначение

Наилучшая равномерная аппроксимация дискретными монотонными функциями.

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

Для заданной дискретной функции F = (f1, f2, ..., fN) вычисляется наилучшее pавномеpное приближение T = (t1, t2, ..., tN) на классе дискретных монотонных функций из условия:

         max     pk | fk - tk |   =     min              max     pk | fk - yk |  ,
       1≤K≤N                            YS(M)        1≤K≤N 

где  pk > 0,  K = 1, 2, ..., N - заданные весовые коэффициенты, класс

     S(M) = { YRN : sign(M) (yK+1 - yK) ≥ 0 ,    K = 1, 2, ..., N-1 } , 

а заданный параметр M определяет вид монотонности: при M > 0 приближение T ищется на множестве неубывающих функций, при М < 0 - на множестве невозрастающих функций, а при M = 0 функция T полагается равной исходной функции F.

М.К.Самарин. Об устойчивости решения некоторых некорректных задач на множествах специальной структуры. Канд. Дисс., M., 1979.

Использование

procedure IA12R(var F :Array of Real; var T :Array of Real;
                var P :Array of Real; M :Integer; N :Integer);

Параметры

F - вещественный вектоp длины N заданных значений приближаемой функции;
T - вещественный вектоp длины N вычисленных значений приближающей функции;
P - вещественный вектоp длины N заданных весовых коэффициентов;
M - заданный параметр, определяющий класс приближающих функций (тип: целый);
M > 0 , приближение ищется на классе неубывающих функций;
M < 0 , приближение ищется на классе невозрастающих функций;
M = 0 , приближение полагается равным исходной функции;
N - заданное число значений функции F (тип: целый).

Версии

IA12R1 - наилучшая равномерная аппроксимация с единичными весовыми коэффициентами дискретными монотонными функциями. Первый оператор подпрограммы имеет вид:
     procedure IA12R1(var F :Array of Real; var T :Array of Real; M :Integer; N :Integer);
где параметры F, T, M, N имеют тот же смысл, что и одноименные параметры подпрограммы IA12R.

Вызываемые подпрограммы: нет

Замечания по использованию

 

При обращении к подпрограмме IA12R1 параметр P не задается, поскольку предполагается, что  pK = 1,  K = 1, 2, ..., N.

Алгоритм, реализованный в подпрограмме IA12R, вычисляет искомое приближение за O (N3) арифметических операций, а в подпрограмме IA12R1 - за O (N2) операций. Поэтому в случае единичных весовых коэффициентов рекомендуется использовать версию IA12R1.

Пример использования

Unit tia12r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IA12R_p;

function tia12r: String;

implementation

function tia12r: String;
var
N,M,_i :Integer;
T :Array [0..4] of Real;
const
F :Array [0..4] of Real = ( 1.0,0.0,3.0,2.0,5.0 );
P :Array [0..4] of Real = ( 1.0,1.0,1.0,1.0,1.0 );
begin
Result := '';  { результат функции }
N := 5;
M := 1;
IA12R(F,T,P,M,N);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[T[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tia12r',Result);  { вывод результатов в файл tia12r.res }
exit;
end;

end.


Результат:    T  =  (0.5, 0.5, 2.5, 2.5, 5.)