- •Московский Государственный Институт Электронной Техники
- •1.2 Порядок работы.
- •2. Выполнение работы.
- •2.1. Классификация краевой задачи и её физический смысл
- •2.2. Решение задачи с помощью явной разностной схемы
- •2.3. Решение задачи с помощью неявной разностной схемы
- •2.4. Анализ полученных данных
- •3. Список литературы
2.3. Решение задачи с помощью неявной разностной схемы
Д
ля
решения задачи с применением неявной
разностной схемы воспользуемся
Т-образным шаблоном, изображенным на
рисунке 4. По данному шаблону составим
следующую двухслойную схему:
Y
(10)
Перепишем данную схему в виде, удобном
для дальнейших вычислений:
(10’)
![]()
Рисунок 4. X
В
данной схеме написано меньше уравнений
чем имеется неизвестных U.
Недостающие уравнения находим из
начальных условий. Уравнение для
непосредственно получаем из 1-го граничного условия:
![]()
Значения функции на нулевом слое находим из 1-го начального условия:
![]()
Для нахождения значений функции на 1-ом слое воспользуемся уравнением,
полученным из аппроксимации 2-го начального условия и основного уравнения:
(11)
Для нахождения оставшихся уравнений аппроксимируем 2-е граничное условие
аналогично тому, как это делалось при решении с помощью явной схемы. Разложим U(x,y) в окресности точки (1, y) по формуле Тейлора (выражение (*)). Воспользовавшись 2-м граничным условием и основным уравнением (10),
перейдя к конечным разностям, получим:
.
Выражая
отсюда
,
и принимая j+1:=j,
получим:
(12).
Из выражения (12) при j=1 получим:
(13).
Из основного уравнения (10) при i=M, j=0 получим
(14).
Из 2-го начального условия (11) при i=M-1:
(15).
Подставляя вместо
правой части (14) левую часть (15), выражая
,
подставляя полученное выражение в (13), получим:
(16).
Таким образом, сформирована система уравнений, позволяющая найти, зная
начальные условия (N+1) неизвестную.
для
нулевого слоя:
;
для
1-го слоя :

для
j=2,...,N-1 :
Полученные системы решаются методом прогонки для каждого фиксированного слоя.
Рассмотрим
теперь порядок аппроксимации, который
обеспечивает данная разностная схема.
Погрешность, с которой аппроксимируется
функция, равна
.
1-ое
граничное и 1-ое начальное условия были
аппроксимированы точно. Остальные
начальные и граничные условия были
аппроксимированны с погрешностями
и
.
Следовательно, погрешность метода -
.
Текст программы в среде MatLab и графики решения заданного дифференциального уравнения приведены ниже.
Текст программы
%------------------- Неявная схема ----------------------------
clc;
clear;
%------------------- Шаг по оси X -----------------------------
M=input('Введите число шагов по оси X: ');
h=1/(M-1);
if ((M<2) | (M>90))
return
end
h = 1/(M-1);
fprintf('Шаг по оси X: %g \n', h);
%------------------- Шаг по оси Y -----------------------------
N=input('Введите число шагов по оси Y: ');
t=1/(N-1);
if ((N<2) | (N>90))
return
end
h = 1/(N-1);
fprintf('Шаг по оси Y: %g \n', t);
%------------------- Задание матрицы решения ------------------
U=zeros(M,N);
g=t/h;
%------------------- Вычисление значений на нулевом слое ------
for i=0:M-1
U(i+1,1)=20*sin((3*pi/4)*i*h);
end;
%------------------- Задание начальных условий ----------------
for j=0:N-1
U(1,j+1)=0;
end;
%------------------- Рабочие данные ---------------------------
A=zeros(M); % Матрица коэффициентов левой части системы
B=zeros(M,1); % Массив коэффициентов правой части системы
Y=zeros(M,1); % Матрица решений на фиксированном слое
a=zeros(M-1,1); % Массив коэффициентов метода прогонки
b=zeros(M-1,1); % Массив коэффициентов метода прогонки
%------------------- Основной цикл вычислений ----------------------
for j=2:N
%------------------- Вычисление коэффициентов системы на 1-ом слое -
if j==2
B(1)=0;
for i=2:M-1
B(i)=20*sin(3*pi*(i-1)*h/4);
A(i,i)=(1+g^2);
A(i,i-1)=-(g^2)/2;
A(i,i+1)=A(i,i-1);
end;
A(1,1)=1;
A(1,2)=0;
A(M,M-1)=0;
A(M,M)=1;
B(M)=((g^2))*U(M-1,1)-U(M,1)*((g^2)+3*pi*h*(g^2)/4-1);
%------------------- Вычисление коэффициентов системы на остальных слоях
else
B(1)=0;
for i=2:M-1
B(i)=2*U(i,j-1)-U(i,j-2);
A(i,i)=1+2*(g^2);
A(i,i-1)=-(g^2);
A(i,i+1)=A(i,i-1);
end;
A(1,1)=1;
A(1,2)=0;
A(M,M-1)=0;
A(M,M)=1;
B(M) = (2*(g^2))*U(M-1,j-1)-(2*(g^2)*(1+3*pi*h/4)-2)*U(M,j-1)-U(M,j-2);
end;
%------------------ Прямой ход прогонки ----------------------------
a(1)=-A(1,2)/A(1,1);
b(1)=B(1)/A(1,1);
for i=2:M-1
a(i)=-A(i,i+1)/(A(i,i)+(A(i,i-1)*a(i-1)));
b(i)=(B(i)-A(i,i-1)*b(i-1))/(A(i,i)+(A(i,i-1)*a(i-1)));
end;
%------------------ Обратный ход прогонки ----------------------------
Y(M)=(B(M)-(A(M,M-1)*b(M-1)))/(A(M,M)+(A(M,M-1)*a(M-1)));
for k=1:M-2
i=M-k;
Y(i)=(a(i)*Y(i+1))+b(i);
end;
%------------------ Запись значений на слое в матрицы результата -----
U(:,j)=Y;
end;
%------------------ Вывод результата ---------------------------------
% Просмотр в различных ракурсах
for p=1:10:360
mesh(U,[p,30]);
pause;
end;
x=0:h:1;
y1=0:t:1;
v=[-20:3:20];
for i=1:M
for j=1:N
m(N+1-j,i) = U(i,j);
end
end
%----------------------- Вывод линий уровня ------------------------
contour(m,v,x,y1)
grid
xlabel('X');
ylabel('Y');
pause
%----------------------- Отображение матрицы результата -------------
disp(U)
pause
clc;
Матрица решения при N=10 и M=10.
0 0 0 0 0 0 0 0 0 0
5.1764 5.0058 4.5267 3.7890 2.8559 1.7988 0.6927 -0.3884 -1.3767 -2.2138
10.0000 9.6705 8.7448 7.3195 5.5163 3.4736 1.3365 -0.7520 -2.6603 -4.2765
14.1421 13.6761 12.3668 10.3503 7.7990 4.9088 1.8859 -1.0670 -3.7639 -6.0470
17.3205 16.7497 15.1454 12.6740 9.5468 6.0051 2.3026 -1.3119 -4.6114 -7.4036
19.3185 18.6816 16.8905 14.1305 10.6390 6.6869 2.5585 -1.4690 -5.1438 -8.2531
20.0000 19.3399 17.4814 14.6182 10.9995 6.9081 2.6382 -1.5253 -5.3234 -8.5371
19.3185 18.6778 16.8740 14.1012 10.6045 6.6568 2.5393 -1.4751 -5.1375 -8.2368
17.3205 16.7342 15.1036 12.6150 9.4856 5.9544 2.2705 -1.3219 -4.5996 -7.3735
14.1421 13.6181 12.2890 10.2707 7.7261 4.8503 1.8491 -1.0773 -3.7470 -6.0063
Графики решения задачи.

Р
исунок
5. Решение основного уравнения
Рисунок 6. Линии уровня решения основного уравнения
