Текст подпрограммы и версий ia12r_p.zip ia12r1_p.zip |
Тексты тестовых примеров tia12r_p.zip tia12r1_p.zip |
Наилучшая равномерная аппроксимация дискретными монотонными функциями.
Для заданной дискретной функции F = (f1, f2, ..., fN) вычисляется наилучшее pавномеpное приближение T = (t1, t2, ..., tN) на классе дискретных монотонных функций из условия:
max pk | fk - tk | = min max pk | fk - yk | ,
1≤K≤N Y∈S(M) 1≤K≤N
где pk > 0, K = 1, 2, ..., N - заданные весовые коэффициенты, класс
S(M) = { Y∈RN : 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.)