Текст подпрограммы и версий
qs80r_c.zip  qs80d_c.zip 
Тексты тестовых примеров
tqs80r_c.zip  tqs80d_c.zip 

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

Назначение

Вычисление узлов и весов Гаусса - Лежандра.

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

qs80r_c вычисляет по методу Ньютона корни X1,X2, ..., Хn полинома Лежандра

     Ln(x) = 1/(2nn)  dn(x2-1)n / dxn 

и соответствующие им весовые множители C1, C2, ... ,Cn для квадратурной формулы Гаусса

        1
       ∫  f(x) dx  ≈ ( c1f(x1) + c2f(x2) + ... + cnf(xn) ) .
     -1 

Для  n допускаются значения 2 ≤ n ≤ 128.

Я.М.Жилейкин, А.Г.Симакин. Набор стандартных программ приближенного вычисления многократных интегралов с помощью метода Гаусса. Сб. "Численный анализ на ФОРТРАНе", вып. 19, Изд-во МГУ, 1977.

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

    int qs80r_c (integer *n, real *x, real *c)

Параметры

n - заданное число узлов и весов Гаусса - Лежандра (тип: целый);
x - вещественный вектоp длины entier ( (n + 1)/2 ), содержащий вычисленные значения узлов;
c - вещественный вектоp длины entier ( (n + 1)/2 ), содержащий вычисленные значения весов.

Версии

qs80d_c -   вычисление с удвоенной точностью узлов и весов Гаусса - Лежандра.

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

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

 

Tак как корни полиномов Лежандра L (x) симметричны относительно нуля, а веса, соответствующие симметричным корням, равны, то в вектоp x засылаются только неотрицательные корни в порядке их убывания, а в вектоp c - соответствующие им веса.

В подпрограмме qs80d_c параметры x, c имеют тип double.

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

int main(void)
{
    /* Local variables */
    extern int qs80r_c(int *, float *, float *);
    static float c__[3];
    static int n;
    static float x[3];

    n = 5;
    qs80r_c(&n, x, c__);

    printf("\n %16.7e %16.7e %16.7e \n",x[0],x[1],x[2]);
    printf("\n %16.7e %16.7e %16.7e \n",c__[0],c__[1],c__[2]);
    return 0;
} /* main */


Результаты:

      x (1)  =  0.9061798459
      x (2)  =  0.5384693101
      x (3)  =  0.0000000000

      c__ (1)  =  0.2369268850
      c__ (2)  =  0.4786286705
      c__ (3)  =  0.5888888888