Текст подпрограммы и версий zp54r_c.zip zp54d_c.zip |
Тексты тестовых примеров tzp54r_c.zip tzp54d_c.zip |
Вычисление присоединенного полинома Лежандра первого рода.
Подпрограмма - функция zp54r_c вычисляет значение в точке X присоединенного полинома Лежандра первого рода
PLM(X) = (- 1)M (1 - X2)M/2 dM( PL(X) )/dXM ,
где PL (X) = ( 1/( 2L L!) ) dL( (X2 - 1)L )/dXL
является полиномом Лежандра первого рода L - й степени.
Справочник по специальным функциям. Под ред. Абрамовица М. и Стиган И. Изд - во "Наука", 1979.
real zp54r_c (integer *l, integer *m, real *x, integer *ierr)
Параметры
l, m - | заданные значения L и M (тип: целый); |
x - | заданное значение агрумента (тип: вещественный); |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы - функции; при этом: |
ierr=65 - | когда значения l и m не удовлетворяют соотношению 0 ≤ m ≤ l; |
ierr=66 - | когда значение x лежит вне отрезка [- 1, 1]. |
Версии
zp54d_c - | вычисление присоединенного полинома Лежандра первого рода в режиме удвоенной точности; при этом параметр x должен иметь тип double, а функция zp54d_c должна быть описана как double . |
Вызываемые подпрограммы
utzp12_c - utzp13_c | подпрограммы выдачи диагностических сообщений при работе функций zp54r_c и zp54d_c соответственно. |
Замечания по использованию: нет
int main(void) { /* Builtin functions */ double sqrt(double); /* Local variables */ static int ierr; extern float zp54r_c(int *, int *, float *, int *); static float x, r1, r2; x = .5f; r1 = (float)zp54r_c(&c__2, &c__1, &x, &ierr); r2 = (float)sqrt(1 - x * x) * -3 * x; printf("\n %15.6e \n", r1); printf("\n %15.6e \n", r2); printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: r1 = - 1.29904 ierr = 0