3 Решение задачи с помощью неявной разностной схемы
В неявной разностной схеме для получения решения сеточной функции на последующем слое необходимо решать систему алгебраических уравнений специального вида. В данной задаче аппроксимацию дифференциальных операторов проведём по следующим шаблонам:
3.1 Аппроксимация дифференциального уравнения
Для сведения задачи к явной разностной схеме используем T – образный пятиточечный шаблон.
Получаем конечно-разностную систему:
Обозначим =/h и выразим U(i,j+1) через остальные значения сеточной функции, входящие в уравнение:
(1)
Уравнение (1) должно выполняться для всех внутренних узлов сетки. Для того чтобы система стала полностью определенной, необходимо дополнить ее уравнениями, получаемыми из аппроксимации краевых и начальных условий.
3.2 Аппроксимация 1-го начального условия.
(2)
3.3 Аппроксимация 1-го граничного условия.
U(0,j)=0, (3)25
3.4 Аппроксимация 2-го граничного условия.
Для аппроксимирования 2-го граничного условия:
Порядок аппроксимации о(h2)
3.5 Аппроксимация 2-го начального условия.
Для более точного аппроксимирования 2-го начального условия разложим U(x, t) в окрестности точки (x,0) по формуле Тейлора:
Используя 1-ое и 2-ое начальные условия, переходим к конечным разностям:
(4)
Порядок аппроксимации о(2)
Перепишем в виде, удобном для применения метода прогонки:
(5)
Получили систему уравнений:
U(0,j)=0
3.5Вычисления прогоночных коэффициентов
Сначала найдем U(i,j) на слое j=1. Определим прогоночные коэффициенты. Учитывая 1-ое граничное условие и уравнение (5) получаем:
Теперь вычислим граничные прогоночные коэффициенты:
Методом прогонки находим U(i,1) где i=1...m ;
Теперь зная значения j=0,1 находим U(i,j ) где j=2...n.
Используя уравнение (1) находим прогоночные коэффициенты:
Теперь вычислим граничные прогоночные коэффициенты:
Схема устойчива, если коэффициенты удовлетворяют условию:
Ci Ai + Bi
Методом прогонки находим U(i, j) где i=1..m, j=2..n. Текст программы в среде Matlab приведен в Приложении (стр.10). Поверхность функции являющейся решением нашего дифференциального уравнения изображена в Приложении (стр.15).
Приложение: Неявная разностная схема:
function W=ann(M, N);
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)=20*sin(3*pi*h*i/4);
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)=20*sin(3*pi*h*i/4);
end;
%--------2) Определение граничных прогоночных коэффициентов---------
a(M)=1; b(1)=0; c(1)=1; c(M+1)=3*pi*h/4+1;
f(1)=0; f(M+1)=0;
%------------ определение 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)=1; b(1)=0; c(1)=1; c(M+1)=3*pi*h/4+1;
%------------ определение 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)=0;
for i=1:M-1,
f(i+1)=2*U(i+1,j)-U(i+1,j-1);
end;
f(M+1)=0;
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;
mesh(U);
W=U;
pause;
clear;
clc;