- •Московский Государственный Институт Электронной Техники
- •2.1 Аппроксимация дифференциального уравнения
- •2.2 Аппроксимация 1-го начального условия.
- •2.3 Аппроксимация 1-го граничного условия.
- •2.4 Аппроксимация 2-го начального условия.
- •Решение задачи с помощью неявной разностной схемы.
- •3.6 Вычисления прогоночных коэффициентов
- •Тексты программ. Явная схема.
- •Результаты работы.
- •Неявная схема
- •Список использованной литературы :
Решение задачи с помощью неявной разностной схемы.
Рассмотрим снова краевую задачу . Для аппроксимации уравнения используем Т-образный пятиточечный шаблон . Уравнение аппроксимируется следующими уравнениями :
3.1 Аппроксимация дифференциального уравнения
![]()
Обозначим
и
запишем(1)
к виду удобному для применения метода
прогонки:

3.2 Аппроксимация 1-го начального условия
(3)
3.3 Аппроксимация 1-го граничного условия
(4)
3.4 Аппроксимация 2-го начального условия
Для
более точного аппроксимирования 2-го
начального условия разложим
в
окрестности точки
по
формуле Тейлора и используя 1-ое и
2-ое начальное условия перейдем к
конечным разностям:
(5)
Эта
формула отличается от аналогичной для
явной схемы тем, что аппроксимация
разностной производной второго порядка
по
производится на первом слое, а не на
нулевом. Запишем(5)
к виду удобному для применения метода
прогонки:
(6)
Аппроксимация 2-го граничного условия.
При
![]()
(7)
При
![]()
![]()
3.6 Вычисления прогоночных коэффициентов
Сначала
найдем
на слое
.
Определим прогоночные коэффициенты.
Учитывая 1-ое граничное условие и уравнение (6) получаем:
ai
= bi
=
![]()
Ci
= 1 +
![]()
fi
=
![]()
b0
= 0, C0
= 1, f0
=
![]()
Теперь вычислим граничные прогоночные коэффициенты
aM
=
,
CM
= 1+
,
fM
=
.
Методом
прогонки находим
где
;
Теперь
зная значения
находим
где![]()
Используя уравнение (2) находим прогоночные коэффициенты:
ai
= bi
=
![]()
Ci
= 1 +
![]()
fi = 2Ui,j - Ui,j-1
b0
= 0, C0
= 1, f0
=
.
Теперь вычислим граничные прогоночные коэффициенты
aM
=
,
CM
= 1+
,
fM
=
.
Методом
прогонки находим
где
;
Тексты программ. Явная схема.
clear
%----------------Число разбиений по осям-------------
M=50; N=55;
%------------------Вычисление шага сетки-------------
h=1/M; t=1/N;
%--------------------Константы-----------------------
if t>h,clc,for i=1:10,disp(' ');,end;
disp(' Возможна неустойчивость!!!');
disp(' (Не выполнено условие Куранта-Леви:t<=h)!!!');
pause,end;,g=(t/h)^2;
u=zeros(M+1,N+1);
g=t/h;
g2=g^2;
t2=t^2;
h2=h^2;
%------------первое начальное условие
for i=0:M, u(i+1,1)=9*sin(5*pi*i*h/2); end
%------------первое граничное условие
for j=1:N, u(1,j+1)=sin(5*pi*j*h/2); end
%%------------заполнение матрицы
for i=1:M-1, u(i+1,2)=9*sin(5*pi*i*h/2)+5*(pi/2)*t*cos(5*pi*i*h/2)+(t2/2)*((u(i,1)-2*u(i+1,1)+u(i+2,1))/h2); end
u(M+1,2) =g2*(u(M,1)-u(M+1,1))+9;
for j=1:N-1,
for i=1:M-1,
u(i+1,j+2)=2*(1-g2)*u(i+1,j+1)+g2*(u(i,j+1)+u(i+2,j+1))-u(i+1,j);
end;
u(M+1,j+2) =2*(1-g2)*u(M+1,j+1)-u(M+1,j)+2*g2*u(M,j+1)-5*h*pi*sin(5*pi*t*j/2)*g2;
end;
%-------------------построение графиков-----------
contour(u,40);pause;
mesh(u);pause;
for t=1:60:360
view(t,50);
pause;
end
Неявная схема.
%------ определение числа разбиений по осям x, t -----
M=50; N=60;
%--- определение шагов сетки по оси x или t
h=1/M; t=1/N;
%----------- определение рабочих констант ----------
u=zeros(M+1,N+1);
h2=h^2; t2=t^2; g2=t2/h2;
%-----заполнение матрицы U(x,t) 1-ым начальным условием -
for i=0:M, u(i+1,1)=9*sin(5*pi*i*h/2); end
A=zeros(M,1);C=zeros(M+1,1);B=A;A1=A;F=C;B1=C;
%--- этап заполнения матрицы U(x,t) 2-ым начальным условием
%----------1) Определение прогоночных коэффициентов---------
for i=1:M-1, A(i)=g2/2; B(i+1)=g2/2; C(i+1)=1+g2; F(i+1)=9*sin(5*pi*i*h/2)+t*5*(pi/2)*cos(5*pi*i*h/2);
end;
%-----2) Определение граничных прогоночных коэффициентов----
A(M)=g2; B(1)=0; C(1)=1; C(M+1)=1+g2;
F(1)=sin(5*pi*t/2); F(M+1)=9*sin(5*pi*M*h/2)+t*5*(pi/2)*cos(5*pi*M*h/2);
%------------ определение U(i,1) методом прогонки ---------
A1(1)=B(1)/C(1); B1(1)=F(1)/C(1);
for i=2:M
A1(i)=B(i)/(C(i)-A(i-1)*A1(i-1));
B1(i)=(F(i)+A(i-1)*B1(i-1))/(C(i)-A(i-1)*A1(i-1));
end;
B1(M+1)=(F(M+1)+A(M)*B1(M))/(C(M+1)-A(M)*A1(M));
u(M+1,2)=B1(M+1);
for i=M:-1:1,
u(i,2)=A1(i)*u(i+1,2)+B1(i);
end;
%------------ этап заполнения матрицы U(x,t) --------------
%-----------1) Определение прогоночных коэффициентов-------
for i=1:M-1, A(i)=g2; B(i+1)=g2; C(i+1)=1+2*g2; end
%-------2) Определение граничных прогоночных коэффициентов--
A(M)=2*g2; B(1)=0; C(1)=1; C(M+1)=1+2*g2;
%------- определение U(i,j) методом прогонки -------
A1(1)=B(1)/C(1);
for i=2:M,
A1(i)=B(i)/(C(i)-A(i-1)*A1(i-1));
end;
for j=2:N,
F(1)=sin(5*pi*j*t/2);
for i=1:M-1,
F(i+1)=2*u(i+1,j)-u(i+1,j-1)+8*t2*(t2*j^2+h2*i^2);
end;
F(M+1)=2*u(M+1,j)-u(M+1,j-1);
B1(1)=F(1)/C(1);
for i=2:M,
B1(i)=(F(i)+A(i-1)*B1(i-1))/(C(i)-A(i-1)*A1(i-1));
end;
B1(M+1)=(F(M+1)+A(M)*B1(M))/(C(M+1)-A(M)*A1(M));
u(M+1,j+1)=B1(M+1);
for i=M:-1:1,
u(i,j+1)=A1(i)*u(i+1,j+1)+B1(i);
end;
end;
contour(u,40);
pause;
mesh(u);
pause;
for t=1:60:360
view(t,50);
pause;
end
