| Текст подпрограммы и версий zp60r_c.zip zp60d_c.zip | Тексты тестовых примеров tzp60r_c.zip tzp60d_c.zip | 
Вычисление значений полиномов Чебышева от последовательности значений аргументов.
Пусть задана последовательность значений X = (x1, x2,..., xM). Подпрограмма zp60r_c вычисляет значения полиномов Чебышева Tk ( xi ), k = 0, 1,..., N, которые размещаются в двумерном массиве T размеров N + 1 на M следующим образом:
                            |   T0( x1 ),  T0( x2 ),  ...  ,  T0( xM )    |
                            |   T1( x1 ),  T1( x2 ),  ...  ,  T1( xM )    |
                  T   =     . . . . . . . . . . . . . .                                                   (1)
                            |   TN( x1 ),  TN( x2 ), ... ,  TN( xM )  |
Вычисления выполняются по рекуррентному соотношению
Tk( xi ) = 2 xi Tk-1( xi ) - Tk-2( xi ), k = 2, 3,..., N
Бахвалов Н.С. Численные методы. М.: Наука, 1977.
    int zp60r_c (real *x, integer *m, integer *n, integer *n1,
            real *t)
Параметры
| x - | вещественный одномерный массив, длины m, содержащий заданные значения аргументов; | 
| m - | длина массива x (тип: целый); | 
| n - | заданное максимальное значение степеней полиномов Чебышева, значения которых необходимо вычислить на заданной сетке x (тип: целый); | 
| n1 - | заданное значение, равное n+1 (тип: целый); | 
| t - | вещественный двумерный массив размеров n1 на m, в котором размещаются вычисленные значения полиномов Чебышева в виде (1). | 
Версии
| zp60d_c - | вычисление значений полиномов Чебышева от последовательности значений аргументов в режиме удвоенной точности; при этом параметры x и t должны иметь тип double . | 
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
    /* Initialized data */
    static float x[6] = { 0.f,1.f,2.f,3.f,4.f,5.f };
    /* Local variables */
    extern int zp60r_c(float *, int *, int *, int *, float *);
    static int i__, m, n;
    static float t[30] /* was [5][6] */;
    static int n1;
#define t_ref(a_1,a_2) t[(a_2)*5 + a_1 - 6]
    m = 6;
    n = 4;
    n1 = 5;
    zp60r_c(x, &m, &n, &n1, t);
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n% 16.7e %16.7e %16.7e \n %16.7e %16.7e %16.7e \n",
                t_ref(i__, 1), t_ref(i__, 2), t_ref(i__, 3),
                t_ref(i__, 4), t_ref(i__, 5), t_ref(i__, 6));
    }
    return 0;
} /* main */
Результаты: 
                     |    1    1     1       1       1        1    |
                     |    0    1     2       3       4        5    |
       t_ref  =     |  -1    1     7    17      31      49    |
                     |    0    1   26    99   244      485   |
                     |    1    1   97  577  1921   4801   |