Текст подпрограммы и версий ( Фортран )
qsgcd.zip
Тексты тестовых примеров ( Фортран )
tqsgcd.zip, tqsgcd1.zip
Текст подпрограммы и версий ( Паскаль )
qsgce_p.zip 
Тексты тестовых примеров ( Паскаль )
tqsgce_p.zip  tqsgce1_p.zip 

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

Назначение

Быстрое вычисление узлов и весов квадратурной формулы Гаусса с двойной точностью.

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

Вычисляются узлы X ( k ) и веса C ( k ), k = 1, 2, ..., N квадратуры Гаусса на отрезке [- 1, 1] при любом N (2 ≤ N < ∞) за O ( N ) операций с двойной точностью.

Л.Г. Васильева, Я.М. Жилейкин, О быстром вычислении узлов и весов квадратуры Гаусса, ЖВМ и МФ, 2003.

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

    SUBROUTINE  QSGCD( N, N1, X, C )

Параметры

N - число узлов квадратуры Гаусса (тип: целый);
N1 - N1 = N / 2, если N - четное,
N1 = ( N + 1) / 2, если N - нечетное, (тип: целый);
X - вектор длины N1 для вычисленных узлов квадратуры Гаусса (тип: вещественный);
C - вектор длины N1 для вычисленных весов квадратуры Гаусса (тип: вещественный).

Версии: нет

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

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

  1. 

Требуется, чтобы N ≥ 2.

  2. 

Узлы квадратур Гаусса располагаются симметрично на отрезке [- 1, 1] относительно начала координат: X ( k ) = - X ( N - k + 1), а веса в симметричных точках равны C ( k ) = C ( N - k + 1), k = 1, 2, ..., N1. Поэтому подпрограмма QSGCD вычисляет N1 узлов и весов Гаусса только для отрезка [0, 1].

  3. 

Узлы и веса X ( k ) и C ( k ) вычисляются с точностью 10- 13.

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

  1. DIMENSION  X(3), C(3)
      INTEGER  N, N1
      DOUBLE PRECISION  X, C
      N = 5
      N1 = 3
      CALL  QSGCD(5, 3, X, C )      

Результаты:

     X(1) = .906179845938664          C(1) = .236926885056189
     X(2) = .538469310105683          C(2) = .478628670499366
     X(3) = .000000000000000          C(3) = .568888888888889

  2. DIMENSION  X(256), C(256)
      INTEGER  N, N1
      DOUBLE PRECISION  X, C
      N = 512
      N1 = 256
      CALL  QSGCD( N, N1, X, C )
 
Результаты:

     X(1) = .999988990984382          C(1) = .000028252637374
     X(2) = .999941994606846          C(2) = .000065765731660
     ......................................................................................................

     X(255) = .009194771386433        C(255) = .006129674838036
     X(256) = .003064962185159        C(256) = .006129905175406