|
Текст подпрограммы и версий qsazc_c.zip qsazp_c.zip |
Тексты тестовых примеров tqsazc_c.zip tqsazp_c.zip |
Вычисление криволинейного интеграла от комплекснозначной функции
Подпрограмма qsazc_c вычисляет криволинейный интеграл от комплекснозначной функции f (z) , z = z (t) по участку кривой Г, для которого a ≤ t ≤ b. Вычисленное значение интеграла полагается равным конечной сумме Римана - Стилтьеса.
n
∑ f ( zk ) ( zi - zi-1 ) ,
i=1
где n - число подынтервалов, на которые должен быть разбит
исходный отрезок [ a, b ],
а zk∈ ( zi - 1, zi )
Лаврентьев М.А., Шабат Б.В. Методы теории функций комплексного переменного. М.: Физматгиз, 1965.
int qsazc_c (real *a, real *b, S_fp f, S_fp g, integer *n,
real *rint1, real *rint2)
Параметры
| a, b - | заданные границы отрезка изменения параметра t (тип: вещественный); |
| f - |
имя подпрограммы вычисления значения f (z) в текущей
точке z (t) кривой Г; заголовок подпрограммы f имеет вид:
int f(float *z, float *fz), |
| где z - | вещественный одномерный массив длины 2, в первой компоненте которого задается вещественная часть аргумента z (t), а во второй - мнимая часть аргумента z (t); |
| fz - | вещественный одномерный массив длины 2, в первой компоненте которого должна быть помещена вещественная часть f ( z (t) ), а во второй компоненте - мнимая часть f ( z (t) ) |
| g - |
имя подпрограммы вычисления значения текущей точки
z (t) кривой Г; заголовок подпрограммы g имеет вид:
int g(float *t, float *zt), |
| где t - | значение параметра t , определяющее положение текущей точки z (t) на кривой Г; |
| zt - | вещественный одномерный массив длины 2, в первой компоненте которого должна быть помещена вещественная часть вычисленного значения z (t), а во второй компоненте - мнимая часть вычисленного значения z (t). |
| n - | заданное число подынтервалов, на которые должен быть разбит исходный отрезок [ a, b ] (тип: целый); |
|
rint1 - rint2 | вещественные переменные, содержащие на выходе соответственно вещественную и мнимую части вычисленного значения интеграла. |
Версии
| qsazp_c - | вычисление криволинейного интеграла от комплекснозначной функции в режиме удвоенной точности; при этом параметры a, b, rint1 и rint2, а также z, fz, t и zt должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Пусть требуется вычислить интеграл
∫ z 2 dz = - 2/3 ,
где z = z (1) + i z (2), по полуокружности | z | = 1, 0 ≤ arg (z) ≤ π с началом пути в точке z = 1 . Данная полуокружность (участок кривой Г) описывается уравнениями:
z(1) = cos t
z(2) = sin t ,
где
a ≤ t ≤ b,
a = 0, b = π .
Выражения для fz(1) и fz(2) следуют из соотношений:
z2 = ( z(1) + i z(2) )2 = z(1)2 - z(2)2 + 2 i z(1) z(2) =
= cos2 t - sin2 t + 2 i cos t sin t = 1 - 2 sin2 t + 2 i cos t sin t =
= 1 - 2 z(2)2 + 2 i z(1) z(2) .
Отсюда следует, что
fz(1) = 1 - 2 z(2)2 ; fz(2) = 2 z(1) z(2)
int main(void)
{
/* Local variables */
static float rint1, rint2, a, b;
extern int f_c(), g_c();
static int n;
extern int qsazc_c(float *, float *, U_fp, U_fp, int *, float *, float *);
a = 0.f;
b = 3.14159265f;
n = 250;
qsazc_c(&a, &b, (U_fp)f_c, (U_fp)g_c, &n, &rint1, &rint2);
printf("\n %16.7e %16.7e \n", rint1, rint2);
return 0;
} /* main */
int f_c(float *z__, float *fz)
{
/* System generated locals */
float r__1;
/* Parameter adjustments */
--fz;
--z__;
/* Function Body */
/* Computing 2nd power */
r__1 = z__[2];
fz[1] = 1 - r__1 * r__1 * 2;
fz[2] = z__[1] * 2 * z__[2];
return 0;
} /* f_c */
int g_c(float *t, float *zt)
{
/* Builtin functions */
double cos(double), sin(double);
/* Parameter adjustments */
--zt;
/* Function Body */
zt[1] = (float)cos(*t);
zt[2] = (float)sin(*t);
return 0;
} /* g_c */
Результаты: rint1 = -0.6667545 , rint2 = -0.1329556e-4