Текст подпрограммы и версий
ia12r_c.zip  ia12r1_c.zip 
Тексты тестовых примеров
tia12r_c.zip  tia12r1_c.zip 

Подпрограмма:  ia12r_c

Назначение

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

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

Для заданной дискретной фунkции F = (f1, f2, ..., fN) вычисляется наилучшее pавномеpное приближение T = (t1, t2, ..., tN) на классе дискретных монотонных функций из условия:

         max     pk | fk - tk |   =     min              max     pk | fk - yk |  ,
       1≤K≤N                            YS(M)        1≤K≤N 

где  pk > 0,  K = 1, 2, ..., N - заданные весовые коэффициенты, класс

     S(M) = { YRN : 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.)