Текст подпрограммы и версий ( Фортран ) qsgcd.zip |
Тексты тестовых примеров ( Фортран ) tqsgcd.zip, tqsgcd1.zip |
Текст подпрограммы и версий ( Паскаль ) qsgce_p.zip |
Тексты тестовых примеров ( Паскаль ) tqsgce_p.zip tqsgce1_p.zip |
Быстрое вычисление узлов и весов квадратурной формулы Гаусса с двойной точностью.
Вычисляются узлы 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