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

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

Рассмотрим снова краевую задачу . Для аппроксимации уравнения используем Т-образный пятиточечный шаблон . Уравнение аппроксимируется следующими уравнениями :

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

Обозначим и запишем(1) к виду удобному для применения метода прогонки:

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

(3)

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

(4)

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

Для более точного аппроксимирования 2-го начального условия разложим в окрестности точки по формуле Тейлора и используя 1-ое и 2-ое начальное условия перейдем к конечным разностям:

(5)

Эта формула отличается от аналогичной для явной схемы тем, что аппроксимация разностной производной второго порядка по производится на первом слое, а не на нулевом. Запишем(5) к виду удобному для применения метода прогонки:

(6)

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

При

(7)

При

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

Сначала найдем на слое. Определим прогоночные коэффициенты.

Учитывая 1-ое граничное условие и уравнение (6) получаем:

ai = bi =

Ci = 1 +

fi =

b0 = 0, C0 = 1, f0 =

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

aM = , CM = 1+, fM =.

Методом прогонки находим где ;

Теперь зная значения находим где

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

ai = bi =

Ci = 1 +

fi = 2Ui,j - Ui,j-1

b0 = 0, C0 = 1, f0 = .

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

aM = , CM = 1+, fM =.

Методом прогонки находим где;

Тексты программ. Явная схема.

clear

%----------------Число разбиений по осям-------------

M=50; N=55;

%------------------Вычисление шага сетки-------------

h=1/M; t=1/N;

%--------------------Константы-----------------------

if t>h,clc,for i=1:10,disp(' ');,end;

disp(' Возможна неустойчивость!!!');

disp(' (Не выполнено условие Куранта-Леви:t<=h)!!!');

pause,end;,g=(t/h)^2;

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

g=t/h;

g2=g^2;

t2=t^2;

h2=h^2;

%------------первое начальное условие

for i=0:M, u(i+1,1)=9*sin(5*pi*i*h/2); end

%------------первое граничное условие

for j=1:N, u(1,j+1)=sin(5*pi*j*h/2); end

%%------------заполнение матрицы

for i=1:M-1, u(i+1,2)=9*sin(5*pi*i*h/2)+5*(pi/2)*t*cos(5*pi*i*h/2)+(t2/2)*((u(i,1)-2*u(i+1,1)+u(i+2,1))/h2); end

u(M+1,2) =g2*(u(M,1)-u(M+1,1))+9;

for j=1:N-1,

for i=1:M-1,

u(i+1,j+2)=2*(1-g2)*u(i+1,j+1)+g2*(u(i,j+1)+u(i+2,j+1))-u(i+1,j);

end;

u(M+1,j+2) =2*(1-g2)*u(M+1,j+1)-u(M+1,j)+2*g2*u(M,j+1)-5*h*pi*sin(5*pi*t*j/2)*g2;

end;

%-------------------построение графиков-----------

contour(u,40);pause;

mesh(u);pause;

for t=1:60:360

view(t,50);

pause;

end

Неявная схема.

%------ определение числа разбиений по осям x, t -----

M=50; N=60;

%--- определение шагов сетки по оси x или t

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)=9*sin(5*pi*i*h/2); 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)=9*sin(5*pi*i*h/2)+t*5*(pi/2)*cos(5*pi*i*h/2);

end;

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

A(M)=g2; B(1)=0; C(1)=1; C(M+1)=1+g2;

F(1)=sin(5*pi*t/2); F(M+1)=9*sin(5*pi*M*h/2)+t*5*(pi/2)*cos(5*pi*M*h/2);

%------------ определение 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)=2*g2; B(1)=0; C(1)=1; C(M+1)=1+2*g2;

%------- определение 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)=sin(5*pi*j*t/2);

for i=1:M-1,

F(i+1)=2*u(i+1,j)-u(i+1,j-1)+8*t2*(t2*j^2+h2*i^2);

end;

F(M+1)=2*u(M+1,j)-u(M+1,j-1);

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;

contour(u,40);

pause;

mesh(u);

pause;

for t=1:60:360

view(t,50);

pause;

end

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