|
Текст подпрограммы и версий ia02r_c.zip |
Тексты тестовых примеров tia02r_c.zip |
Наилучшая среднеквадратическая аппроксимация дискретными монотонными функциями.
Для заданной дискретной фунkции F = (f1, f2, ..., fN) вычисляется наилучшее среднеквадратическое приближение T = (t1, t2, ..., tN) на классе дискретных монотонных функций из условия:
N
∑ pK*(fK - tK )2 =
K=1
N
= min ∑ pK*( fK - yK )2 ,
Y∈S(M) K=1
где 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.
М.К.Самарин, Приближение сеточных функций функциями с заданным числом внутренних экстремумов, Сб. "Численный анализ на ФОРТРАНе", вып.7, 1974, 101-110.
int ia02r_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 (тип: целый). |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Initialized data */
static float p[5] = { 1.f,1.f,1.f,1.f,1.f };
static float f[5] = { 2.f,1.f,0.f,2.f,3.f };
/* Local variables */
extern int ia02r_c(float *, float *, float *, int *, int *);
static int m, n, i;
static float t[5];
n = 5;
m = 1;
ia02r_c(f, t, p, &m, &n);
for (i = 1; i <= 5; ++i) {
printf("\n %16.7e \n",t[i-1]);
}
return 0;
} /* main */
Результаты:
t = (1., 1., 1., 2., 3.)