Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ (МП-3) / Курсовые / mpm_8a / Курсовая(вар.8).doc
Скачиваний:
101
Добавлен:
17.04.2013
Размер:
444.93 Кб
Скачать

Сравнение явной и неявной схем

Для сравнения решения явной и неявной схем используем следующий метод.

Берем матрицу решения явной схемы и матрицу такой же размерности решения неявной схемы и поэлементно сравниваем. Находим максимальное расхождение. Затем, увеличивая размерность матриц, снова сравниваем их и так далее. Расхождение должно убывать, так как при увеличении разбиения решения явной и неявной разностных схем стремятся к решению исходной краевой задачи.

Рассмотрим матрицы следующих размерностей: 40х25, 80х50, 160х100, 320х200.

Таблица норм сравнения явной и неявной схем.

NORMA(U1я-U1н)

NORMA(U2я-U2н)

NORMA(U3я-U3н)

NORMA(U4я-U4н)

0.1595

0.1301

0.1184

0.1133

Приложение

Текст функции, вычисляющий матрицу решения размерностью MxN, для явной схемы:

% YAV

% Решение краевой задачи с применением ЯВНОЙ разностной схемы.

N=input('Введите количество разбиений по оси времени (N):');

M=input('Введите количество разбиений по оси стержня (M):');

h=1/M;

t=1/N;

if t>h

clc

disp(' ВОЗМОЖНА НЕУСТОЙЧИВОСТЬ!!!');

disp(' (невыполнено условие устойчивости Куранта-Леви:N>=M)!!!');

pause;

end;

g=(t/h)^2;

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

for j=0:N

U(1,j+1)=j*t;

end;

for i=1:(M-1)

U(i+1,2)=5*(i*h*t)^2+t*(1-i*h);

end;

U(M+1,2)=(5*t^2+g*h-t*M*h+t);

for j=1:(N-1)

for i=1:(M-1)

U(i+1,j+2)=2*(1-g)*U(i+1,j+1)+g*(U(i,j+1)+U(i+2,j+1))-U(i+1,j)+t^2*10*((i*h)^2-(j*t)^2);

end;

U(M+1,j+2)=2*g*(U(M,j+1)-U(M+1,j+1)*(1+h)+h*(1+(t*j)^2))+10*(t^2)-10*(t^4)*(j^2)-U(M+1,j)+2*U(M+1,j+1);

end;

mesh(U,[-50,25]);

pause;

contour(U,20);

clc

Текст функции, вычисляющий матрицу решения размерностью MxN для неявной схемы:

% NEYAV

% Решение краевой задачи с применением НЕЯВНОЙ разностной схемы

%------------- ОПРЕДЕЛЕНИЕ ЧИСЛА РАЗБИЕНИЙ ПО ОСЯМ x,t---------------

N=input('Введите количество разбиений по оси времени (N):');

M=input('Введите количество разбиений по оси стержня (M):');

%---ОПРЕДЕЛЕНИЕ ШАГОВ СЕТКИ:a=b/c,ГДЕ b-ПРЕДЕЛ ВЫЧИСЛЕНИЙ ПО ОСИ 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)=0; 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)=t*(1-i*h)+5*t2*(h2*i^2-t2);

end;

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

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

F(1)=t; F(M+1)=5*t2+g2*h-t*M*h+t;

%------------ ОПРЕДЕЛЕНИЕ 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)=0; C(1)=1; 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)=t*j;

for i=1:M-1,

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

end;

F(M+1)=2*g2*(u(M-1,j)-u(M,j)*(1+h)+h*(1+(j-1)*t))+10*t^2-10*t^4*(j-1)^2-u(M,j-1)+2*u(M,j);

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,[-50,25]);

pause;

contour(u,15);pause;

clc

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