Текст подпрограммы и версий
iah3r_c.zip , iah3d_c.zip
Тексты тестовых примеров
tiah3r_c.zip , tiah3d_c.zip

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

Назначение

Вычисление значения функции в заданной точке отрезка по известным коэффициентам ее разложения в ряд по многочленам Чебышева на этом отрезке.

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

Пусть известны коэффициенты  cj разложения функции  f (x) в ряд по многочленам Чебышева на отрезке [A, B]. Тогда подпрограмма iah3r_c вычисляет значение этого разложения в точке  x = X  [A, B]:

                                N
              f (X)  ≈  [   ∑   cjTj -1(Y) ] - c1/ 2 ,
                               j =1
 где    Y  ≡  ( X - (B + A)/2 ) / ( (B - A)/2 ) . 

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

Использование

    int iah3r_c (real *a, real *b, real *c, integer *n, real *x,
            real *res)

Параметры

a, b - нижняя и верхняя границы отрезка, на котором задано разложение функции  f (x) в ряд по многочленам Чебышева (тип: вещественный);
c - вещественный вектор длины n, содержащий известные значения коэффициентов разложения функции  f (x) в ряд по многочленам Чебышева;
n - заданное количество членов ряда (тип: целый);
x - заданная точка отрезка [a, b], в которой вычисляется значение разложения функции  f (x) в ряд по многочленам Чебышева (тип: вещественный);
res - вещественная переменная, значение которой полагается равным вычисленному значению разложения функции  f (x) в ряд по многочленам Чебышева в точке x.

Версии

iah3d_c - вычисление значения функции в заданной точке отрезка по известным коэффициентам ее разложения в ряд по многочленам Чебышева на этом отрезке в режиме удвоенной точности; при этом параметры a, b, c, x и res должны иметь тип double.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Builtin functions */
    double sin(double);

    /* Local variables */
    extern float func_c();
    extern int iah1r_c(float *, float *, float *, int *, R_fp, float *),
               iah3r_c(float *, float *, float *, int *, float *, float *);
    static float a, b, c__[10];
    static int n, i;
    static float x, rf[10], res, res1;

    n = 10;
    a = 0.f;
    b = 1.f;
    x = .5f;
    iah1r_c(&a, &b, c__, &n, (R_fp)func_c, rf);

    for (i = 1; i <= 10; ++i) {
        printf("\n %16.7e ",c__[i-1]);
    }
    iah3r_c(&a, &b, c__, &n, &x, &res);
    res1 = (float)sin(x);

    printf("\n\n %16.7e %16.7e \n",res, res1);
    return 0;
} /* main */

float func_c(float *x)
{
    /* System generated locals */
    float ret_val;

    /* Builtin functions */
    double sin(double);

    ret_val = (float)sin(*x);
    return ret_val;
} /* func_c */


Результат:     res = 0.479426