Текст подпрограммы и версий qsazc_p.zip qsazz_p.zip |
Тексты тестовых примеров tqsazc_p.zip tqsazz_p.zip |
Вычисление криволинейного интеграла от комплекснозначной функции.
Подпрограмма 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