|
Текст подпрограммы и версий ia03r_c.zip |
Тексты тестовых примеров tia03r_c.zip |
Наилучшая среднеквадратическая аппроксимация дискретными унимодальными функциями.
Для заданной дискретной фyнkции 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.
int ia03r_c (real *f, real *t, real *p, integer *m, integer *n,
integer *k1, integer *k2, integer *ierr)
Параметры
| 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_c - | наилучшая среднеквадратическая аппроксимация дискретными монотонными функциями; |
| utia10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ia03r_c. |
Замечания по использованию
| Алгоритм вычисляет искомое приближение за o ( ( k2 - k1 ) n 2 ) арифметических операций, поэтому в целях сокращения времени счета рекомендуется более точно указывать границы k1 и k2, между которыми заключен экстремум искомой функции. |
int main(void)
{
/* Initialized data */
static float p[5] = { 1.f,1.f,1.f,1.f,1.f };
static float f[5] = { 1.f,3.f,-1.f,9.f,4.f };
/* Local variables */
extern int ia03r_c(float *, float *, float *, int *,
int *, int *, int *, int *);
static int i__, m, n, i;
static float t[5];
static int k1, k2;
n = 5;
m = 1;
k1 = 1;
k2 = n;
ia03r_c(f, t, p, &m, &n, &k1, &k2, &i__);
for (i = 1; i <= 5; ++i) {
printf("\n %16.7e \n",t[i-1]);
}
printf("\n %5i \n",i__);
return 0;
} /* main */
Результаты: ierr = 0 ; t = (1., 1., 1., 9., 4.)