- •Московский Государственный Институт Электронной Техники
- •2.1 Аппроксимация дифференциального уравнения
- •2.2 Аппроксимация 1-го начального условия.
- •2.3 Аппроксимация 1-го граничного условия.
- •2.4 Аппроксимация 2-го начального условия.
- •Решение задачи с помощью неявной разностной схемы.
- •Результаты работы.
- •Неявная схема
- •. Анализ полученных данных
- •Список использованной литературы :
Решение задачи с помощью неявной разностной схемы.
Рассмотрим снова краевую задачу . Для аппроксимации уравнения используем Т-образный пятиточечный шаблон . Уравнение аппроксимируется следующими уравнениями :
3.1 Аппроксимация дифференциального уравнения
(1)
Обозначим и запишем(1) к виду удобному для применения метода прогонки:
(2)
3.2 Аппроксимация 1-го начального условия
(3)
3.3 Аппроксимация 1-го граничного условия
При j=1
При j2
(4)
3.4 Аппроксимация 2-го начального условия
(6)
i=1..N
Аппроксимация 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;