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

3 Решение задачи с помощью неявной разностной схемы

В неявной разностной схеме для получения решения сеточной функции на последующем слое необходимо решать систему алгебраических уравнений специального вида. В данной задаче аппроксимацию дифференциальных операторов проведём по следующим шаблонам:

3.1 Аппроксимация дифференциального уравнения

Для сведения задачи к явной разностной схеме используем T – образный пятиточечный шаблон.

Получаем конечно-разностную систему:

Обозначим =/h и выразим U(i,j+1) через остальные значения сеточной функции, входящие в уравнение:

(1)

Уравнение (1) должно выполняться для всех внутренних узлов сетки. Для того чтобы система стала полностью определенной, необходимо дополнить ее уравнениями, получаемыми из аппроксимации краевых и начальных условий.

3.2 Аппроксимация 1-го начального условия.

(2)

3.3 Аппроксимация 1-го граничного условия.

U(0,j)=0, (3)25

3.4 Аппроксимация 2-го граничного условия.

Для аппроксимирования 2-го граничного условия:

Порядок аппроксимации о(h2)

3.5 Аппроксимация 2-го начального условия.

Для более точного аппроксимирования 2-го начального условия разложим U(x, t) в окрестности точки (x,0) по формуле Тейлора:

Используя 1-ое и 2-ое начальные условия, переходим к конечным разностям:

(4)

Порядок аппроксимации о(2)

Перепишем в виде, удобном для применения метода прогонки:

(5)

Получили систему уравнений:

U(0,j)=0

3.5Вычисления прогоночных коэффициентов

Сначала найдем U(i,j) на слое j=1. Определим прогоночные коэффициенты. Учитывая 1-ое граничное условие и уравнение (5) получаем:

Теперь вычислим граничные прогоночные коэффициенты:

Методом прогонки находим U(i,1) где i=1...m ;

Теперь зная значения j=0,1 находим U(i,j ) где j=2...n.

Используя уравнение (1) находим прогоночные коэффициенты:

Теперь вычислим граничные прогоночные коэффициенты:

Схема устойчива, если коэффициенты удовлетворяют условию:

Ci  Ai + Bi

Методом прогонки находим U(i, j) где i=1..m, j=2..n. Текст программы в среде Matlab приведен в Приложении (стр.10). Поверхность функции являющейся решением нашего дифференциального уравнения изображена в Приложении (стр.15).

Приложение: Неявная разностная схема:

function W=ann(M, N);

h=1/M;

t=1/N;

%-------------- определение рабочих констант ----------------------

U=zeros(M+1,N+1);

h2=h^2; t2=t^2; g2=t2/h2;

%------------- заполнение матрицы U(x,t) 1-ым начальным условием

for i=0:M, U(i+1,1)=20*sin(3*pi*h*i/4);

end;

%-------------------------------------------------------------------

a=zeros(M,1);c=zeros(M+1,1);b=a;a1=a;f=c;b1=c;

%-------этап заполнения матрицы U(x,t) 2-ым начальным условием ----

%------------1) Определение прогоночных коэффициентов---------------

for i=1:M-1,

a(i)=g2/2; b(i+1)=g2/2; c(i+1)=1+g2;

f(i+1)=20*sin(3*pi*h*i/4);

end;

%--------2) Определение граничных прогоночных коэффициентов---------

a(M)=1; b(1)=0; c(1)=1; c(M+1)=3*pi*h/4+1;

f(1)=0; f(M+1)=0;

%------------ определение U(i,1) методом прогонки ---------------

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,t) -----------------------

%------------1) Определение прогоночных коэффициентов---------------

for i=1:M-1,

a(i)=g2; b(i+1)=g2; c(i+1)=1+2*g2;

end;

%--------2) Определение граничных прогоночных коэффициентов---------

a(M)=1; b(1)=0; c(1)=1; c(M+1)=3*pi*h/4+1;

%------------ определение U(i,j) методом прогонки ----------

a1(1)=b(1)/c(1);

for i=2:M,

a1(i)=b(i)/(c(i)-a(i-1)*a1(i-1));

end;

for j=2:N,

f(1)=0;

for i=1:M-1,

f(i+1)=2*U(i+1,j)-U(i+1,j-1);

end;

f(M+1)=0;

b1(1)=f(1)/c(1);

for i=2:M,

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,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;

mesh(U);

W=U;

pause;

clear;

clc;

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