Текст подпрограммы и версий
ia01r_p.zip
Тексты тестовых примеров
tia01r_p.zip

Подпрограмма:  IA01R (модуль IA01R_p)

Назначение

Построение наилучшего среднеквадратического приближения одномерной дискретной функции на множестве кусочно - монотонных функций.

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

Пусть задана дискретная функция  F = (f1, f2, ..., fN). Отыскивается дискретная функция  T = (t1, t2, ..., tN), для которой

       N                                               
       ∑   pk*( tk - fk )2  =   
      k=1                                                                                                                       
                                            N
                             =   inf      ∑    pk*( yk - fk )2  ,
                                YV    k=1 

где P = (p1, p2, ..., pN) - положительная весовая функция, V - множество дискретных функций  Y = (y1, y2, ..., yN) удовлетворяющих условиям кусочной монотонности:

     mk ( yk+1 - yk ) ≥ 0 ,     k = 1, 2, ..., N-1 

с заданными параметрами mk, принимающими значения 1, - 1 или  0 и априорно характеризующими поведение искомой функции.

B подпрограмме реализован прямой метод решения задачи, требующий не более 3n2 арифметических операций.

Самарин M.K. Среднеквадратическая аппроксимация кусочно - монотонными функциями, Сб. "Численный анализ на ФОРТРАНе", вып.15, Изд-во МГУ, 1976.

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

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

Параметры

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

Версии: нет

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

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

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

Для приближения дискретной функции F = (0., 2., - 5., 1., - 1.) при весовых коэффициентах, равных единице, на множестве Y, удовлетворяющих условиям

         yk+1 - yk ≥ 0 ,      k = 1, 2, 3, 4  , 

обращение к подпрограмме имеет вид:

Unit tia01r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IA01R_p;

function tia01r: String;

implementation

function tia01r: String;
var
N,_i :Integer;
T :Array [0..4] of Real;
const
F :Array [0..4] of Real = ( 0.0,2.0,-5.0,1.0,-1.0 );
P :Array [0..4] of Real = ( 1.0,1.0,1.0,1.0,1.0 );
M :Array [0..4] of Integer = ( 1,1,1,1,0 );
begin
Result := '';  { результат функции }
N := 5;
IA01R(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('tia01r',Result);  { вывод результатов в файл tia01r.res }
exit;
end;

end.


Результат:

       T  =  (-1., -1., -1., 0., 0.)