|
Текст подпрограммы и версий 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