- •Московский Государственный Институт Электронной Техники
- •1.2 Порядок работы.
- •2. Выполнение работы.
- •2.1. Классификация краевой задачи и её физический смысл
- •2.2. Решение задачи с помощью явной разностной схемы
- •2.3 Поверка правильности реализации с помощью модельной функции.
- •2.4. Решение задачи с помощью неявной разностной схемы
- •2.4. Анализ полученных данных
- •3. Список литературы
2.2. Решение задачи с помощью явной разностной схемы
Y
X
Рисунок
1
слое по реккурентным формулам.
Аппроксимация основного уравнения
Зададимся необходимыми исходными данными:
M – количество узлов по оси X;
N – количество узлов по оси Y.
Вычислим размеры ячейки сетки:
- по оси X;
- по оси Y.
Для сведения задачи к явной разностной схеме используем шаблон «крест»
(рисунок 1). Получаем конечно-разностную систему
с погрешностью аппроксимации .
Обозначим и выразимчерез остальные значения сеточной
функции, входящие в уравнение:
(1)
Аппроксимация граничных и начальных условий
Уравнение (1) должно выполняться для всех внутренних узлов сетки. Для того, чтобы система стала полностью определенной, необходимо дополнить ее уравнениями,
получаемыми из аппроксимации краевых и начальных условий.
Аппроксимация 1-го начального условия:
(2).
Аппроксимация 1-го граничного условия:
(3).
Аппроксимация 2-го начального условия:
для более точного аппроксимирования 2-го начального условия разложим
U(x, y) в окрестности точки (x, 0) по формуле Тейлора:
.
Используя 1-ое и 2-ое начальные условия, перейдем к конечным
разностям:
(4)
Формула (4) используется на начальном этапе для вычисления значения функции U(x, y) на первом слое по известным значениям на нулевом слое и
на границе.
Аппроксимация 3-го граничного условия:
для более точного аппроксимирования 3-го граничного условия разложим
U(x, y) в окрестности точки (1, y) по формуле Тейлора:
(*).
Используя основное уравнение задачи и 2-ое граничное условие, получаем:
.
Перейдем к конечным разностям, записываемым в узле :
(5).
Выражая из (5) ,получаем:
(5’)
Из (4) при i=M -1 имеем:
,
откуда
(7).
Из (5), при j=0:
.
Выразим отсюда :
(8).
Из (1) при i=M, j=0:
(9)
Подставляя (7) и (8) в (9), получаем:
.
Итак, при j=0 и j=1 определены. Включается реккурентная процедура, описываемая уравнением (1) и вычисляется для всех i=1, 2, ..., M-1 для каждого фиксированного j=1, 2, ...,N–1. Текст программы в среде MatLab и графики решения заданного дифференциального уравнения приведены ниже.
Текст программы.
%---------------- Явная разностная схема -------------
%
%------------------------------------------------------
clc;
clear;
%--------------------- Ввести шаг по оси X ------------
M = input('Введите количество узлов по оси X: ');
if ((M<2) | (M>90))
return
end
h = 1/(M-1);
fprintf('Шаг по оси X: %g \n', h);
%--------------------- Ввести шаг по оси Y ------------
N = input('Введите количество узлов по оси Y: ');
if((N < 2) | (N > 90))
return
end
t = 1/(N-1);
fprintf('шаг по оси Y: %g', t);
%-------------- Создать матрицу функции U(X,Y) --------
U = zeros(M, N);
g=t/h;
for i=2:M
U(i,1) = 20*sin((3*pi/4)*(i-1)*h); %Начальные условия
end;
%------------------- Инициализация 1-ой точки ----------------
for i=2:M-1
U(i,2) = U(i,1) + ((t^2)/2)*(U(i-1,1) - 2*U(i,1)+U(i+1,1))/(h^2);
end
%------------------- Граничное условие 3-го рода -------------
U(M,2) =(g^2)*U(M-1,1)-U(M,1)*((g^2)+3*pi*h*(g^2)/4-1);
%--------------------- Считаем -------------------------------
fprintf('\n Программа работает, подождите ');
for j=2:N-1
fprintf('.');
for i=2:M-1
U(i,j+1)=2*(1-g^2)*U(i,j)+(g^2)*(U(i-1,j)+U(i+1,j))-U(i,j-1);
End
%--------------------- Граничное условие 3-го рода -----------
U(M,j+1)=(2*(g^2))*U(M-1,j)-(2*(g^2)*(1+3*pi*h/4)-2)*U(M,j)-U(M,j-1);
end
fprintf('\n');
%--------------------- Просмотр в различных ракурсах ---------
for p=0:30:360
%disp(p)
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.0000 4.4829 3.6603 2.5882 1.3397 -0.0000 -1.3397 -2.5882 -3.7024
10.0000 9.6593 8.6603 7.0711 5.0000 2.5882 0.0000 -2.5882 -5.0421 -7.1304
14.1421 13.6603 12.2474 10.0000 7.0711 3.6603 0.0000 -3.7024 -7.1304 -10.0841
17.3205 16.7303 15.0000 12.2474 8.6603 4.4829 -0.0421 -4.5422 -8.7443 -12.3224
19.3185 18.6603 16.7303 13.6603 9.6593 4.9579 -0.0594 -5.0841 -9.7342 -13.7472
20.0000 19.3185 17.3205 14.1421 9.9579 5.1170 -0.0841 -5.2513 -10.0870 -14.1934
19.3185 18.6603 16.7303 13.6181 9.5999 4.9159 -0.0749 -5.0870 -9.7105 -13.7204
17.3205 16.7303 14.9579 12.1881 8.5762 4.4079 -0.0870 -4.5341 -8.7204 -12.2453
14.1421 13.6181 12.1881 9.9159 6.9961 3.5733 -0.0512 -3.7204 -7.0690 -10.0191
График решения задачи.
Зависимость (x,U(x,t)), для различныхt.