|
Текст подпрограммы и версий ia03r_p.zip |
Тексты тестовых примеров tia03r_p.zip |
Наилучшая среднеквадратическая аппроксимация дискретными унимодальными функциями.
Для заданной дискретной функции 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 Y∈S( 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.)