Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
84
Добавлен:
17.04.2013
Размер:
1.87 Mб
Скачать

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.

Соседние файлы в папке mpm_7c