Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Численные методы решения некорректных задач

..pdf
Скачиваний:
6
Добавлен:
20.11.2023
Размер:
12.47 Mб
Скачать

0 0 5 2

0 0 5 3

0 0 5 4

0 0 5 5

0 0 5 6

0 0 5 7

0 0 5 8

0 0 5 9

0 0 6 0

0061

0 0 6 2

0 0 6 3

006 4

0 0 6 5

0 0 6 6

0 0 6 7

0 0 6 8

0 0 6 9

0 0 7 0

0071

0 0 7 2

0 0 7 3

0 0 7 4

0 0 7 5

0 0 7 6

007 7

0 0 7 8

0 0 7 9

0 0 8 0

0081

0 0 8 2

0 0 8 3

0 084

0 0 8 5

0 0 8 6

008 7

0 088

0 0 8 9

0 0 9 0

С * БЛОК ВЫЧИСЛЕНИЯ НЕВЯЗОК F 1 = 0 .0

F 2= 0•0

F 3= 0•0

00 4 М=1, N

U2—URE(М)* *2+UIМ( М)* *2 A2=ARE<M)#*2+AIM<M)**2

X=*i.0+W(M)

I F (A 2 .E Q .0 .0 ) 60 ТО 41 BA=X/(A2+ALP*X)

АВ=1. 0-ALP*8A C1=HA*U2*( BA*ALP) **2 C2=HA*U2*AB*BA

C3=2.0*C1*AB F1=F1+C1 F2=F2+C2 F3«F3+C3

GO TO 4

41 F1=F1+HA*U2

4CONTINUE

С* ВЫЧИСЛЕНИЕ НЕВЯЗКИ -BETA,

С * НОРМЫ РЕШЕНИЯ 8 W21 -ZNOR,

С* ОБОБЩЕННОЙ НЕВЯЗКИ - RO

С* И ЕЕ ПРОИЗВОДНОЙDR BETA^Fl

ZN0R=0SQRT(F2)

R0=BETA-( DEL+HH*ZNQR) **2

IF ( ALP•EQ. 0 . 0 ) GO TO 68

DR=-F3*ALP-( DEL+HH* ZNOR) *HH*F3/ZNOR

С* ПЕРЕХОД К ВЫЧИСЛЕНИЮ РЕШЕНИЯ,

С* ЕСЛИ ТОЧНОСТЬ ДОСТИГНУТА

IF ( DABS( R0)« LT•EPRO) GO ТО 10

С* ПЕРЕХОД НА МЕТОД ХОРД,

С* ЕСЛИ ОБОБЩЕННАЯ НЕВЯЗКА НЕ ВЫПУКЛА

I F ( RO. LT. 0 . 0 ) GO ТО 61

С* ВЫЧИСЛЕНИЕ НОВОГО АРГУМЕНТА

С* ПО МЕТОДУ НЬЮТОНА

С* И ПЕРЕХОД К СЛЕДУЮЩЕМУ ШАГУ DQ=-RO/DR

A1=ALP

R1=R0

ALP=1. 0 / ( 1 . 0/ALP+DQ)

IF(IQ.GE.IMAX) GO TO 66

GO TO 3

С* МЕТОД ХОРД 61 CONTINUE

С* ИЗМЕНЕНИЕ ИНТЕРВАЛА ПРИ RO<0

6

CONTINUE

 

 

A0=ALP

 

7

R0=RO

 

CONTINUE

 

 

IGNIQ+i

 

С * ВЫЧИСЛЕНИЕ НОВОГО АРГУМЕНТА

 

С * ПО МЕТОДУ ХОРД

 

 

ALP«A0*A1* ( R 0-R 1) / ( A0*R0-A1*Ri >

 

С * ВЫЧИСЛЕНИЕ НЕВЯЗОК

181

0091

0 0 9 2

0 0 9 3

0 0 9 4

0 0 9 5

0 0 9 6

0 0 9 7

0 0 9 8

0 0 9 9

0100

0101

0102

0 1 0 3

0 1 0 4

0 1 0 5

0106

0 1 0 7

0 1 0 8

0 1 0 9

0110

0111

0112

0 1 1 3

0 1 1 4

0 1 1 5

0 1 1 6

0 1 1 7

0 1 1 8

0 1 1 9

0120

0121

0122

0 1 2 3

0 1 2 4

0 1 2 5

0 1 2 6

0 1 2 7

0 1 2 8

0 1 2 9

0 1 3 0

0131

0 1 3 2

0 1 3 3

8CONTINUE F i= 0 . 0

F 2 = 0 .0

DO 9 M=1,N U2=URE(M)##2+UIM(M)#*2 A2=ARE(M)**2+AIM(M)*#2

 

X=1.0+W(M)

 

I F ( A2. EQ. 0 . 0 ) GO TO 91

 

BA=X/(A2+ALP*X)

 

AB=1.0—ALP*BA

 

Cl=HA*U2*( BA#ALP) **2

 

C2=HA*U2*AB*BA

 

F1=F1+C1

 

F2=F2+C2

91

GO TO 9

F1=F1+HA*U2

9

CONTINUE

С* ВЫЧИСЛЕНИЕ НЕВЯЗКИ,

С* ОБОБЩЕННОЙ НЕВЯЗКИ И НОРМЫ РЕШЕНИЯ

BETA=F1

ZNOR=DSQRT( F 2 )

RO=BETA—( DEL+HH* ZNOR)* *2

IF ( ALP. EQ. 0 . 0 ) GO TO 68

С* ПЕРЕХОД К ВЫЧИСЛЕНИЮ РЕШЕНИЯ,

С* КОГДА ТОЧНОСТЬ ДОСТИГНУТА

IF ( DABS(RO).LT.EPRO) GO ТО 11

IF СIQ.EQ.IMAX)

GO

ТО 67

IF ( RO .LT . 0 . 0 )

GO

TO

6

С * ИЗМЕНЕНИЕ ИНТНРВАЛА,

КОГДА RO>0

A1=ALP

 

 

 

Rl=RO

 

 

 

GO TO 7

 

 

 

65CONTINUE

С# HE УДАЛОСЬ ПОДОБРАТЬ ALP, ТАК

С* ЧТО RO(ALP) БОЛЬШЕ НУЛЯ IERR=65

GO ТО 999

66CONTINUE

С* СДЕЛАНО IMAX ИТЕРАЦИЙ МЕТОДОМ НЬЮТОНА! IERR=66

GO ТО 999

67CONTINUE

С* СДЕЛАНО IMAX ИТЕРАЦИЙ,

С* ПРИМЕНЯЛСЯ МЕТОД ХОРД

IERR=67

GO ТО 999

68CONTINUE

С* ЗАДАНО ИЛИ ПОЛУЧИЛОСЬ ALP=0.0 IERR=68

GO ТО 999

11CONTINUE

С* РЕШЕНИЕ НАЙДЕНО МЕТОДОМ ХОРД

IERR=1

GO ТО 999

10CONTINUE

С* НОРМАЛЬНОЕ ОКОНЧАНИЕ

182

0 134

013 5

0 136

013 7

0 1 3 8

0139

0 140

0141

0 1 4 2

0 1 4 3

0144

014 5

0146

0 1 4 7

0 1 4 8

0 1 4 9

0 1 5 0

0001

0002

0 0 0 3

0004

0 0 0 5

0 0 0 6

0 0 0 7

0 0 0 8

0 0 0 9

0010

0011

0012

0 0 1 3

0 0 1 4

0 0 1 5

0 0 1 6

IERR=0

999CONTINUE

С* ВЫЧИСЛЕНИЕ ФУРЬЕ—ПРЕОБРАЗОВАНИЯ РЕШЕНИЯ S S I = - 1 . 0

DO 12 M=i ,N SSI= -SSI

ZZ=N*(ARE(M)**2+AIM(M)**2+ +ALP*(l-0+W (M )))

IF ( Z Z . NE. 0 . 0 ) GO TO 111 ZRE(M)=0.0

ZIM(M)=0.0 GO TO 12

111 ZRE(M)=SSI*(ARE(M)*URE(M)+ +AIM(M)*UIM(M))/ZZ

ZIM(M)=SSI*(ARE(M)*UIM(M)- -AIM(M)*URE(M))/ZZ

12CONTINUE

С* ОБРАТНОЕ ФУРЬЕ-ПРЕОБРАЗОВАНИЕ РЕШЕНИЯ P = -1 .0

CALL FTF1C( Z R E ,Z IM ,N ,1,1,P ) RETURN

END

SUBROUTINE FTF1C( ARE, AIM, N , IN ,K ,P)

IMPLICIT REAL*8(A-H,0-Z)

С* ПРОГРАММА БЫСТРОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ

С* ФУНКЦИИ, ДЕЙСТВИТЕЛЬНАЯ ЧАСТЬ КОТОРОЙ

С * НАХОДИТСЯ В ARE(N) , А МНИМАЯ - В AIM(N).

С* ПРОИЗВОДИТСЯ ПРЯМОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ,

С* ЕСЛИ Р БОЛЬШЕ НУЛЯ

С# И ОБРАТНОЕ ПРЕОБРАЗОВАНИЕ,

С* ЕСЛИ Р МЕНЬШЕ НУЛЯ.

С* ПРИ ОБРАЩЕНИИ ПАРАМЕТР Р

С* ДОЛЖЕН ВЫЗЫВАТЬСЯ ПО НАИМЕНОВАНИЮ.

С * РЕЗУЛЬТАТ - НА МЕСТЕ МАССИВОВ ARE И AIM.

С* N - ЦЕЛАЯ СТЕПЕНЬ ДВОЙКИ.

С* ИМЕЕТСЯ ВОЗМОЖНОСТЬ НАХОЖДЕНИЯ

С* ОБРАЗА ФУРЬЕ ЛИШЬ НЕКОТОРОГОПОДМНОЖЕСТВА

С

*

ТОЧЕК МАССИВОВ ARE И AIM (НАЧАЛЬНАЯ ТОЧКА

С

*

ПОДМНОЖЕСТВА В IN, ШАГ - В К ).

 

 

 

REAL*8

A R E ,A IM ,P ,R ,A ,B ,S ,C ,T ,S I, СО

 

 

 

INTEGER

N ,I N ,К , I , I I , J , J J , M, MM,N 1,N 2

 

 

 

DIMENSION ARE(N),AIM(N)

 

 

 

Nl=N/2

 

 

 

 

MM=Ni/2

 

 

 

 

N2=N1+K

 

 

 

 

J = IN

 

 

 

1

JJ=J

 

 

 

J=J+K

 

 

 

2

IF (J - N l ) 2 , 2 , 1 0

 

 

II=JJ+Ni

 

 

 

R-ARE(J)

 

 

 

ARE( J )=ARE(II)

 

 

 

ARE(II)=R

183

0 0 1 7

 

R=AmtJ>

0 0 1 8

 

AIM<J>=AIM(II)

0 0 1 9

 

AIM (II)=R

0020

 

M=KK

0021

3

0022

IF<JJ-H >5*5,4

0 0 2 3

4

JJ=JJ-M

0 0 2 4

 

'1=M/2

0 0 2 5

5

60 TO 3

0 0 2 6

JJ=JJ+W

0 0 2 7

6

IF ( J J —J > 1 ,1 ,6

0 0 2 8

R=ARECJ)

0 0 2 9

 

ARECJ)=ARECJJ)

0 0 3 0

 

ARE ( J J )=R

0031

 

R=AIMCJ)

0 0 3 2

 

Am CJ)=Aim (JJ)

0 0 3 3

 

AIM CJJ)=R

0 0 3 4

 

I=J+N2

0 0 3 5

 

II=JJ+N2

0 0 3 6

 

R=ARE(I)

003 7

 

ARE( I > =ARE С1 1 )

0 0 3 8

 

ARE (I I )* R

0 0 3 9

 

R=AIM(I)

0 0 4 0

 

А1М(П=А1М(П)

0041

 

AIM fII)=R

0 0 4 2

10

GO TO 1

0 0 4 3

I=K

0 0 4 4

 

T = 3 .14159265359

0 0 4 5

11

I Р ( Р ) 1 3 ,1 7 ,1 1

0 0 4 6

T=-T

0047

13

P=-T

0 0 4 8

14

51= 0 .

0 0 4 9

 

CCJ = 1 .

0 0 5 0

 

S-OSINCT)

0051

 

C=DCOS(T)

005 2

 

T=0.5*T

0053

 

II = I

0 054

 

1 = 1 +1

0 0 5 5

 

DO 16 M = IN ,IIt K

0 0 5 6

 

oo i s J =M, N , I

005 7

 

J J =J +I I

0 0 5 8

 

A=ARE(JJ)

0 0 5 9

 

B=AIM(JJ)

0 0 6 0

 

R=A*CO-B*SX

0061

 

ARE CJ J ) =ARE(J ) —R

0062

 

ARE(J)=ARE(J)+R

0063

 

R=B*CQ+A*SI

0064

 

AIM (JJ)=AIM (J) —R

0 0 6 5

15

AIM(J)=AIM(J)+R

0 0 6 6

 

R=C#CO-S#SI

0 0 6 7

16

SI=C*SI+S*CO

0 0 6 8

CQ=R

0 0 6 9

17

I F ( I - N ) 1 4 , 1 7 ,1 7

0 0 7 0

RETURN

0071

 

END

t84

V . Программа решения двумерных интегральных уравнений типа свертки

0 0 0 1

0002

0003

0004

0005

0006

0007

0008

0009

0010

0011

0012

0013

0014

0015

0016

0017

0018

0019

0020

0021

0022

0023

0024

0025

0026

0027

SUBROUTINE PTITR(AK,U0,ALIM,N1,N2,Z, *DL, HH, C l, ALPHA, AN, U, NU, IMAX, IERR)

IMPLICIT REAL*8(A-H, 0 - Z)

INTEGER IERR, IMAX, IP , IQ,N1,N2,NA I,NAR, *NMAX,NU,NUI,NUR,NW.NZI,NQI

REAL*8 AK,ALIM,ALPHA, AN, С1 ,DL, HH, *OM,T1,T2,U,U0,Z,EFRO

DIMENSION U(NU),U0(N1,N2) DIMENSION Z(N1,N 2 ),ALIM(12)

c

*

ТАБЛИЦА СООТВЕТСТВИЯ

c

*

ИМЯ

ДЛИНА

НАЗНАЧЕНИЕ

c

*

ARE

N1*N2

ДЕЙСТВ. ЧАСТЬ

c

*

AIM

N1*N2

ОБРАЗА ФУРЬЕ ЯДРА

c

*

МНИМ. ЧАСТЬ

c

*

URE

N1*N2

ОБРАЗА ФУРЬЕ ЯДРА

c

*

ДЕЙСТВ. ЧАСТЬ

c

*

UIM

N1*N2

ОБРАЗА ФУРЬЕ ПРАВОЙ ЧАСТИ

c

*

МНИМ. ЧАСТЬ

c

*

ZIM

N1*N2

ОБРАЗА ФУРЬЕ ПРАВОЙ ЧАСТИ

c

*

МНИМАЯ ЧАСТЬ РЕШЕНИЯ

c

*

W1 И W2

N1 и N2

СТАБИЛИЗАТОРЫ

C

*

IF=1

 

 

IP - ПРИЗНАК РАБОТЫ:

С* ПРИ ПЕРВОМ ОБРАЩЕНИИ 1Р=+1

С* ПРИ ПОВТОРНОМ ВХОДЕ ЧЕРЕЗ FTIKRE 1Р=-1

EFRO=0.

IF(C1 ,GT. 1. )EPR0=:(C1-1. )*DL

C * EPRO - ТОЧНОСТЬ РЕШЕНИЯ УРАВНЕНИЯ НЕВЯЗКИ С * ЕСЛИ EFRO=0, ТО ВЫЧИСЛЯЕТСЯ ЭКСТРЕМАЛЬ

С * ПРИ ФИКСИРОВАННОМ ALFA

100CONTINUE

С* ВЫЧИСЛЕНИЕ ЛОКАЛЬНОГО НОСИТЕЛЯ РЕШЕНИЯ ALIM(1)=ALIM(5)-.5*(ALIM(9)+ALIM(10)) ALIM(2)=ALIM(6 ) - . 5 * (ALIM(9 )+ALIM(10))

ALIM(3 )=ALIM(7 ) - .5 * ( ALIM(11)+ALIM(12)) ALIM( 4 )=ALIM(8 ) - . 5*(ALIM(11)+ALIM(12))

C * T l, T2 - ПЕРИОДЫ ПРОДОЛЖЕНИЯ T1=ALIM(6)-ALIM(5) T2=ALIM(8)-ALIM(7)

С * ФОРМИРОВАНИЕ НАЧАЛ МАССИВОВ NAR=1

NQU=N1*N2

NAI=NAR+NQU

NWlrNAI+NQU

NW2=NW1+N1

NZI=NW2+N2

NUR=NZI+NQU

NUI=NUR+NQU

NMAX=NUI+NQU

С * КОНТРОЛЬ ДЛИНЫ РАБОЧЕГО МАССИВА IFCNMAX-l.GT.NU) GOTO 64

IF (IP .E Q .-l) GOTO 101

185

0028

С *

ЗАДАНИЕ ПРАВОЙ ЧАСТИ

 

 

CALL РТICR1(U0, U0, U( NUR) , NQU,0 .)

0029

 

 

CALL PTICR2(U(NUI) ,0 . ,NQU)

0030

101

CONTINUE

0031

С *

СОБСТВЕННО РЕШЕНИЕ УРАВНЕНИЯ

 

 

CALL PTIKR3(АК,U(NAR),U(NAI), Z,U (N ZI),

 

 

*U(NUR), U(NUI) , U(NW1) , U(NW2),N 1,N 2,

 

 

*ALPHA, ALIM, AN, ОМ, T1 ,T2, DSQRT(DL),

0032

 

*DSQRT(HH) , IF , EPRO, IQ, IMAX, IERR)

 

64

GOTO 999

0033

С *

CONTINUE

0034

HE ХВАТАЕТ ДЛИНЫ РАБОЧЕГО МАССИВА

 

 

IERR=64

0035

 

 

GOTO 999

 

С * ВХОД PTITRE ПРЕДНАЗНАЧЕН

 

С * ДЛЯ ПОВТОРНОГО РЕШЕНИЯ УРАВНЕНИЯ

0036

С *

С ТЕМИ ЖЕ ЯДРОМ И ПРАВОЙ ЧАСТЬЮ

 

 

ENTRY PTITRE

0037

 

 

IF=-1

 

0038

999

GOTO 100

0039

CONTINUE

0040

 

 

RETURN

0041

 

 

END

 

0001

 

 

SUBROUTINE PTIKR3(AK, ARE, AIM, ZRE, ZIM,

 

 

*URE,UIM,W1, W2,N 1,N 2,ALP,ALIM,BETA,RO,

 

 

*T1,T2,DEL,HH,IPAR,EPRO,IQ,IMAX,IERR)

0002

 

 

IMPLICIT REAL*8(A-H,0-Z)

0003

 

 

INTEGER I,IERR,IM A X ,IPA R,IQ ,J,M ,N ,N 1,N2

0004

 

 

REAL*8 AB, AIM,ALIM,ALP, ARE, ARG1, ARG2,

 

 

*A0, Al,A2,BA,BETA, C l, C2, C3, DEL, DQ, DR,

 

 

*EPRO,Fl,F2,F3,HA,HH,H1,H2,P,RO,

 

 

*R0, R1, S S I, T1, T2,UIM,URE, U2,

0005

 

*W1, W2, X,ZIM,ZNOR,ZRE,ZZ

 

 

DIMENSION ARE(N1,N 2 ) ,ZRE(N1,N 2),

 

 

*URE(N1,N 2 ),AIM(N1,N 2 ) ,ZIM (N1,N2),

0006

 

*UIM(N1,N 2 ),W1(N 1 ),W2(N 2 ),ALIM(12)

 

 

H1=T1/N1

0007

 

 

H2=T2/N2

0008

С *

 

HA=H1/N1*H2/N2

0009

ПРОВЕРЯЕМ, ПЕРВЫЙ ЛИ ВХОД

С *

 

IF(IPA R .EQ .-1 ) GOTO 2

0 0 1 0

ЗАДАНИЕ ЯДРА УРАВНЕНИЯ

 

 

DO

1

1=1,N1

001 1

 

 

DO

1

J= 1 ,N2

0 0 1 2

 

 

A R G l= (I-N l/2 -l)*H l+

0013

 

+ 0 .5*(ALIM(9 )+ALIM(10))

 

 

ARG2=(J-N2/2-1)*H2+

0014

 

+0. 5*( АЦМ( 11 )+ALIM( 12))

 

 

ARE( I , J ) =AK(ARG1, ARG2) *H1*H2

0015

 

 

A IM (I, J ) =0.

0016

 

 

IF(ARG1. LT.ALIM (9). OR.ARG1. GT. ALIM(1 0 ).

 

 

.OR. ARG2. LT.ALIM(1 1 ) .OR.ARG2. GT.ALIM(12))

 

 

*

 

 

A R E (I,J)= 0 .

186

0017

 

 

W l(I)= (2 .0 /H 1 *

 

 

 

*

 

DSIN(3 . 14159265359D0/N1*(1 - 1 ) ) )**2

0018

 

 

W2(J )= (2 .0/H2*

0019

 

1

*

 

DSIN(3. 14159265359D 0/N 2*(J-l) ) )**2

 

CONTINUE

0020

 

 

P=1.0

 

 

С * ПРЕОБРАЗОВАНИЕ ФУРЬЕ ЯДРА И ПРАВОЙ ЧАСТИ

0021

 

 

CALL FTFTC(ARE,AIM,N1,N2,P)

0022

 

 

Р=1.0

 

0023

 

2

CALL FTFTC(URE,UIM,N1,N2,P)

0024

С *

CONTINUE

0025

ПОДБИРАЕМ ALP ТАК, ЧТО RO(ALP) > 0

77

I®=0

 

0026

CONTINUE

0027

С *

 

IQ=IQ+1

0028

ВЫЧИСЛЕНИЕ НЕВЯЗОК

 

 

F1=0.

 

0029

 

 

F2=0.

M=1,N1

0030

 

 

DO

44

0031

 

 

DO

44

N=1,N2

0032

 

 

U2=URE(M,N)**2+UIM(M,N)**2

0033

 

 

A2=ARE(M,N)**2+AIM(M,N)**2

0034

 

 

X=1.+(W1(M)+W2(N))**2

0035

 

 

IF (A 2 .E Q .0 .) GOTO 42

0036

 

 

ВА=Х/(A2+ALP*X)

0037

 

 

AB=1. -ALP*BA

0038

 

 

Cl=HA*U2*(BA*ALP)**2

0039

 

 

C2=HA*U2*AB*BA

0040

 

 

F1=F1+C1

0041

 

 

F2=F2+C2

0042

 

42

GOTO 44

0043

 

F1=F1+HA*U2

0044

 

44

CONTINUE

 

С * ВЫЧИСЛЕНИЕ ОБОБЩЕННОЙ НЕВЯЗКИ

0045

С * ДЛЯ ПРОВЕРКИ RO(ALP)>0

 

 

BETA=F1

0046

 

 

RO=Fl-(DEL+HH*DSQRT(F2))**2

С* ЕСЛИ ЗАДАНО EPRO=0, ТО КОНЧАЕМ 0047 IFCEPRO.EQ.0.) GOTO 10

С* ЕСЛИ ЗАДАНО ALP=0.0, ТО КОНЧАЕМ

0048

 

IF(A LP .EQ .0.)

GOTO 68

0049

 

IFCRO.GT.0.) GOTO 33

С * ПЕРЕХОД К ВЫЧИСЛЕНИЮ РЕШЕНИЯ,

С * ЕСЛИ НЕ УДАЛОСЬ ПОДОБРАТЬ ALP ТАКОЕ,

С

*

ЧТО RO(ALP) > 0

GOTO 65

0050

 

IF(IQ.GT.IMAX)

0051

 

ALP=2. *ALP

 

0052

 

GOTO 77

 

С * НАЧАЛО ПОИСКА КОРНЯ МЕТОДОМ НЬЮТОНА

0053

33

CONTINUE

 

0054

3

IQ=0

 

0055

CONTINUE

 

0056

 

IQ=IQ+1

 

С * БЛОК ВЫЧИСЛЕНИЯ НЕВЯЗОК

0057

 

F1=0.

 

187

0058

0059

0060

0061

0062

0063

0064

0065

0066

0067

0068

0069

0070

0071

0072

0073

0074

0075

0076

0077

0078

0079

0080

0081

0082

0083

0084

0085

0086

0087

0088

0089

0090

0091

0092

0093

0094

0095

0096

0097

F2=0.

F3=0.

DO 4 M=1,N1

DO 4 N=1,N2

U2=URE(M,N )**2+UIM(M,N)**2 A2=ARE(M,N)**2+AIM(M,N)**2

X=1. +(W1(M)+W2(N))**2

IF ( A2. EQ.0 .) GOTO 41 BA=X/(A2+ALP*X) AB=1. -ALP*EA C1=HA*U2*(ВA*ALP)**2 C2=HA*U2*AE*EA C3=2.*C1*AB

F1=F1+C1

F2=F2+C2

F3=F3+C3

GOTO 4

41 F1=F1+HA*U2

4CONTINUE

С* ВЫЧИСЛЕНИЕ НЕВЯЗКИ -BETA,

С* НОРМЫ РЕШЕНИЯ В W21 -ZNOR,

С* ОБОБЩЕННОЙ НЕВЯЗКИ -RO

С* И ЕЕ ПРОИЗВОДНОЙDR BETA=F1

ZNOR=DSQRT(F 2) RO=BETA-(DEL+HH*ZNOR)**2 IF (ALP. EQ.0 . ) GOTO 68

DR=-F3*ALP-(DEL+HH*ZNOR)*HH*F3/ZNOR

С* ПЕРЕХОД К ВЫЧИСЛЕНИЮ РЕШЕНИЯ,

С* ЕСЛИ ТОЧНОСТЬ ДОСТИГНУТА

IF (DABS(RO) . LT. EP/RO) GOTO 10

С* ПЕРЕХОД НА МЕТОД ХОРД,

С* ЕСЛИ ОБОБЩЕННАЯ НЕВЯЗКА НЕ ВЫПУКЛА

IF (RO. LT. 0 . ) GOTO 61

С* ВЫЧИСЛЕНИЕ НОВОГО АРГУМЕНТА

С* ПО МЕТОДУ НЬЮТОНА

С* И ПЕРЕХОД К СЛЕДУЮЩЕМУ ШАГУ

DQ=-RO/DR A1=ALP Rl=RO

ALP=1. / ( 1 •/ALP+DQ)

IF ( IQ . GE. IMAX) GOTO 66 GOTO 3

С * МЕТОД ХОРД

61 CONTINUE

С* ИЗМЕНЕНИЕ ИНТЕРВАЛА ПРИ R0<0

6CONTINUE A0=ALP R0=RO

7CONTINUE IQ=IQ+1

С* ВЫЧИСЛЕНИЕ НОВОГО АРГУМЕНТА

С* ПО МЕТОДУ ХОРД

ALP=A0*A1*(R0-R1) / ( A0*R0-A1*R1) С * ВЫЧИСЛЕНИЕ НЕВЯЗОК

F1=0.

188

0098

0099

0100

0101

0102

0103

0104

0105

0106

0107

0108

0109

0110

0111

0112

0113

0114

0115

0116

0117

0118

0119

0120

0121

0122

0123

0124

0125

0126

0127

0128

0129

0130

0131

0132

0133

0134

0135

0136

0137

0138

0139

0140

F2=0.

DO 9 M= 1, N1

DO 9 N=1,N2 U2=URE(M,N)**2+UIM(M,N)**2 A2=ARE(M,N)**2+AIM(M,N)**2 X=1.+(W1(M)+W2(N))**2

IF (A2. EQ.0 .) GOTO 91 BA=X/(A2+ALP*X) AB=1.-ALF*BA C1=HA*U2*(BA*ALP)**2 C2=HA*U2*AB*BA F1=F1+C1

F2=F2+C2

GOTO 9

91 F1=F1+HA*U2

9CONTINUE

С* ВЫЧИСЛЕНИЕ НЕВЯЗКИ, ОБОБЩЕННОЙ НЕВЯЗКИ

С* И НОРМЫ РЕШЕНИЯ

BETA=F1

ZNOR=DSQRT(F2)

RO=BETA-(DEL+HH*ZNOR)**2

IF(A L P .E Q .0.) GOTO 68

С* ПЕРЕХОД К ВЫЧИСЛЕНИЮ РЕШЕНИЯ,

С* КОГДА ТОЧНОСТЬ ДОСТИГНУТА IF(DABS(RO). LT.EPRO) GOTO 11

IF(IQ.EQ.IMAX) GOTO 67 IF (RO. LT. 0 .) GOTO 6

С * ИЗМЕНЕНИЕ ИНТЕРВАЛА, КОГДА RO>0 A1=ALP

Rl=RO

GOTO 7

65CONTINUE

С* HE УДАЛОСЬ ПОДОБРАТЬ ALP ТАК,

С* ЧТО RO(ALP) БОЛЬШЕ НУЛЯ IERR=65

GOTO 999

66CONTINUE

С* СДЕЛАНО IMAX ИТЕРАЦИЙ МЕТОДОМ НЬЮТОНА IERR=66

GOTO 999

67CONTINUE

С* СДЕЛАНО IMAX ИТЕРАЦИЙ,

С* ПРИМЕНЯЛСЯ МЕТОД ХОРД IERR=67

GOTO 999

68 CONTINUE

С* ЗАДАНО ИЛИ ПОЛУЧИЛОСЬ ALP=0.0

IERR=68

GOTO 999

11CONTINUE

С* РЕШЕНИЕ НАЙДЕНО МЕТОДОМ ХОРД

IERR=1

GOTO 999

10CONTINUE

С* НОРМАЛЬНОЕ ОКОНЧАНИЕ

IERR=0

189

0141

999

CONTINUE

0142

С * ВЫЧИСЛЕНИЕ ФУРЬЕ-ПРЕОБРАЗОВАНИЕ РЕШЕНИЯ

 

SSI=1.0

0143

 

DO 12 M=1,N1

0144

 

SSI=-SSI

0145

 

DO 12 N=1,N2

0146

 

SSI=-SSI

0147

 

ZZ=N1*N2*(ARE(M,N)**2+AIM(M,N)**2+

0148

 

+ALP*(1.0+(W1(M)+W 2(N))**2))

 

IF (Z Z .N E .0 .) GOTO 111

0149

 

ZRE( M, N) =0.

0150

 

ZIM(M,N)=0.

0151

111

GOTO 12

0152

ZRE(M,N)= SSI*(ARE(M,N )*URE(M,N)+

0153

 

+AIM(M,N)*UIM(M,N))/ZZ

 

ZIM(M,N)=SSI*(ARE(M,N)*UIM(M,N)-

0154

12

-AIM(M,N)*URE(M,N))/ZZ

CONTINUE

0155

С * ОБРАТНОЕ ФУРЬЕ-ПРЕОБРАЗОВАНИЕ РЕШЕНИЯ

 

F = - 1 . 0

0156

 

CALL FTFTC(ZRE,ZIM,N 1,N 2,P)

0157

 

RETURN

0158

 

END

0001 SUBROUTINE FTFTC(ARE,AIM,N1,N2,P)

С* ПРОГРАММА БЫСТРОГО ДВУМЕРНОГО

С* ДИСКРЕТНОГО ПРЕОБРАЗОВАНИЯ ФУНКЦИИ,

С* ДЕЙСТВИТЕЛЬНАЯ ЧАСТЬ КОТОРОЙ НАХОДИТСЯ

С

*

В ARE(N1,N 2 ), А

МНИМАЯ - В AIM(N1,N2).

С

*

ЕСЛИ Р > 0 ,

ТО

ПРОИЗВОДИТСЯ ПРЯМОЕ,

С

*

А ЕСЛИ Р <

0 -

ОБРАТНОЕ ПРЕОБРАЗОВАНИЕ.

С* РЕЗУЛЬТАТ ОСТАЕТСЯ НА МЕСТЕ МАССИВОВ

С* ARE И AIM. РАЗМЕРНОСТИ МАССИВОВ N1 И N2

С* ДОЛЖНЫ БЫТЬ ЦЕЛЫМИ СТЕПЕНЯМИ ДВОЙКИ.

С* ПАРАМЕТР Р НЕ СОХРАНЯЕТСЯ.

0002

 

IMPLICIT

REAL*8(А-Н, О -Z)

0003

 

INTEGER

I,J,N 1 ,N 2

0004

 

REAL*8 ARE,AIM,Р

0005

 

DIMENSION ARE(N1,N2),AIM(N1,N2)

0006

 

DO 1 1=1,N1

0007

1

CALL FTF1C(ARE,AIM,N1*N2, I,N 1 ,P )

0008

CONTINUE

0009

 

DO 2 J= 1 ,N2

0010

2

CALL FTF1C(ARE(1 ,J ) , AIM(1 ,J ) ,N 1 ,1 ,1 ,P)

0011

CONTINUE

0012

 

RETURN

 

0013

 

END

 

0001

 

SUBROUTINE FTF1C(XARE, XAIM,N ,IN, К, P )

0002

 

IMPLICIT REAL*8(A-H,0-Z)

0003

 

INTEGER

N , I N , K , I , I I , J , J J , M,MM,N1,N2

190