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

Подпрограмма:  IA03R (модуль IA03R_p)

Назначение

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

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

Для заданной дискретной функции  F = ( f 1, f 2, ..., f N ) вычисляется наилучшее среднеквадратическое приближение  T = ( t 1, t 2, ..., t N ) на классе дискретных функций, имеющих один экстремум. Приближение  T вычисляется из условия:

    N
    ∑   p K ( f K - t K )2  =
   K=1
                                                                                 N
                        =         min                 min                ∑        pK ( f K  - y K )2 ,
                             K1 ≤ L ≤ K2      YS( M, L )        K=1 

где  K1, K2 - предполагаемые границы расположения искомого экстремума,  p K > 0,  K = 1, 2, ..., N - заданные весовые коэффициенты, класс

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

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

М.К.Самарин. Приближение сеточных функций функциями с заданным числом внутренних экстремумов, Сб. "Численный анализ на ФОРТРАНе", вып. 7, 1974, 101 - 110.

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

procedure IA03R(var F :Array of Real; var T :Array of Real;
                var P :Array of Real; M :Integer; N :Integer;
                K1 :Integer; K2 :Integer; var IERR :Integer);

Параметры

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

Версии: нет

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

IA02R - наилучшая среднеквадратическая аппроксимация дискретными монотонными функциями;
UTIA10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы IA03R.

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

  Алгоритм вычисляет искомое приближение за  o ( ( K2 - K1 ) N 2 ) арифметических операций, поэтому в целях сокращения времени счета рекомендуется более точно указывать границы  K1 и  K2, между которыми заключен экстремум искомой функции.

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

Unit tia03r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IA03R_p;

function tia03r: String;

implementation

function tia03r: String;
var
N,M,K1,K2,_i,I :Integer;
T :Array [0..4] of Real;
const
P :Array [0..4] of Real = ( 1.0,1.0,1.0,1.0,1.0 );
F :Array [0..4] of Real = ( 1.0,3.0,-1.0,9.0,4.0 );
begin
Result := '';  { результат функции }
N := 5;
M := 1;
K1 := 1;
K2 := N;
IA03R(F,T,P,M,N,K1,K2,I);
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;
Result := Result + Format('%5d ',[I]) + #$0D#$0A;
UtRes('tia03r',Result);  { вывод результатов в файл tia03r.res }
exit;
end;

end.


Результаты:  IERR = 0 ;    T = (1., 1., 1., 9., 4.)