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

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

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

С. Д. Алгазин

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


МАТФИЗИКИ.
XIV. Численный алгоритм без насыщения для решения уравнения
теплопроводности.

Препринт № 816

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

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


теплопроводности. Предполагается, что оператор Лапласа имеет дискретный,
действительный спектр, а соответствующая матрица дискретного оператора
Лапласа имеет полную систему собственных векторов. Для примера
рассмотрено одномерное уравнение теплопроводности, но в процессе
изложения показано, что размерность здесь несущественна. Приводятся тексы
программ на Фортране-77.

The summary.

The numerical algorithm without saturation for a heat conduction equation Is


considered. It is supposed, that the functional of Laplace has a discrete, real spectrum,
and the appropriate matrix of the discrete functional of Laplace has a complete set of
eigenvectors. For an example the one-dimensional heat conduction equation is
viewed, but during an enunciating is shown, that dimensionality here is incidental.
Texts of programs on Fortran-77 are given.

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


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

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

2
Введение. В [1] рассмотрены численные алгоритмы без
насыщения для решения стационарных задач математической
физики. В настоящей работе эти результаты обобщаются на
нестационарные задачи. Численные алгоритмы без насыщения
предложены К. И. Бабенко [2] в начале 70-х годов прошлого века.
Многолетнее применение этих методов к задачам математической
физики автором настоящей работы, доказало их высокую
эффективность. Однако до сих пор рассматривались только
стационарные задачи. В настоящей работе этот пробел восполняется.
Для примера рассмотрено одномерное уравнение теплопроводности,
но по ходу изложения будет показано, что размерность здесь
несущественна.

1. Постановка задачи. В прямоугольнике D = {0 ≤ x ≤ 1, 0 ≤ t


≤ 1 } рассмотрим уравнение теплопроводности:

∂u ( x, t ) ∂ 2u ( x, t )
(1.1) = + f ( x, t ), ( x, t ) ∈ D;
∂t ∂x 2

(1.2) u t =0 = u0 ( x);

(1.3) u x=0 = u x=1 = 0.

Очевидно, что, не нарушая общности можно положить u0(x)≡0.

3
2. Дискретизация. По x приблизим искомую функцию u(x,t)
многочленом: для этого по x выберем сетку, состоящую из m узлов:

1 (2 µ − 1)π
xµ = ( z µ + 1), z µ = cos χ µ , χ µ = , µ = 1,2,..., m,
2 2m

и применим интерполяционную формулу

m
Tm ( x)( x − 1) xqk
(2.1) q( x) = ∑ , qµ = q ( xµ ), z = 2 x − 1.
µ =1 (−1) µ −1
m ( xµ − 1) xµ ( z − z µ )
sin χ µ

Вторую производную по x, входящею в уравнение (1.1), най-


дем дифференцированием интерполяционной формулы (2.1).
По t выберем сетку, состоящую из k узлов:

1 (2ν − 1)π
tν = ( zν + 1), zν = cos χν , χν = , ν = 1,2,..., k ,
2 2k

и также применим интерполяцию многочленом:

k
Tm (t )tqν
(2.2) q (t ) = ∑ .
ν =1 (−1)ν −1
m tν ( z − zν )
sin χν

Величины, входящие в формулу (2.2), определены выше.


Значения первой производной от u(x,t) по t, входящие в левую часть
соотношений (1.1), получим дифференцированием
интерполяционной формулы (2.2).

4
d2
Пусть A матрица дискретного оператора − , тогда
dx 2
обозначив uμν=u(xμ,tν), μ=1,2,…,m; ν=1,2,…,k и получим

∂u ( xµ , t ) m
+ ∑ Aµp u ( x p , t ) = f ( xµ , t ).
∂t p =1

Пусть B – матрица численного дифференцирования по t на


[0,1]. В результате получим:

k m
(2.3) ∑ Bν uµ + ∑ Aµ u ν
q =1
q q
p =1
p p = f µν .

Занумеруем узлы сетки одним индексом по строкам, (т.е.


быстрее всего меняется первый индекс I → (μ,ν)=(ν-1)m+μ. Тогда
получаем дискретную задачу:

(2.4) ( B ⊗ I m + I k ⊗ A)u = f ,

где B – матрица размера k×k – дифференцирование по t; A – матрица


размера m × m - второе дифференцирование по x; Im,Ik – единичные
матрицы; Представим A в виде:
A = ∑ λ p h p , h p2 = h p , h p hl = 0, p ≠ l ⇒ ∑ h p = I m ⇒
p p

B ⊗ ∑ h p + I k ⊗ (∑ λ p h p ) = ∑ ( B + λ p I k ) ⊗ h p ⇒
p p p

5
(2.5) ( B ⊗ I m + I k ⊗ A) −1 = ∑ ( B + λ p I k ) −1 ⊗ h p (см. [1]).
p

Таким образом, решение дискретной задачи (2.3) получим


умножением матрицы (2.5) на вектор правой части. Заметим, что для
построения обратной к (2.3) матрице достаточно обратить m матриц
размера k×k, где k – число узлов интерполяции по времени. Отметим
также, что нигде не использовалась специфика матрицы A, т.е. A –
может быть матрицей двумерной, трёхмерной и любой другой
задачи. Необходимо только, чтобы матрица имела полную систему
собственных векторов и собственные значения были действительны.
3. Численный пример. В качестве численного примера
рассмотрим задачу (1.1) – (1.3) с правой частью:
f(x,t)=(cost+π2sint)sinπx, тогда решение u(x,t)=sintsinπx. Результаты
расчётов на сетках 5×5 и 10×10 представлены ниже:

M = 5 K = 5
Точное решение
0.63594E-01 0.49945E+00 0.82800E+00 0.49945E+00
0.63594E-01
0.54768E-01 0.43013E+00 0.71309E+00 0.43013E+00
0.54768E-01
0.36822E-01 0.28919E+00 0.47943E+00 0.28919E+00
0.36822E-01
0.15718E-01 0.12345E+00 0.20465E+00 0.12345E+00
0.15718E-01
0.18794E-02 0.14760E-01 0.24469E-01 0.14760E-01
0.18794E-02
Приближённое решение
0.63586E-01 0.49947E+00 0.82808E+00 0.49947E+00
0.63586E-01
0.54762E-01 0.43015E+00 0.71316E+00 0.43015E+00
0.54762E-01
0.36817E-01 0.28920E+00 0.47947E+00 0.28920E+00
0.36817E-01
0.15716E-01 0.12345E+00 0.20467E+00 0.12345E+00
0.15716E-01
0.18791E-02 0.14760E-01 0.24470E-01 0.14760E-01
0.18791E-02
Норма матрицы дискретной задачи
BNORM = 0.181397574207915
Норма разности
RNORM = 8.498969703851778E-005

M = 10 K = 10
6
Точное решение
0.16208E-01 0.14279E+00 0.37214E+00 0.63389E+00
0.81295E+00
0.81295E+00 0.63389E+00 0.37214E+00 0.14279E+00
0.16208E-01
0.15679E-01 0.13814E+00 0.36000E+00 0.61322E+00
0.78644E+00
0.78644E+00 0.61322E+00 0.36000E+00 0.13814E+00
0.15679E-01
0.14573E-01 0.12840E+00 0.33462E+00 0.56998E+00
0.73098E+00
0.73098E+00 0.56998E+00 0.33462E+00 0.12840E+00
0.14573E-01
0.12853E-01 0.11323E+00 0.29511E+00 0.50267E+00
0.64466E+00
0.64466E+00 0.50267E+00 0.29511E+00 0.11323E+00
0.12853E-01
0.10569E-01 0.93113E-01 0.24267E+00 0.41335E+00
0.53011E+00
0.53011E+00 0.41335E+00 0.24267E+00 0.93113E-01
0.10569E-01
0.79167E-02 0.69748E-01 0.18177E+00 0.30963E+00
0.39709E+00
0.39709E+00 0.30963E+00 0.18177E+00 0.69748E-01
0.79167E-02
0.52140E-02 0.45937E-01 0.11972E+00 0.20392E+00
0.26153E+00
0.26153E+00 0.20392E+00 0.11972E+00 0.45937E-01
0.52140E-02
0.28219E-02 0.24861E-01 0.64792E-01 0.11037E+00
0.14154E+00
0.14154E+00 0.11037E+00 0.64792E-01 0.24861E-01
0.28219E-02
0.10533E-02 0.92801E-02 0.24185E-01 0.41197E-01
0.52834E-01
0.52834E-01 0.41197E-01 0.24185E-01 0.92801E-02
0.10533E-02
0.11904E-03 0.10488E-02 0.27333E-02 0.46557E-02
0.59709E-02
0.59709E-02 0.46557E-02 0.27333E-02 0.10488E-02
0.11904E-03
Приближённое решение
0.16208E-01 0.14279E+00 0.37214E+00 0.63389E+00
0.81295E+00
0.81295E+00 0.63389E+00 0.37214E+00 0.14279E+00
0.16208E-01
0.15679E-01 0.13814E+00 0.36000E+00 0.61322E+00
0.78644E+00
0.78644E+00 0.61322E+00 0.36000E+00 0.13814E+00
0.15679E-01
0.14573E-01 0.12840E+00 0.33462E+00 0.56998E+00
0.73098E+00
0.73098E+00 0.56998E+00 0.33462E+00 0.12840E+00
0.14573E-01
0.12853E-01 0.11323E+00 0.29511E+00 0.50267E+00
0.64466E+00
0.64466E+00 0.50267E+00 0.29511E+00 0.11323E+00
0.12853E-01
0.10569E-01 0.93113E-01 0.24267E+00 0.41335E+00
0.53011E+00
7
0.53011E+00 0.41335E+00 0.24267E+00 0.93113E-01
0.10569E-01
0.79167E-02 0.69748E-01 0.18177E+00 0.30963E+00
0.39709E+00
0.39709E+00 0.30963E+00 0.18177E+00 0.69748E-01
0.79167E-02
0.52140E-02 0.45937E-01 0.11972E+00 0.20392E+00
0.26153E+00
0.26153E+00 0.20392E+00 0.11972E+00 0.45937E-01
0.52140E-02
0.28219E-02 0.24861E-01 0.64792E-01 0.11037E+00
0.14154E+00
0.14154E+00 0.11037E+00 0.64792E-01 0.24861E-01
0.28219E-02
0.10533E-02 0.92801E-02 0.24185E-01 0.41197E-01
0.52834E-01
0.52834E-01 0.41197E-01 0.24185E-01 0.92801E-02
0.10533E-02
0.11904E-03 0.10488E-02 0.27333E-02 0.46557E-02
0.59709E-02
0.59709E-02 0.46557E-02 0.27333E-02 0.10488E-02
0.11904E-03
Норма матрицы дискретной задачи
BNORM = 0.156331288248615
Норма разности
RNORM = 1.533128068942347E-010

Примечание. Оценка погрешности здесь


тривиальна. Отметим только качественные
особенности. Выше применялась интерполяция
решения многочленами. Известно [2], что так
построенный алгоритм не имеет насыщения, т.е.
автоматически настраивается на гладкость решения
задачи. Для устойчивости метода важно только
величина нормы обратной к матрице дискретной
задачи. Проведённые расчёты показывают, что она
меньше 1.

4. Программы на Фортране.
$objcomment lib:"hceq.lib"
PROGRAM HCEQ1D02
PARAMETER (M=5,K=5,NG=M*K)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(M,M),B(K,K),X(M),Y(M),IANA(M),IANA1(M),LR(K),MR(K)
DIMENSION A1(M,M),B1(M,M),D(M,M),HR(K,K),BS(M,M)
DIMENSION R(NG,NG),F(NG),RES(NG),RES1(NG)
DATA PI/3.141592653589D0/
8
CALL DIFR22 (B,K,0.D0,0.D0,DL)
CALL KRON1 (R,NG,B,HR,K,D,M,X,Y,IANA,IANA1,A1,B1,LR,MR)
I=0
DO NU=1,K
T1=(1.D0+COS((2.D0*NU-1.D0)*PI/2.D0/K))/2.D0
DO MU=1,M
X1=(1.D0+COS((2.D0*MU-1.D0)*PI/2.D0/M))/2.D0
I=I+1
F(I)=COS(T1)*SIN(PI*X1)+PI**2*SIN(T1)*SIN(PI*X1)
RES(I)=SIN(T1)*SIN(PI*X1)
ENDDO
ENDDO
DO I=1,NG
RES1(I)=0.D0
DO J=1,NG
RES1(I)=RES1(I)+R(I,J)*F(J)
ENDDO
ENDDO
CALL NORM(NG,RES-RES1,RNORM)
WRITE (*,*) 'RNORM =',RNORM
OPEN (4,FILE='NOUT')
WRITE (4,*) 'M = ',M,'K = ',K
WRITE (4,*) 'Точное решение'
WRITE (4,12) RES
12 FORMAT(1X,5E15.5)
WRITE (4,*) 'Приближённое решение'
WRITE (4,12) RES1
CALL NMATR(NG,R,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
WRITE (4,*) ' Норма матрицы дискретной задачи'
WRITE (4,*) 'BNORM = ',BNORM
WRITE (4,*) ' Норма разности'
WRITE (4,*) 'RNORM = ',RNORM
STOP
END
SUBROUTINE NMATR (N,A,BNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N)
BNORM = 0.D0
DO 1 I=1,N
C=0.D0
DO 2 J=1,N
2 C=C+ABS(A(I,J))
IF (C.GT.BNORM) BNORM=C
1 CONTINUE
RETURN
END
SUBROUTINE NORM(N,Y,RNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
RNORM=0.D0
DO 1 J=1,N
IF(ABS(Y(J)).GT.RNORM) RNORM=ABS(Y(J))
1 CONTINUE
RETURN
END

SUBROUTINE SPEKTR1 (D,K,X,Y,IANA,IANA1,A,B)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(K,K),A(K,K),B(K,K),IANA(K),X(K),Y(K),IANA1(K)
9
CALL DIFR2 (D,K,0.D0)
CALL ELMHES (K,K,1,K,D,IANA)
CALL ELTRAN (K,K,1,K,D,IANA,A)
CALL HQR2 (K,K,1,K,D,X,Y,A,IERR)
CALL SORT(X,Y,K,IANA)
CALL DIFR2 (D,K,0.D0)
DO 1 I=1,K
DO 1 J=1,I
P=D(I,J)
D(I,J)=D(J,I)
1 D(J,I)=P
CALL ELMHES (K,K,1,K,D,IANA1)
CALL ELTRAN (K,K,1,K,D,IANA1,B)
CALL HQR2 (K,K,1,K,D,X,Y,B,IERR)
CALL SORT(X,Y,K,IANA1)
DO 2 I=1,K
P=0.D0
I1=IANA (I)
I2=IANA1(I)
DO 3 J=1,K
3 P=P+A(J,I1)*B(J,I2)
DO 4 J=1,K
4 A(J,I1)=A(J,I1)/P
2 CONTINUE
RETURN
END
SUBROUTINE KRON1 (R,NG,H,HR,NT,D,K,X,Y,IANA,IANA1,A,B,LR,MR)
IMPLICIT REAL*8 (A-H,O-Z)
INTEGER*4 Q
DIMENSION R(NG,NG),H(NT,NT),HR(NT,NT),LR(NT),MR(NT)
DIMENSION D(K,K),A(K,K),B(K,K),IANA(K),X(K),Y(K),IANA1(K)
CALL SPEKTR1 (D,K,X,Y,IANA,IANA1,A,B)
DO 4 I=1,NG
DO 4 J=1,NG
4 R(I,J)=0.D0
DO 2 Q=1,K
IQ=IANA1(Q)
IQ1=IANA(Q)
DO 3 I=1,NT
DO 3 J=1,NT
HR(I,J)=H(I,J)
IF(I.EQ.J) HR(I,I)=HR(I,I)-X(IQ)
3 CONTINUE
CALL DMINV (HR,NT,DET,LR,MR)
DO 5 I=1,K
DO 5 J=1,K
5 D(I,J)=A(I,IQ1)*B(J,IQ)
CALL KRDIV1 (R,HR,D,NG,NT,K)
2 CONTINUE
RETURN
END

SUBROUTINE KRDIV1 (R,H,D,NG,NT,K)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION R(NG,NG),H(NT,NT),D(K,K)
DO 1 I=1,NT
DO 1 J=1,NT
DO 1 MU=1,K
I1=(I-1)*K+MU
DO 1 NU=1,K
10
J1=(J-1)*K+NU
1 R(I1,J1)=R(I1,J1)+H(I,J)*D(MU,NU)
RETURN
END

SUBROUTINE DIFR22(DR,M,UM1,EPS,DL)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DR(M,M),DL(M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.*MU-1.)*PI/2./M
RM=0.5*(EPS+1.)+COS(TM)*0.5*(1.-EPS)
DL(MU)=(-1)**(M+MU+1)*M*2.*UM1/SIN(TM)/(1.-EPS)
DO 1 NU=1,M
TN=(2.*NU-1.)*PI/2./M
RN=0.5*(EPS+1.)+COS(TN)*0.5*(1.-EPS)
P=1.D0/(RN-EPS)/M
DO 2 L=1,M-1
2 P=P+4.*COS(L*TN)*L*SIN(L*TM)*(RM-EPS)/
/(1.-EPS)/SIN(TM)/(RN-EPS)/M+2.*COS(L*TN)*COS(L*TM)/(RN-EPS)/M
1 DR(MU,NU)=P
RETURN
END

SUBROUTINE DIFR2 (DR,M,EPS)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DR(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.*MU-1.)*PI/2./M
RM=0.5*(EPS+1.)+COS(TM)*0.5*(1.-EPS)
DO 1 NU=1,M
TN=(2.*NU-1.)*PI/2./M
RN=0.5*(EPS+1.)+COS(TN)*0.5*(1.-EPS)
P=1.D0/(RN-1.D0)/(RN-EPS)
DO 2 L=1,M-1
TL1=L*SIN(L*TM)/SIN(TM)
TL2=-L**2*COS(L*TM)/SIN(TM)**2+L*SIN(L*TM)*COS(TM)/SIN(TM)**3
2 P=P+COS(L*TN)*(TL2*(2./(1.-EPS))**2*(RM-1.)*(RM-EPS)+
+(4./(1.-EPS))*TL1*(2.*RM-EPS-1.)+2.*COS(L*TM))/(RN-1.)/(RN-EPS)
1 DR(MU,NU)=2.*P/M
RETURN
END

Примечание.

1. Вычисление собственных значений матрицы


производится подпрограммами пакета EISPACK:
ELMHES, ELTRAN, HQR2. Эти подпрограммы
доступны в Интернет по адресу:
htpp://www.netlib.org/eispack/.

2. SUBROUTINE SORT(Y,X,N,INT) Сортировка массива


Y. Подпрограмма запоминает в массиве INT
11
номера элементов массива Y в порядке
возрастания модулей элементов, т.е. INT(1)
содержит минимальный по модулю элемент,
INT(2) следующий по величине модуля элемент и
т.д. X- рабочий массив длины N.

3. SUBROUTINE KRDIV1 (R,H,D,NG,NT,K) Подпрограмма


кронекеровского произведения матриц. R – результат
(матрица размера NG×NG); H – первый сомножитель
(матрица размера NT×NT); D- второй сомножитель
(матрица размера K×K). Примечание. Результат
прибавляется к тому, что уже есть в R. Поэтому перед
использованием этой программы нужно обнулить R.
4. SUBROUTINE SPEKTR (D,K,AL,BL,X,Y,IANA,IANA1,A,B) D – массив
K×K, который служит для вычисления матрицы D. На выходе
не сохраняется;K – размер матрицы D; AL, BL – a и b границы
интервала на котором рассматривается задача; X, Y-
массивы длины K на выходе содержат действительную и
мнимую часть собственных значений (если Y не
тождественно равно нулю – ошибка); IANA – одномерный
массив длины K, который содержит в i-ом элементе номер i-
го собственного значения матрицы D в порядке возрастания;
IANA1 – тоже, что и IANA но для матрицы D'; A – матрица
K×K, которая содержит по столбцам собственные векторы
матрицы D. Для того, чтобы их выбрать в порядке
возрастания собственных значений нужно воспользоваться
массивом IANA; B – то же, что и A для матрицы D';
Требуемые подпрограммы: DIFR2, SORT, ELMHES,
ELTRAN,HQR2.

12
5. SUBROUTINE KRON1 (R,NG,H,HR,NT,D,K, X,Y,IANA,IANA1,A,B,LR,MR)
R – результат (матрица размера NG×NG); H – входной массив

(матрица NT×NT); HR – рабочий массив (матрица NT×NT); D –


массив K×K, который служит для вычисления матрицы D. На
выходе не сохраняется; K – размер матрицы D; X, Y- массивы
длины K на выходе содержат действительную и мнимую часть
собственных значений (если Y не тождественно равно нулю –
ошибка); IANA – одномерный массив длины K, который
содержит в i-ом элементе номер i-го собственного значения
матрицы D в порядке возрастания; IANA1 – тоже, что и IANA
но для матрицы D';A – матрица K×K, которая содержит по
столбцам собственные векторы матрицы D. Для того, чтобы их
выбрать в порядке возрастания собственных значений нужно
воспользоваться массивом IANA; B – то же, что и A для
матрицы D'; LR, MR – рабочие массивы длины NT. Используются
подпрограммы: SPEKTR, DMINV, KRDIV1. DMINV – вариант с
двойной точностью подпрограммы MINV [3].
6. SUBROUTINE DIFR22 (DR,M,UM1,EPS,DL)
Первое дифференцирование по r на отрезке [0,1]
удовлетворяющее однородному краевому условию при r=0
(UM1=0., EPS=0., DL – не используется).
7. DIFR1 и DIFR2 – первое и второе дифференцирование по r,
удовлетворяющее однородным краевым условиям на отрезке
[ε,1]
Заключение. По поводу получения полных версий
описанных программ обращайтесь по электронному адресу:
algazinsd@mail.ru или на адрес Института проблем механики РАН,
119526, Москва, проспект Вернадского д.101, к.1.

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

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


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

2. Бабенко К. И. Основы численного анализа. М.: Наука, 1986.


744 с.; Издание второе, исправленное и дополненное, под
редакцией А. Д. Брюно. Москва-Ижевск, РХД, 2002. 847 с.

3. Сборник научных программ на фортране. Выпуск 2.


Матричная алгебра и линейная алгебра. М.: Статистика, 1974.

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

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

XIV. Численный алгоритм без насыщения для решения уравнения


теплопроводности.

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


________________________________________________________

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


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

14