2.5 Аппроксимация 2-го граничного условия.
Разложим U(x,y) в окрестности точки (0,y) по формуле Тейлора:
![]()
Выразим
из этого уравнения
и подставим в него значение
:
(8)
где
![]()
Теперь возьмем j = 0 и с учетом получим (4):
(8*)
Чтобы
найти
подставим в конечно-разностную систему(3*)
значения i
= 0 и j
= 0.Опять же
учтем равенство (4):
(8**)
ищется
из аппроксимации 2-ого начального условия
(5*),
путем подстановки в него i
=0:
![]()
Воспользуемся
условием (4) и учтем, что
.
Тогда в итоге получим:
![]()
Подставим этот результат в выражение (8**):
![]()
Подставляя
в выражение (8*)
получаем:
![]()
или
![]()
Таким образом, теперь у нас есть все необходимые данные, чтобы воспользоваться выражением (8) при j = 1,..,N
Порядок
аппроксимации данной разностной схемы
![]()
Устойчивость решения.
Для уравнений гиперболического типа метод спектральных гармоник приводит к следующему условию устойчивости:
(9)
т.е. если это условие устойчивости не будет выполнено, то в процессе рекуррентного решения возможно накапливание ошибок от слоя к слою.
Отсюда,
в частности, получаем для явной схемы
(
)
условие устойчивости Куранта-Леви:
.
Итак, у нас
при
j =0
и j =1
определены. Теперь включается рекуррентная
процедура описываемая уравнением (3)
и вычисляется
для всехi=1,2,...,M-1,
для каждого фиксированного j=2,...,N-1.
Текст программы в среде Matlab приведен
в “Приложении”. Графики функции,
являющейся решением нашего дифференциального
уравнения изображены в “Приложении”.
function yav(M,N)
h=1/M;
h2=h^2;
t=1/N;
t2=t^2;
g2=t2/h2;
U=zeros(M+1,N+1);
for j=0:N
U(M+1,j+1)=j*t;
end;
for i=0:M-1
U(i+1,2)=t+5*t2/(1+h2*i^2);
end;
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)+t2*10/(1+h2*(i^2)+t2*(j^2));
end;
U(1,j+2)=2*g2*U(2,j+1)+2*U(1,j+1)*(1-g2)-U(1,j)+10*t2/(1+(j*t)^2);
end;
contour(U,11);pause;
y=zeros(M+1,N+1);
for i=1:M+1,
for j=0:N-1,
y(i,j+1)=U(i,1+j);
end;
end;
i=1:1:M+1;
plot(i,y);
pause;
mesh(U);clc;
for i=0:M,
for j=0:N,
b(i+1,j+1)=U(1+i,1+j);
end;
end;
b



NEYAV.M
% Решение краевой задачи с применением НЕЯВНОЙ разностной схемы
function neyav(M,N)
h=1/M;
t=1/N;
u=zeros(M+1,N+1);
h2=h^2;
t2=t^2;
g2=t2/h2;
for i=0:M,
u(i+1,1)=0;
end
A=zeros(M,1);
C=zeros(M+1,1);
B=A;A1=A;F=C;B1=C;
%------------ЭТАП ЗАПОЛНЕНИЯ МАТРИЦЫ U(x,y) 2-ым НАЧАЛЬНЫМ УСЛОВИЕМ----
%------------1) Определение прогоночных коэффициентов-------------------
for i=1:M-1, A(i)=g2/2; B(i+1)=g2/2; C(i+1)=1+g2;
F(i+1)=t+5*t2/(1+h2*i^2);
end;
%------------2) Определение граничных прогоночных коэффициентов---------
A(M)=0; B(1)=g2; C(1)=1+h*g2+g2; C(M+1)=1;
F(1)=t+5*t2; F(M+1)=t;
%------------ ОПРЕДЕЛЕНИЕ U(i,2) МЕТОДОМ ПРОГОНКИ---------------
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,y) ---------------------------
%------------1) Определение прогоночных коэффициентов-------------------
for i=1:M-1, A(i)=g2; B(i+1)=g2; C(i+1)=1+2*g2; end
%------------2) Определение граничных прогоночных коэффициентов---------
A(M)=0; B(1)=2*g2; C(1)=1+2*h*g2+2*g2; F(1)=t2*(t+5*t2);
C(M+1)=1;
%------------ ОПРЕДЕЛЕНИЕ U(i,j) МЕТОДОМ ПРОГОНКИ---------------
A1(1)=B(1)/C(1); B1(1)=F(1)/C(1);
for j=2:N+1,
for i=1:M-1,
F(i+1)=2*u(i+1,j)-u(i+1,j-1)+10*t2/(1+h2*i^2+t2*j^2);
end;
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;
F(M+1)=j*t;
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,15);pause;
for j=0:N,
i=1:1:M+1;
u1=u(i,j+1)
plot(i,u1),pause;
hold on
end;hold off
mesh(u);
Результаты программы при шаге 0.1:



Значения U(x,y)
Столбцы с 0-го по 5-ый:
