Текст подпрограммы и версий ia12r_c.zip ia12r1_c.zip |
Тексты тестовых примеров tia12r_c.zip tia12r1_c.zip |
Наилучшая равномерная аппроксимация дискретными монотонными функциями.
Для заданной дискретной фунkции 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.
int ia12r_c (real *f, real *t, real *p, integer *m, integer *n)
Параметры
f - | вещественный вектоp длины n заданных значений приближаемой функции; |
t - | вещественный вектоp длины n вычисленных значений приближающей функции; |
p - | вещественный вектоp длины n заданных весовых коэффициентов; |
m - | заданный параметр, определяющий класс приближающих функций (тип: целый); |
m > 0 , | приближение ищется на классе неубывающих функций; |
m < 0 , | приближение ищется на классе невозрастающих функций; |
m = 0 , | приближение полагается равным исходной функции; |
n - | заданное число значений функции F (тип: целый). |
Версии
ia12r1_c - |
наилучшая равномерная аппроксимация с
единичными весовыми коэффициентами дискретными
монотонными функциями. Первый оператор подпрограммы имеет вид: int ia12r1_c(real *f, real *t, integer *m, integer *n) , где параметры f, t, m, n имеют тот же смысл, что и одноименные параметры подпрограммы ia12r_c. |
Вызываемые подпрограммы: нет
Замечания по использованию
При обращении к подпрограмме ia12r1_c параметр p не задается, поскольку предполагается, что pk = 1, k = 1, 2, ..., n. Алгоритм, реализованный в подпрограмме ia12r_c, вычисляет искомое приближение за O (n3) арифметических операций, а в подпрограмме ia12r1_c - за O (n2) операций. Поэтому в случае единичных весовых коэффициентов рекомендуется использовать версию ia12r1_c. |
int main(void) { /* Initialized data */ static float f[5] = { 1.f,0.f,3.f,2.f,5.f }; static float p[5] = { 1.f,1.f,1.f,1.f,1.f }; /* Local variables */ extern int ia12r_c(float *, float *, float *, int *, int *); static int m, n, i; static float t[5]; n = 5; m = 1; ia12r_c(f, t, p, &m, &n); for (i = 1; i <= 5; ++i) { printf("\n %16.7e \n",t[i-1]); } return 0; } /* main */ Результат: t = (0.5, 0.5, 2.5, 2.5, 5.)