Вы находитесь на странице: 1из 35

Институт проблем механики

Российской Академии Наук

С. Д. Алгазин

ЧИСЛЕННЫЕ АЛГОРИТМЫ КЛАССИЧЕСКОЙ


МАТФИЗИКИ.
XII. О вычислении собственных чисел оператора Лапласа в двусвязной
области.

Препринт № 802

Москва 2006 г.
Аннотация.

Рассматривается задача на собственные значения в гладкой двусвязной


области. Построен численный алгоритм без насыщения, который позволяет
определить с 6-7 знаками после запятой около 300 первых собственных
значений. Приводятся программы на Фортране-77.

The summary.

The problem on eigen values in smooth two-coherent area is considered. The


numerical algorithm without saturation which allows to define with 6-7 signs after a
comma about 300 first own values is constructed. Programs on Fortran-77 are
resulted.

Работа выполнена при финансовой поддержке Российского


фонда фундаментальных исследований. Проект № 05-01-00250.

055(02)2  Институт проблем механики РАН 2006

2
Введение.
В [1] рассматриваются задачи на собственные значения для оператора
Лапласа в произвольной гладкой области с постоянными коэффициентами.
Однако ряд задач математической физики приводит к задачам на собственные
значения для уравнения Лапласа в двусвязной области. В качестве примера
рассмотрим задачу об обтекании кругового цилиндра вязкой жидкостью [2].
Граничные условия в бесконечности сносятся на внешнюю границу кругового
кольца большого радиуса. Для построения дискретизации уравнений Навье-
Стокса в первую очередь требуется построить дискретизацию оператора
Лапласа в кольцевой области. Эта задача рассматривается ниже. Более общая
задача, которая также рассматривается ниже, это задача на собственные
значения для оператора Лапласа в произвольной двусвязной области. Для
построения алгоритма без насыщения требуется вначале построить конформное
отображение кольца на заданную двусвязную область. В приведённом ниже
примере расчёта конформное отображение задаётся аналитической формулой.
Отметим, что для численного построения конформного отображения кольца на
заданную двусвязную область и обратно, имеются надёжные алгоритмы без
насыщения [3,4]. Дискретизация оператора Лапласа в кольце строится на
основании теории h-матрицы [1].

§1. Постановка задачи и дискретизация.

В произвольной области Г ∈R2 с достаточно гладкой границей ∂Г= ∂Г1 ∪ ∂Г2


рассмотрим задачу

(1.1) ∆ u(z)+f(z)=0, z∈Г,


(1.2) u | ∂Γi = 0

∂u
(1.3) =0
∂n ∂Γi

∂u
(1.4) Au + =0
∂n ∂Γi

здесь функция f(z) либо задана, либо f(z)=[q(z)+λp(z)]u(z), где q(z) и p(z) –
заданные функции, и в этом случае имеем задачу на собственные значения для
оператора Лапласа. В дальнейшем будем считать, что f,A, q и p – гладкие
функции.
Пусть z=ϕ(w), ρ≤ |w|≤ R - конформное отображение кольца на область Г;
тогда в плоскости w формально получаем те же соотношения (1.1)- (1.4), где,
однако, вместо u(z) и f(z) следует писать u(w)=u(z(w)) и |ϕ′(w)|2f(z(w)), а вместо
A - α(w)=A(z(w))|φ′(w)|.
В кольце дискретный Лапласиан записывается h-матрицей [1]:
3
n
2 '
(1.5) H =
N

k =0
Λ k ⊗ hk ,

где штрих у знака суммы означает, что слагаемое при k=0 берётся с
коэффициентом ½, Λk, k=0,1,…,n – матрица размера m × m (m – число
окружностей сетки в кольце, N=2n+1- число точек на каждой окружности).
Вычислить матрицы Λk можно, проведя дискретизацию уравнений Бесселя:

(1.6) -[V’’(r)+(1/r)V’(r)]+(k/r)2V(r)=λV(r), на сетке rν ,


ν=1,2,…,m.

С соответствующими краевыми условиями. Для дискретизации уравнения


Бесселя (1.6) применим методику, описанную в [1]. Дискретизацию оператора
d2/dr2 проведем, используя программу EIGVAL [1]:
Подпрограмма EIGVAL сводит вычисление собственных чисел и собственных
функций краевой задачи

y′′ − q ( x) y = λρ ( x) y,
αy′ + βy x=b = 0,
1

α 1 y′ + β 1 y x=b = 0,α 2 + α 12 ≠ 0.
2

к алгебраической задаче на собственные значения

(A-λB)y=0,

где матрицы A и B вычисляются подпрограммой EIGVAL. Формулы для


элементов матриц A и B и текст подпрограммы приведены в [1].

Описание параметров.

SUBROUTINE EIGVAL (A,B,N,AL,AL1,BE,BE1,B1,B2,T,X)


A,B – выходные матрицы,
N - размер матриц A и B,
AL - α,
AL1 - α1,
BE - β,
BE1 - β1,
B1 - b1,
B2 - b2,
T, X – рабочие массивы длины N.

Требуемые функции-подпрограммы: Q, R.

4
Замечание. Вычисление функций Q и R должно быть оформлено в
соответствии с правилами Фортрана в виде подпрограмм-функций с
идентификаторами Q и R соответственно.
. Формулы численного дифференцирования. Для дискретизации
оператора d/dr применим формулу численного дифференцирования. Заметим,
что как легко понять, удовлетворять краевым условиям в этой формуле нет
необходимости.
b−a a+b 2x − a − b
Пусть x ∈ [a, b], y ∈ [−1,+1]; x = y+ , y= .
2 2 b−a
Выберем на отрезке [a,b] m узлов:
b−a a+b (2ν − 1)π
xν = yν + , yν = cosψ ν , ψ ν = , ν = 1,2,..., m.
2 2 2m

И рассмотрим фундаментальные функции интерполяции:


2x − a − b
Tm ( )
lν ( x) = b − a , ν = 1,2,..., m

 2x − a − b 
 Tm ( )  x = xν ( x − xν )
 b−a 
2x − a − b 2x − a − b
Распишем подробно производную Tm ( ) = cos m arccos( ).
b−a b−a
2 x − a − b 2m 1
Tm′ (...) = sin m arccos( ) x⋅ ,
b−a b−a  2x − a − b 
2

1−  
 b−a 
2x − a − b
Tm ( )
sin mψ ν 2m b − a
Tm′ (...) x = xν = ⋅ , lν ( x) = ,
sinψ ν b − a sin mψ ν 2m
⋅ ⋅ ( x − xν )
sinψ ν b − a
b−a Tm ( y )
x − xν = ( y − yν ) ⇒ lν = .
2 (−1)ν −1
m ( y − yν )
sinψ ν
m m m −1
Tm ( y ) f ( xν )
Pm ( x; f ) = ∑ lν ( x) f ( xν ) =∑ ν −1
= ∑ 'a k( m )Tk ( y ),
ν =1 ν =1 (−1)
m ( y − yν ) k =0
(1.7) sinψ ν
2 m 2 m
a k( m ) = ∑ ν k ν m∑
m ν =1
f ( x )T ( y ) =
ν =1
f ( xν ) cos kψ ν .

где ‘ у знака суммы означает, что слагаемое при k=0 берётся с коэффициентом
½.
Имея интерполяционную формулу (1.7) легко получить формулу для
производной:

5
m −1
d d d k 2
Pm′ ( x; f ) = ∑ 'a k( m ) Tk ( y ), Tk ( y ) = cos k arccos y = sin k arccos y ⋅ ⋅ .
k =0 dx dx dx 1− y b − a
2

b−a a+b
При x = x µ = yµ + , y µ = cosψ µ , µ = 1,2,..., m.
2 2

d sin kψ µ 2
Tk ( y ) = ⋅k .
dx x = xµ sinψ µ b−a

Матрица дифференцирования

4 m −1 sin kψ µ cos kψ ν
Dµν = ∑ sinψ
b − a k =1 µ
(1.8)
m
f ′( x µ ) = ∑ Dµν f ( xν ).
ν =1

Вычисляет матрицу дифференцирования SUBROUTINE DIFAB(D,M,A,B).


Дифференцирование на отрезке [a,b] без удовлетворения граничным условиям.

Вычисление матрицы Λ0. Клетку Λ0 h-матрицы (1.5) вычисляет


программа:
$objcomment lib:"twoca.lib"
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION
A(80,80),B(80,80),T(80),X(80),Y(80),IANA(80),SCALE(80),
* WR(80),WI(80)
PI=3.141592653589D0
N=20
AL=0.D0
BE=1.D0
AL1=1.D0
BE1=0.D0
C
B1=1.D-2
B2=1.D0
CALL LAMDA0 (A,B,N,AL,AL1,BE,BE1,B1,B2,T,X)
NOUT=4
OPEN (UNIT=NOUT,FILE='NOUT.TXT')
WRITE (NOUT,*) 'EPS=',B1,'N=',N
CALL BALANC (N,N,A,LOW,IGH,SCALE)
CALL ELMHES (N,N,LOW,IGH,A,IANA)
CALL HQR (N,N,LOW,IGH,A,WR,WI,IERR)
WRITE (*,*) 'IERR =',IERR

6
WRITE (*,*) 'WR'
WRITE (*,2),(WR(I),I=1,N)
WRITE (*,*) 'WI'
WRITE (*,2),(WI(I),I=1,N)
2 FORMAT (1X,5E18.11)
WRITE (NOUT,*) IERR
WRITE (NOUT,*) 'WR'
WRITE (NOUT,*) (WR(I),I=1,N)
WRITE (NOUT,*) 'WI'
WRITE (NOUT,*) (WI(I),I=1,N)
STOP
END
SUBROUTINE LAMDA0 (C0,C,M,AL,AL1,BE,BE1,B1,B2,T,X)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(M,M),C1(M,M),T(M),X(M)
PI=3.141592653589D0
CALL EIGVAL (C0,C1,M,AL,AL1,BE,BE1,B1,B2,T,X)
C1=-C1
CALL DMINV (C1,M,DET,T,X)
CALL DIFAB (C0,M,B1,B2)
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
R=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 NU=1,M
1 C0(MU,NU)=C0(MU,NU)/R
C0=C1-C0
RETURN
END
SUBROUTINE DIFAB (D,M,A,B)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
PSIMU=(2.D0*MU-1.D0)*PI/2.D0/M
DO 1 NU=1,M
PSINU=(2.D0*NU-1.D0)*PI/2.D0/M
P=0.D0
DO 2 K=1,M-1
2 P=P+SIN(K*PSIMU)*COS(K*PSINU)/SIN(PSIMU)
1 D(MU,NU)=4.D0*P/M/(B-A)
RETURN
END
REAL*8 FUNCTION Q(X)
IMPLICIT REAL*8 (A-H,O-Z)
Q=0.D0
RETURN
END
REAL*8 FUNCTION R(X)
IMPLICIT REAL*8 (A-H,O-Z)
R=1.D0
RETURN
END

Первая строка этой программы - $objcomment lib:"twoca.lib" - это вызов


библиотеки twoca.lib, которая содержит программы пакета EISPAСK: BALANC,
ELMHES, HQR. Эти подпрограммы доступны в Интернет по адресу:
htpp://www.netlib.org/eispack/; кроме того эта библиотека содержит
подпрограмму EIGVAL и подпрограмму DMINV – обращение матрицы [1].

7
SUBROUTINE LAMDA0 (C0,C,M,AL,AL1,BE,BE1,B1,B2,T,X)

С0 – результат, матрица размера m×m;


С - рабочий массив размера m×m;
M = m, число окружностей сетки в кольце;
AL,AL1,BE,BE1,B1,B2,T,X – см. описание подпрограммы EIGVAL; при
помощи
этих параметров задаются граничные условия и радиусы окружностей
кольца.
Например, в вышеприведённой программе задано условие Неймана на
внеш-
нем радиусе R=1и условие Дирихле на внутреннем радиусе ρ=10 -2.

Вычисление h-матрицы для кольца. h-матрицу для кольца вычисляет


программа:
$objcomment lib:"twoca.lib"
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(5,5),B(5,5),T(5),X(5),Y(5),
* WR(25),WI(25),H(25,25),IANA(25),SCALE(25)
PI=3.141592653589D0
M=5
N=5
AL=0.D0
BE=1.D0
AL1=1.D0
BE1=0.D0
C
B1=1.D-1
B2=1.D0
CALL LAMDA0 (A,B,M,AL,AL1,BE,BE1,B1,B2,T,X)
NOUT=4
OPEN (UNIT=NOUT,FILE='NOUT.TXT')
WRITE (NOUT,*) 'EPS=',B1,'N=',N,'M=',M
C
CALL HMATR2(H,M,N,A,B,B1,B2)
NM=(N-1)/2
CALL RASPAK (H,M,NM)
NT=M*N
CALL BALANC (NT,NT,H,LOW,IGH,SCALE)
CALL ELMHES (NT,NT,LOW,IGH,H,IANA)
CALL HQR (NT,NT,LOW,IGH,H,WR,WI,IERR)
WRITE (*,*) 'IERR =',IERR
WRITE (*,*) 'WR'
WRITE (*,2),(WR(I),I=1,NT)
WRITE (*,*) 'WI'
WRITE (*,2),(WI(I),I=1,NT)
2 FORMAT (1X,5E18.11)
WRITE (NOUT,*) IERR
WRITE (NOUT,*) 'WR'
WRITE (NOUT,*) (WR(I),I=1,NT)
WRITE (NOUT,*) 'WI'
WRITE (NOUT,*) (WI(I),I=1,NT)
STOP
END
SUBROUTINE LAMDA0 (C0,C,M,AL,AL1,BE,BE1,B1,B2,T,X)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(M,M),C1(M,M),T(M),X(M)
8
PI=3.141592653589D0
CALL EIGVAL (C0,C1,M,AL,AL1,BE,BE1,B1,B2,T,X)
C1=-C1
CALL DMINV (C1,M,DET,T,X)
CALL DIFAB (C0,M,B1,B2)
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
R=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 NU=1,M
1 C0(MU,NU)=C0(MU,NU)/R
C0=C1-C0
RETURN
END
SUBROUTINE DIFAB (D,M,A,B)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
PSIMU=(2.D0*MU-1.D0)*PI/2.D0/M
DO 1 NU=1,M
PSINU=(2.D0*NU-1.D0)*PI/2.D0/M
P=0.D0
DO 2 K=1,M-1
2 P=P+SIN(K*PSIMU)*COS(K*PSINU)/SIN(PSIMU)
1 D(MU,NU)=4.D0*P/M/(B-A)
RETURN
END
REAL*8 FUNCTION Q(X)
IMPLICIT REAL*8 (A-H,O-Z)
Q=0.D0
RETURN
END
REAL*8 FUNCTION R(X)
IMPLICIT REAL*8 (A-H,O-Z)
R=1.D0
RETURN
END
C
SUBROUTINE HMATR2(H,M,N,C0,C,B1,B2)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(1),C(M,M),R(30),C0(M,M)
INTEGER P,LX,MX
PI=3.141592653589D0
DO 4 I=1,M
PSI=(2.D0*I-1.D0)*PI/2.D0/M
4 R(I)=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
NM=(N+1)/2
DO 20 NU=1,M
DO 20 MU=1,M
20 C(NU,MU)=C0(NU,MU)
I0=0
DO 1 NU=1,M
DO 1 MU=1,M
DO 1 L=1,NM
I0=I0+1
1 H(I0)=C(NU,MU)/N
NM1=NM-1
DO 2 K=1,NM1
10 DO 5 NU=1,M
DO 5 MU=1,M
9
C(NU,MU)=C0(NU,MU)
IF(NU.EQ.MU) C(NU,MU)=C(NU,MU)+(K/R(NU))**2
5 CONTINUE
12 I0=0
DO 3 NU=1,M
DO 3 MU=1,M
I2=0
DO 3 P=1,NM
I0=I0+1
H(I0)=H(I0)+(2.D0/N)*C(NU,MU)*COS(K*2.D0*PI*I2/N)
3 I2=I2+1
2 CONTINUE
RETURN
END
Здесь SUBROUTINE HMATR2(H,M,N,C0,C,B1,B2) –
подпрограмма, которая вычисляет h-матрицу H в упакованном
виде; M – число окружностей сетки в кольце, N=2*n+1 –
число точек по окружностям; C0 – входной массив размера
M×M, который содержит клетку Λ0 h-матрицы (1.5); C –
рабочий массив размера M×M; B1,B2 – радиусы кольца
B1=ρ,B2=R. Распаковку массива H производит подпрограмма
RASPAK [1]. Программа выдаёт матрицу H по строкам,
поэтому для вычисления собственных векторов её нужно
транспонировать при помощи подпрограммы TRANSP (H,NT)
[1].
Вычисление собственных функций с файлом для Serfer
производит программа:
$objcomment lib:"twoca.lib"
PARAMETER (M=30,N=41,NT=M*N,NT2=NT*NT)
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 ZR,WWR
DIMENSION A(M,M),B(M,M),T(M),X(M),Y(M),XR(NT),YR(NT),
*WR(NT),WI(NT),H(NT,NT),IANA(NT),SCALE(NT),Z(NT),E(NT2),U(NT)
PI=3.141592653589D0
C
X1=0.3D0
X2=0.1D0
R=(1.D0-X1*X2+SQRT((1.D0-X1**2)*(1.D0-X2**2)))/(X1-X2)
ALFA=(1.D0+X1*X2+SQRT((1.D0-X1**2)*(1.D0-X2**2)))/(X1+X2)
C
OPEN (UNIT=10,FILE='EIGFUN.DAT')
WRITE (10,*) '"X","Y","Z"'
AL=0.D0
BE=1.D0
AL1=1.D0
BE1=0.D0
B1=1.D0
B2=R
CALL LAMDA0 (A,B,M,AL,AL1,BE,BE1,B1,B2,T,X)
NOUT=4
OPEN (UNIT=NOUT,FILE='NOUT.TXT')
WRITE (NOUT,*) 'X1=',X1,'X2=',X2
WRITE (NOUT,*) 'R=',R,'ALFA=',ALFA
WRITE (NOUT,*) 'N=',N,'M=',M
C
CALL HMATR2(H,M,N,A,B,B1,B2)
NM=(N-1)/2

10
CALL RASPAK (H,M,NM)
CALL TRANSP (H,NT)
I0=0
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
RO=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 L=0,N-1
FI=2.D0*L*PI/N
I0=I0+1
WWR=CMPLX(RO*COS(FI),RO*SIN(FI))
ZR=(WWR-ALFA)/(ALFA*WWR-1.D0)
XR(I0)=REAL(ZR)
YR(I0)=AIMAG(ZR)
P=ALFA**2*RO**2-2.D0*ALFA*RO*COS(FI)+1.D0
1 Z(I0)=(ALFA**2-1.D0)**2/P**2
C
WRITE (NOUT,*) 'Z'
WRITE (NOUT,*) (Z(I),I=1,NT)
WRITE (NOUT,*) 'END Z'
DO 3 I=1,NT
DO 3 J=1,NT
3 H(I,J)=H(I,J)/Z(I)
WRITE (NOUT,*) 'H - ', 'Матриица дискретной задачи'
C WRITE (NOUT,*) H
WRITE (NOUT,*) 'END H'
CALL BALANC (NT,NT,H,LOW,IGH,SCALE)
CALL ELMHES (NT,NT,LOW,IGH,H,IANA)
CALL ELTRAN (NT,NT,LOW,IGH,H,IANA,E)
CALL HQR2 (NT,NT,LOW,IGH,H,WR,WI,E,IERR)
CALL BALBAK(NT,NT,LOW,IGH,SCALE,NT,E)
WRITE (*,*) 'IERR =',IERR
WRITE (*,*) 'WR'
WRITE (*,2),(WR(I),I=1,NT)
WRITE (*,*) 'WI'
WRITE (*,2),(WI(I),I=1,NT)
2 FORMAT (1X,5E18.11)
WRITE (NOUT,*) IERR
WRITE (NOUT,*) 'WR'
WRITE (NOUT,*) (WR(I),I=1,NT)
WRITE (NOUT,*) 'WI'
WRITE (NOUT,*) (WI(I),I=1,NT)
C
RMIN=1.D12
IJ=1
I1=1
110 DO 60 I=I1,NT
IF (WR(I).LT.RMIN) THEN
RMIN=WR(I)
IANA(IJ)=I
WI(IJ)=WR(I)
ENDIF
60 CONTINUE
WR(IANA(IJ))=1.D17
RMIN=1.D12
IJ=IJ+1
IF(IJ.LE.NT) GO TO 110
C
WRITE (NOUT,*) 'Eigenvalue'
WRITE(NOUT,12) (WI(I),I=1,NT)
C
11
WRITE (NOUT,*) 'Вывод собственных значений по номеру'
DO 21 K=1,15
WRITE (*,*) 'Inject the number of an eigenvalue?'
READ (*,*) IJ
WRITE (*,*) IJ, WI(IJ)
WRITE (NOUT,*) IJ, WI(IJ)
I2=NT*(IANA(IJ)-1)
DO 22 I=1,NT
I3=I2+I
22 U(I)=E(I3)
CALL NORM1(U,NT)
DO J=1,NT
WRITE (10,13) XR(J),YR(J),U(J)
13 FORMAT(1X,E9.2,1H,,E9.2,1H,,E9.2)
ENDDO
WRITE (NOUT,12) (U(I),I=1,NT)
21 CONTINUE
12 FORMAT (1X,4E18.11)
STOP
END
SUBROUTINE LAMDA0 (C0,C,M,AL,AL1,BE,BE1,B1,B2,T,X)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(M,M),C1(M,M),T(M),X(M)
PI=3.141592653589D0
CALL EIGVAL (C0,C1,M,AL,AL1,BE,BE1,B1,B2,T,X)
C1=-C1
CALL DMINV (C1,M,DET,T,X)
CALL DIFAB (C0,M,B1,B2)
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
R=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 NU=1,M
1 C0(MU,NU)=C0(MU,NU)/R
C0=C1-C0
RETURN
END
SUBROUTINE DIFAB (D,M,A,B)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
PSIMU=(2.D0*MU-1.D0)*PI/2.D0/M
DO 1 NU=1,M
PSINU=(2.D0*NU-1.D0)*PI/2.D0/M
P=0.D0
DO 2 K=1,M-1
2 P=P+SIN(K*PSIMU)*COS(K*PSINU)/SIN(PSIMU)
1 D(MU,NU)=4.D0*P/M/(B-A)
RETURN
END
REAL*8 FUNCTION Q(X)
IMPLICIT REAL*8 (A-H,O-Z)
Q=0.D0
RETURN
END
REAL*8 FUNCTION R(X)
IMPLICIT REAL*8 (A-H,O-Z)
R=1.D0
RETURN
END
12
C
SUBROUTINE HMATR2(H,M,N,C0,C,B1,B2)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(1),C(M,M),R(300),C0(M,M)
INTEGER P,LX,MX
PI=3.141592653589D0
DO 4 I=1,M
PSI=(2.D0*I-1.D0)*PI/2.D0/M
4 R(I)=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
NM=(N+1)/2
DO 20 NU=1,M
DO 20 MU=1,M
20 C(NU,MU)=C0(NU,MU)
I0=0
DO 1 NU=1,M
DO 1 MU=1,M
DO 1 L=1,NM
I0=I0+1
1 H(I0)=C(NU,MU)/N
NM1=NM-1
DO 2 K=1,NM1
10 DO 5 NU=1,M
DO 5 MU=1,M
C(NU,MU)=C0(NU,MU)
IF(NU.EQ.MU) C(NU,MU)=C(NU,MU)+(K/R(NU))**2
5 CONTINUE
12 I0=0
DO 3 NU=1,M
DO 3 MU=1,M
I2=0
DO 3 P=1,NM
I0=I0+1
H(I0)=H(I0)+(2.D0/N)*C(NU,MU)*COS(K*2.D0*PI*I2/N)
3 I2=I2+1
2 CONTINUE
RETURN
END
SUBROUTINE NORM1(Y,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
P=0.D0
DO 1 I=1,N
IF (ABS(Y(I)).GT.P) IP=I
IF (ABS(Y(I)).GT.P) P=ABS(Y(I))
1 CONTINUE
P=Y(IP)
DO 2 I=1,N
2 Y(I)=Y(I)/P
RETURN
END

Примечание. В файле EIGFUN.DAT содержится


собственный вектор матрицы дискретной задачи и сетка в
нужном формате. Собственный вектор выбирается по запросу
номера собственного значения.

Вычисление собственных функций с файлом для Tecplot производит программа:


$objcomment lib:"twoca.lib"
13
PARAMETER (M=30,N=41,NT=M*N,NT2=NT*NT)
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 ZR,WWR
DIMENSION A(M,M),B(M,M),T(M),X(M),Y(M),XR(NT),YR(NT),
*WR(NT),WI(NT),H(NT,NT),IANA(NT),SCALE(NT),Z(NT),E(NT2),U(NT)
PI=3.141592653589D0
C
X1=0.3D0
X2=0.1D0
R=(1.D0-X1*X2+SQRT((1.D0-X1**2)*(1.D0-X2**2)))/(X1-X2)
ALFA=(1.D0+X1*X2+SQRT((1.D0-X1**2)*(1.D0-X2**2)))/(X1+X2)
C
OPEN (UNIT=10,FILE='EIGFUN.DAT')
WRITE (10,*) 'TITLE="Eigen vector Data File"'
WRITE (10,*) 'VARIABLES="X","Y","Eigen function"'
WRITE (10,*) 'ZONE I=',M,',J=',N, ' ,F=POINT'
C
AL=0.D0
BE=1.D0
AL1=1.D0
BE1=0.D0
C
B1=1.D0
B2=R
CALL LAMDA0 (A,B,M,AL,AL1,BE,BE1,B1,B2,T,X)
NOUT=4
OPEN (UNIT=NOUT,FILE='NOUT.TXT')
WRITE (NOUT,*) 'X1=',X1,'X2=',X2
WRITE (NOUT,*) 'R=',R,'ALFA=',ALFA
WRITE (NOUT,*) 'N=',N,'M=',M
C
CALL HMATR2(H,M,N,A,B,B1,B2)
NM=(N-1)/2
CALL RASPAK (H,M,NM)
CALL TRANSP (H,NT)
I0=0
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
RO=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 L=0,N-1
FI=2.D0*L*PI/N
I0=I0+1
WWR=CMPLX(RO*COS(FI),RO*SIN(FI))
ZR=(WWR-ALFA)/(ALFA*WWR-1.D0)
XR(I0)=REAL(ZR)
YR(I0)=AIMAG(ZR)
P=ALFA**2*RO**2-2.D0*ALFA*RO*COS(FI)+1.D0
1 Z(I0)=(ALFA**2-1.D0)**2/P**2
C
WRITE (NOUT,*) 'Z'
WRITE (NOUT,*) (Z(I),I=1,NT)
WRITE (NOUT,*) 'END Z'
DO 3 I=1,NT
DO 3 J=1,NT
3 H(I,J)=H(I,J)/Z(I)
WRITE (NOUT,*) 'H - ', 'Матриица дискретной задачи'
C WRITE (NOUT,*) H
WRITE (NOUT,*) 'END H'
CALL BALANC (NT,NT,H,LOW,IGH,SCALE)
CALL ELMHES (NT,NT,LOW,IGH,H,IANA)
14
CALL ELTRAN (NT,NT,LOW,IGH,H,IANA,E)
CALL HQR2 (NT,NT,LOW,IGH,H,WR,WI,E,IERR)
CALL BALBAK(NT,NT,LOW,IGH,SCALE,NT,E)
WRITE (*,*) 'IERR =',IERR
WRITE (*,*) 'WR'
WRITE (*,2),(WR(I),I=1,NT)
WRITE (*,*) 'WI'
WRITE (*,2),(WI(I),I=1,NT)
2 FORMAT (1X,5E18.11)
WRITE (NOUT,*) IERR
WRITE (NOUT,*) 'WR'
WRITE (NOUT,*) (WR(I),I=1,NT)
WRITE (NOUT,*) 'WI'
WRITE (NOUT,*) (WI(I),I=1,NT)
C
RMIN=1.D12
IJ=1
I1=1
110 DO 60 I=I1,NT
IF (WR(I).LT.RMIN) THEN
RMIN=WR(I)
IANA(IJ)=I
WI(IJ)=WR(I)
ENDIF
60 CONTINUE
WR(IANA(IJ))=1.D17
RMIN=1.D12
IJ=IJ+1
IF(IJ.LE.NT) GO TO 110
C
WRITE (NOUT,*) 'Eigenvalue'
WRITE(NOUT,12) (WI(I),I=1,NT)
C
WRITE (NOUT,*) 'Вывод собственных значений по номеру'
DO 21 K=1,15
WRITE (*,*) 'Inject the number of an eigenvalue?'
READ (*,*) IJ
WRITE (*,*) IJ, WI(IJ)
WRITE (NOUT,*) IJ, WI(IJ)
I2=NT*(IANA(IJ)-1)
DO 22 I=1,NT
I3=I2+I
22 U(I)=E(I3)
CALL NORM1(U,NT)
DO J=1,NT
WRITE (10,121) XR(J),YR(J),U(J)
ENDDO
121 FORMAT (3E10.2)
C
WRITE (NOUT,12) (U(I),I=1,NT)
21 CONTINUE
12 FORMAT (1X,4E18.11)
STOP
END
SUBROUTINE LAMDA0 (C0,C,M,AL,AL1,BE,BE1,B1,B2,T,X)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(M,M),C1(M,M),T(M),X(M)
PI=3.141592653589D0
CALL EIGVAL (C0,C1,M,AL,AL1,BE,BE1,B1,B2,T,X)
C1=-C1
15
CALL DMINV (C1,M,DET,T,X)
CALL DIFAB (C0,M,B1,B2)
DO 1 MU=1,M
PSI=(2.D0*MU-1.D0)*PI/2.D0/M
R=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
DO 1 NU=1,M
1 C0(MU,NU)=C0(MU,NU)/R
C0=C1-C0
RETURN
END
SUBROUTINE DIFAB (D,M,A,B)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
PSIMU=(2.D0*MU-1.D0)*PI/2.D0/M
DO 1 NU=1,M
PSINU=(2.D0*NU-1.D0)*PI/2.D0/M
P=0.D0
DO 2 K=1,M-1
2 P=P+SIN(K*PSIMU)*COS(K*PSINU)/SIN(PSIMU)
1 D(MU,NU)=4.D0*P/M/(B-A)
RETURN
END
REAL*8 FUNCTION Q(X)
IMPLICIT REAL*8 (A-H,O-Z)
Q=0.D0
RETURN
END
REAL*8 FUNCTION R(X)
IMPLICIT REAL*8 (A-H,O-Z)
R=1.D0
RETURN
END
C
SUBROUTINE HMATR2(H,M,N,C0,C,B1,B2)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(1),C(M,M),R(300),C0(M,M)
INTEGER P,LX,MX
PI=3.141592653589D0
DO 4 I=1,M
PSI=(2.D0*I-1.D0)*PI/2.D0/M
4 R(I)=(B2-B1)*COS(PSI)/2.D0+(B1+B2)/2.D0
NM=(N+1)/2
DO 20 NU=1,M
DO 20 MU=1,M
20 C(NU,MU)=C0(NU,MU)
I0=0
DO 1 NU=1,M
DO 1 MU=1,M
DO 1 L=1,NM
I0=I0+1
1 H(I0)=C(NU,MU)/N
NM1=NM-1
DO 2 K=1,NM1
10 DO 5 NU=1,M
DO 5 MU=1,M
C(NU,MU)=C0(NU,MU)
IF(NU.EQ.MU) C(NU,MU)=C(NU,MU)+(K/R(NU))**2
5 CONTINUE
16
12 I0=0
DO 3 NU=1,M
DO 3 MU=1,M
I2=0
DO 3 P=1,NM
I0=I0+1
H(I0)=H(I0)+(2.D0/N)*C(NU,MU)*COS(K*2.D0*PI*I2/N)
3 I2=I2+1
2 CONTINUE
RETURN
END
SUBROUTINE NORM1(Y,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
P=0.D0
DO 1 I=1,N
IF (ABS(Y(I)).GT.P) IP=I
IF (ABS(Y(I)).GT.P) P=ABS(Y(I))
1 CONTINUE
P=Y(IP)
DO 2 I=1,N
2 Y(I)=Y(I)/P
RETURN
END

Примечание. В файле EIGFUN.DAT содержится


собственный вектор матрицы дискретной задачи и сетка в
нужном формате. Собственный вектор выбирается по запросу
номера собственного значения.

§2. Результаты численных расчётов.

Численные расчёты производились с целью проверки методики.


Проводилось сравнение с расчётами по асимптотической формуле [5] для
кольца с внешним радиусом R=1 и малым внутренним радиусом ρ=ε. На
внешней границе задано условие Неймана, а на внутренней условие Дирихле.
Таким образом, при ε → 0 первое собственное значение задачи должно также
стремится к нулю. В [5] для этого случая приведена асимптотическая формула:

+∞
λ (ε ) ~ ∑ λ k (| log ε | −1 )ε k ,
k =0

где λk – мероморфные функции, λ0 = 2π | Ω | −1 t + O(t 2 ), | Ω | − площадь области.


Однако получить хорошего совпадения с нулевым членом асимптотики
не удалось. Видимо из-за крайне медленной сходимости. Совпадение только
при ε=10-6, что или случайно или объясняется фактом, что в этом случае
выпадает первый член асимптотики.
Второй расчёт проводился для круговой области радиуса 1, из которой
вырезан круг радиуса 0.1 с центром в точке 0.2 на действительной оси. На
внешней границе задавалось условие Дирихле, а на внутренней условие
Неймана. Конформное отображение на кольцо осуществляется дробно-
линейной функцией [6, стр. 203]:
17
Расчёты производились на сетках от 5×5 до 40×151, см. ниже:

X1= 0.300000000000000 X2= 0.100000000000000


R= 9.59578760586691 ALFA= 4.94789380293346

N= 5 M= 5

1 6.30384075516804
2 12.5240922198482
3 15.9580110251974
4 22.8614928473457
5 24.1610926979499
6 32.0682184824719
7 43.7446945591614
8 44.6415968019628
9 62.6184858563839
10 83.8491481104204
11 121.068805836460
12 162.573305871365
13 170.933780941740
14 263.383296006460
15 305.427147272978

N= 11 M= 10

1 5.77050661547592
2 14.5686681089652
3 14.6985941074533
4 26.8539395430502
5 26.8940934000276
6 30.6013958851386
7 41.3184064296173
8 43.1082052757943
9 47.9201005203276
10 52.9820506191867
11 57.8680827923321
12 69.0424523885065
18
13 77.2529014654754
14 77.6082138638389
15 89.2746961968013

N= 21 M= 10

1 5.77050732946742
2 14.5684034671894
3 14.6988797083739
4 26.8581200853388
5 26.8941025040953
6 30.6047575432239
7 42.1951609444227
8 42.3913856724706
9 47.8533150055410
10 53.0043515118520
11 60.9338526044798
12 60.9373346675876
13 77.3045028192794
14 77.4658145790727
15 82.6969752385093

N= 31 M= 20

1 5.76449329963725
2 14.5749592609702
3 14.6695662582186
4 26.5377242090849
5 26.5680481284245
6 30.1511120853414
7 41.2022857041910
8 41.3301571565336
9 46.5302787304297
10 50.7321162022981
100 495.102027395843
200 1660.71610392133
300 5164.31766797336
400 16825.2281264273
500 96163.2209909992

N= 41 M= 20

1 5.76449329609502
2 14.5749592623602
3 14.6695662583098
4 26.5377242091606
5 26.5680481287167
6 30.1511120839660
7 41.2022857041488
8 41.3301571564366
9 46.5302787321246
10 50.7321162001148
100 469.322247420829
200 1272.53426125444
300 2900.67854644215
400 6516.04530926094
500 15744.0299389843

N= 41 M= 30

19
1 5.76440204669439
2 14.5747904753512
3 14.6694564757088
4 26.5370193408589
5 26.5673336276894
6 30.1505262830865
7 41.1995819270209
8 41.3273863997590
9 46.5257521628439
10 50.7190107043593
100 438.089300006650
200 949.404613961481
300 1769.83901531329
400 3225.33665710478
500 6302.06615038869

N= 51 M= 30

1 5.76440205021481
2 14.5747904734649
3 14.6694564747013
4 26.5370193399276
5 26.5673336269722
6 30.1505262843316
7 41.1995819271309
8 41.3273864001101
9 46.5257521603382
10 50.7190107070094
100 438.089315905997
200 891.886815184539
300 1504.11130549833
400 2423.98959435721
500 4026.49644426570

N= 61 M= 30

1 5.76440204273043
2 14.5747904768052
3 14.6694564751796
4 26.5370193409362
5 26.5673336273771
6 30.1505262813539
7 41.1995819274330
8 41.3273863995869
9 46.5257521650820
10 50.7190107025159
100 438.089315918242
200 858.247022459029
300 1407.95994950962
400 2162.62731007730
500 3219.10979446937

N= 71 M= 30

1 5.76440204824848
2 14.5747904724130
3 14.6694564749682
4 26.5370193349754
5 26.5673336269089
6 30.1505262883732
20
7 41.1995819267834
8 41.3273864003366
9 46.5257521589958
10 50.7190107049671
100 438.089315902206
200 854.667749741571
300 1362.72972006569
400 2015.13883189700
500 2892.81949051789

N= 81 M= 30

1 5.76440204357959
2 14.5747904786245
3 14.6694564761079
4 26.5370193410119
5 26.5673336282917
6 30.1505262817918
7 41.1995819272539
8 41.3273863992442
9 46.5257521642518
10 50.7190107002435
100 438.089315939268
200 854.667566410578
300 1345.80710894073
400 1943.99275267488
500 2690.78023680276

N= 91 M= 30

1 5.76440206688130
2 14.5747904690065
3 14.6694564746124
4 26.5370193365170
5 26.5673336266959
6 30.1505262928776
7 41.1995819273383
8 41.3273864005616
9 46.5257521543217
10 50.7190107168500
100 438.089315903094
200 854.667566265031
300 1336.75280760447
400 1906.51136160980
500 2605.92730720524

N= 101 M= 30

1 5.76440204802657
2 14.5747904806916
3 14.6694564802356
4 26.5370193386225
5 26.5673336275471
6 30.1505262840265
7 41.1995819285764
8 41.3273863987383
9 46.5257521686629
10 50.7190107033544
100 438.089315951625
200 854.667566265242
21
300 1336.91652611454
400 1878.34599709043
500 2540.05755294514

N= 111 M= 30

1 5.76440205013250
2 14.5747904684326
3 14.6694564761867
4 26.5370193425016
5 26.5673336258238
6 30.1505262697356
7 41.1995819269819
8 41.3273864008377
9 46.5257521547014
10 50.7190107223094
100 438.089315879034
200 854.667566266258
300 1336.91683329429
400 1874.20618892078
500 2508.15702744049

N= 101 M= 40

1 5.76440210757410
2 14.5747911525768
3 14.6694560235128
4 26.5370120410139
5 26.5673295743309
6 30.1504923208563
7 41.1995752439943
8 41.3273782291153
9 46.5257064528378
10 50.7190239516203
100 435.845001932850
200 856.178194896293
300 1301.51827733956
400 1721.46674979217
500 2182.72634222189

N= 151 M= 40

1 5.76440211324461
2 14.5747911366198
3 14.6694560125607
4 26.5370120449611
5 26.5673295924867
6 30.1504923282571
7 41.1995752225500
8 41.3273782291731
9 46.5257064185371
10 50.7190239279168
100 435.845002040277
200 856.178194899004
300 1301.51827732829
400 1715.78405518922
500 2176.93758302320

22
Примечание. Расчёты производились на ПЭВМ Pentium IV с тактовой
частотой 3,00 ГГц и объёмом оперативной памяти 1 Ггб. Время последнего
расчёта на сетке 40×151 около 5 часов 20 минут. Предыдущий расчёт на сетке
40×101 занимает около часа. Остальные расчёты несколько минут. Как видно из
сравнения результатов на двух последних сетках, надёжно с 6-7 знаками после
запятой определяется 300 собственных значений.
Для сетки 30×41 определялись собственные функции. На Фиг. 1 – Фиг.
11 приведены собственные формы для собственных значений 1-10, 100. На Фиг.
12 приведены линии уровня 1-ой собственной формы.
Заключение.
По поводу получения полных версий описанных программ обращайтесь по
электронному адресу: algazinsd@mail.ru или на адрес Института проблем
механики РАН, 119526, Москва, проспект Вернадского д.101, к.1.

Фиг. 1

23
Фиг. 2

24
Фиг. 3

25
Фиг. 4

26
Фиг. 5

27
Фиг. 6

28
Фиг. 7

29
Фиг. 8

30
Фиг. 9

31
Фиг. 10

32
Фиг. 11

33
0.80

0.60

0.95
0.90
0.40 0.85
0.80
0.75
0.70
0.20 0.65
0.60
0.55
0.50
0.00
0.45
0.40
0.35
-0.20 0.30
0.25
0.20
0.15
-0.40 0.10
0.05
0.00
-0.05
-0.60

-0.80
-0.60 -0.40 -0.20 -0.00 0.20 0.40 0.60

Фиг. 12

34
Литература.

1. Алгазин С. Д. Численные алгоритмы без насыщения в классических


задачах математической физики. М.: Научный Мир, 2002, 155 стр.

2. Бабенко К. И., Введенская Н. Д., Орлова М. Г. О стационарном


обтекании кругового цилиндра вязкой жидкостью// Препринт №41 за
1969 г., ИПМатем, АН СССР, 36 стр.

3. Волевич Л. Р., Казанджан Э. П. Численный метод конформного


отображения двусвязной области на круговое кольцо // Препринт №
82 за 1993 г., ИПМатем им. М. В. Келдыша РАН, 25 стр.

4. Волевич Л. Р., Казанджан Э. П. Численный метод конформного


отображения кругового кольца на двусвязную область // Препринт №
101 за 1994 г., ИПМатем, им. М. В. Келдыша РАН, 19 стр.

5. Мазья В. Г., Назаров С. А., Пламеневский Б. А. Асимптотические


разложения собственных чисел краевых задач для оператора Лапласа
в областях с малыми отверстиями // Изв. АН СССР, сер. Мат., Т. 48,
№2, 1984. С. 347-371.

6. Лавр ки В. И. , Савенко в В. Н. Справочник по конформным


отображениям. Киев, «Наукова Думка», 1970, 252 с.

Алгазин Сергей Дмитриевич

Численные алгоритмы классической матфизики.

XII. О вычислении собственных чисел оператора Лапласа в двусвязной


области.

Подписано к печати 14.03.2006. Заказ № 5 -2006. Тираж 50 экз.


________________________________________________________

Отпечатано на ризографе Института проблем механики РАН


119526, Москва, пр-т Вернадского, 101

35

Вам также может понравиться