Текст подпрограммы и версий
qsazc_p.zip  qsazz_p.zip 
Тексты тестовых примеров
tqsazc_p.zip  tqsazz_p.zip 

Подпрограмма:  QSAZC (модуль QSAZC_p)

Назначение

Вычисление криволинейного интеграла от комплекснозначной функции.

Математическое описание

Подпрограмма QSAZC вычисляет криволинейный интеграл от комплекснозначной функции  f (z) ,  z = z (t)  по участку кривой Г, для которого a ≤ t ≤ b. Вычисленное значение интеграла полагается равным конечной сумме Римана - Стилтьеса

            n 
           ∑   f ( zk )  ( zi  -  zi-1 )     ,
           i=1 

где  n - число подынтервалов, на которые должен быть разбит исходный отрезок [ a, b ],
а  zk ( zi - 1, zi ) .

Лаврентьев М.А., Шабат Б.В. Методы теории функций комплексного переменного. М.: Физматгиз, 1965.

Использование

procedure QSAZC(A :Real; B :Real; F :Proc_F2A; G :Proc_F2_A; N :Integer;
                var RINT1 :Real; var RINT2 :Real);

Параметры

A, B - заданные границы отрезка изменения параметра  t  (тип: вещественный);
F - имя подпрограммы вычисления значения  f (z) в текущей точке  z (t) кривой Г; заголовок подпрограммы F имеет вид:

procedure F (Z :Array of Real; var FZ :Array of Real);

где Z - вещественный одномерный массив длины 2, в первой компоненте которого задается вещественная часть аргумента  z (t), а во второй - мнимая часть аргумента  z (t);
FZ - вещественный одномерный массив длины 2, в первой компоненте которого должна быть помещена вещественная часть  f ( z (t) ), а во второй компоненте - мнимая часть  f ( z (t) );
G - имя подпрограммы вычисления значения текущей точки  z (t)  кривой Г; заголовок подпрограммы G имеет вид:

procedure G (T :Real; var ZT :Array of Real);

где T - значение параметра  t , определяющее положение текущей точки  z (t) на кривой Г;
ZT - вещественный одномерный массив длины 2, в первой компоненте которого должна быть помещена вещественная часть вычисленного значения  z (t), а во второй компоненте - мнимая часть вычисленного значения  z (t);
N - заданное число подынтервалов, на которые должен быть разбит исходный отрезок [ a, b ] (тип: целый);
        RINT1 -
        RINT2  
вещественные переменные, содержащие на выходе соответственно вещественную и мнимую части вычисленного значения интеграла.

Версии

QSAZZ - вычисление криволинейного интеграла от комплекснозначной функции в режиме расширенной (Extended) точности; при этом параметры A, B, RINT1 и RINT2, а также Z, FZ, T и ZT должны иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

Пусть требуется вычислить интеграл

          ∫    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) 

Unit TQSAZC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSAZC_p, FGQSAZC_p, QSAZC_p;

function TQSAZC: String;

implementation

function TQSAZC: String;
var
N :Integer;
A,B,RINT1,RINT2 :Real;
begin
Result := '';  { результат функции }
A := 0.0;
B := 3.14159265;
N := 250;
QSAZC(A,B,FQSAZC,FGQSAZC,N,RINT1,RINT2);
Result := Result + Format('%16.7f %16.7f ',[RINT1,RINT2]) + #$0D#$0A;
end;

end.
 
Unit FQSAZC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

procedure FQSAZC( Z :Array of Real; var FZ :Array of Real);

implementation

procedure FQSAZC( Z :Array of Real; var FZ :Array of Real);
begin
FZ[0] := 1-2*IntPower(Z[1],2);
FZ[1] := 2*Z[0]*Z[1];
end;

end.

Unit FGQSAZC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

procedure FGQSAZC(T :Real; var ZT :Array of Real);

implementation

procedure FGQSAZC(T :Real; var ZT :Array of Real);
begin
ZT[0] := Cos(T);
ZT[1] := Sin(T);
end;

end.

Результаты:      RINT1   =   -0.6667545    ,       RINT2   =   0.0