Текст подпрограммы и версий
zp60r_c.zip  zp60d_c.zip 
Тексты тестовых примеров
tzp60r_c.zip  tzp60d_c.zip 

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

Назначение

Вычисление значений полиномов Чебышева от последовательности значений аргументов.

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

Пусть задана последовательность значений 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   |