Текст подпрограммы и версий qs80r_c.zip qs80d_c.zip |
Тексты тестовых примеров tqs80r_c.zip tqs80d_c.zip |
Вычисление узлов и весов Гаусса - Лежандра.
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