- •Московский Государственный Институт Электронной Техники
- •1.2 Порядок работы.
- •2. Выполнение работы.
- •2.1. Классификация краевой задачи и её физический смысл
- •2.2. Решение задачи с помощью явной разностной схемы
- •2.3 Поверка правильности реализации с помощью модельной функции.
- •2.4. Решение задачи с помощью неявной разностной схемы
- •2.4. Анализ полученных данных
- •3. Список литературы
2.3 Поверка правильности реализации с помощью модельной функции.
В качестве модельной функции была взята функция ex+y
U(x,0)=ex ;
U`t(x,0)=ex ;
U(0,t)=et ;
3piU(1,t)+4U`x(1,y)=(3pi+4)et+1.
При разбиении 10x10, погрешность =0.0741.
Таблица разности решения задачи с помощью явной схемы и истинного решения:
0 0 0 0 0 0 0 0 0 0
0 0.0029 0.0048 0.0059 0.0074 0.0088 0.0103 0.0118 0.0123 0.0148
0 0.0034 0.0066 0.0068 0.0110 0.0136 0.0163 0.0177 0.0200 0.0231
0 0.0058 0.0073 0.0123 0.0156 0.0158 0.0207 0.0237 0.0266 0.0396
0 0.0074 0.0121 0.0148 0.0185 0.0236 0.0259 0.0296 0.0346 0.0454
0 0.0089 0.0133 0.0172 0.0222 0.0266 0.0311 0.0355 0.0412 0.0498
0 0.0103 0.0155 0.0198 0.0259 0.0323 0.0363 0.0414 0.0466 0.0518
0 0.0128 0.0187 0.0227 0.0296 0.0368 0.0414 0.0474 0.0533 0.0592
0 0.0133 0.0200 0.0256 0.0341 0.0400 0.0460 0.0533 0.0600 0.0623
0 0.0148 0.0242 0.0296 0.0370 0.0432 0.0518 0.0592 0.0672 0.0741
2.4. Решение задачи с помощью неявной разностной схемы
Для решения задачи с применением неявной разностной схемы воспользуемся Т-образным шаблоном, изображенным на рисунке 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.4867 3.6690 2.5859 1.3252 0.0026 -1.3884 -2.5767 -3.7138
10.0000 9.6705 8.7448 7.3195 5.0163 2.5936 0.0065 -2.5520 -5.0603 -7.1665
14.1421 13.6761 12.2668 10.0503 7.0890 3.6988 0.0139 -3.7670 -7.1639 -10.0970
17.3205 16.7497 15.0454 12.2740 8.6868 4.5051 -0.0526 -4.5119 -8.7114 -12.3036
19.3185 18.6816 16.7905 13.7005 9.6640 4.8869 -0.0645 -5.0690 -9.7438 -13.7531
20.0000 19.3399 17.3314 14.2182 9.9995 5.2081 -0.0922 -5.2253 -10.0234 -14.1371
19.3185 18.6778 16.8340 13.7012 9.6045 4.9568 -0.0823 -5.0751 -9.7375 -13.7368
17.3205 16.7342 14.9606 12.1150 8.5856 4.4544 -0.0905 -4.5219 -8.7996 -12.2435
14.1421 13.6181 12.1890 9.9001 6.9261 3.5703 -0.0591 -3.7373 -7.0770 -10.0063
График решения задачи.
Зависимость (x,U(x,t)), для различныхt.