Текст подпрограммы и версий
iah4r_c.zip , iah4d_c.zip
Тексты тестовых примеров
tiah4r_c.zip , tiah4d_c.zip

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

Назначение

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

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

Пусть на отрезке [A, B] задана функция  f (x). Тогда подпрограмма iah4r_c вычисляет коэффициенты  cj (j = 1, 2, ..., N) по формуле

                N
cj = 2/N  ∑  f ( (B-A)/2  cos (π (k-1/2) / N) + (B+A)/2 )  cos (π (j-1) (k-1/2) / N)
               k=1 

в разложении функции  f (x) в ряд по многочленам Чебышева:

                              N
              f(x)  ≈  [  ∑   cj Tj-1(y) ]  -  c1 / 2 ,
                             j=1
 где    y  ≡  ( x - (B + A) / 2 ) / ( (B - A) / 2 ) . 

По вычисленным коэффициентам  cj затем вычисляются коэффициенты CINTj разложения интеграла от функции  f (x) в ряд по многочленам Чебышева:

                                                      N
                  F(x)  =  ∫  f (t) dt  ≈  [  ∑   CINTj Tj-1 (y) ] - CINT1 / 2
                                                     j=1

по формулам

                   CINTj  =  [ (cj-1  -  cj+1) / (2(j-1)) ] * (B-A)/2  ,     j = 2, 3,..., N-1
                                       
                               CINTN  =  cN-1 / (2(N-1)) * (B-A)/2 

Постоянной интегрирования соответствует коэффициент CINT1 , значение которого выбирается в подпрограмме таким образом, чтобы значение F (A) было равно нулю.

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

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

    int iah4r_c (real *a, real *b, real *c, integer *n,
            real *func, real *cint, real *rf)

Параметры

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

Версии

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

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

       iah1r_c -
       iah1d_c  
вычисление коэффициентов ряда по многочленам Чебышева, аппроксимирующего заданную функцию, в режиме одинарной и удвоенной точности; используются в подпрограммах iah4r_c и iah4d_c соответственно.

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

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

int main(void)
{
    /* Local variables */
    extern float func_c();
    static float cint[10];
    extern int iah4r_c(float *, float *, float *, int *, R_fp, float *,
                       float *);
    static float a, b, c__[10];
    static int n, i;
    static float rf[10];

    n = 10;
    a = 0.f;
    b = 1.f;
    iah4r_c(&a, &b, c__, &n, (R_fp)func_c, cint, rf);

    for (i = 1; i <= 10; ++i) {
        printf("\n %16.7e ",c__[i-1]);
    }
    printf("\n ");
    for (i = 1; i <= 10; ++i) {
        printf("\n %16.7e ",cint[i-1]);
    }
    printf("\n ");
    return 0;
} /* main */

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

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

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


Результаты:

       cint = ( 0.899853,          0.425221,          -0.293447e-01,
                     -0.449977e-02,   0.154123e-03,
                       0.141370e-04, -0.321255e-06,  -0.218021e-07,
                       0.540888e-09,   0.172063e-08 )