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

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

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

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

(1)

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

(2)

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

(3)

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

При j=1

При j2

(4)

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

(6)

i=1..N

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

(См. “Метод сеток” стр 20)

При

(7)

При

(7a)

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

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

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

ai = bi = 0

Ci = 1

fi =

j2

ai = bi =

Ci = 1 +

fi =

Тексты программ.

Явная схема.

clear

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

M=40; N=41;

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

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

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

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

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

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

pause,end;

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)=sin(pi*h*i); end

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

for j=1:N, u(1,j+1)=(u(1,j)*(1+t)-(t^3)*(j^2)); end

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

for j=1:N, u(M+1,j+1)=0; end

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

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

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)+t2;

end;

end;

contour(u,40);pause;

mesh(u);pause;

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

function u=kur6_ne(M,N);

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

%--- определение шагов сетки по оси 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)=sin(pi*i*h); 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)=0;

B(i+1)=0;

C(i+1)=1;

F(i+1)=sin(pi*i*h)+t*(cos(2*pi*i*h)-1)/2+t2/2*((u(i,1)-2*u(i+1,1)+u(i+2,1))/h2+1);

end;

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

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

F(1)=(-t2/2-h*g2); 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)=0; B(1)=2*g2; C(1)=(-(1+2*g2)-2*h*g2); C(M+1)=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)=-2*u(1,j)+u(1,j-1)-t2-2*h*g2*(t*j)^2;

for i=1:M-1, F(i+1)=2*u(i+1,j)-u(i+1,j-1)+t2; 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);

pause;

contour(u,40);

pause;

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