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

5. Текст программы для явной схемы.

disp('Yavnaya skhema');

clear;

min_kol_uzlov = 4;

max_kol_uzlov = 150;

M = zeros(1,1);

N = zeros(1,1);

h = zeros(1,1);

r = zeros(1,1);

vspomog = zeros(1,1);

vspomog=0;

while vspomog==0

disp('интервал :')

disp('от')

disp(min_kol_uzlov)

disp('до')

disp(max_kol_uzlov)

M=input('Задайте число узлов по оси OX (не выходите за интервал):');

if min_kol_uzlov<=M

if M<=max_kol_uzlov

vspomog=1;

end;

end;

if vspomog==0

disp('Заданый параметр не входит в установленый интервал,')

disp(' попробуем еще раз...')

end;

end;

h=1.0/M;

min_kol_uzlov = ceil(2.0/((h^2)*8));

max_kol_uzlov = min_kol_uzlov+95;

vspomog=0;

while vspomog==0

disp('интервал :')

disp('от')

disp(min_kol_uzlov)

disp('до')

disp(max_kol_uzlov)

N=input('Задайте число узлов по оси OT (не выходите за интервал):');

if min_kol_uzlov<=N

if N<=max_kol_uzlov

vspomog=1;

end;

end;

if vspomog==0

disp('Заданый параметр не входит в установленый интервал,')

disp(' попробуем еще раз...')

end;

end;

r=1.0/(8*N);

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

for i=1:1:M+1

U(i,1)=naus_Ux0(h*(i-1));

end;

for j=2:1:N+1

for i=2:1:M

U(i,j) = U(i,j-1) + r*(U(i-1,j-1)-2*U(i,j-1)+U(i+1,j-1))/(h^2) + r*func_f((i-1)*h,(j-2)*r);

end;

U(1,j)=(U(2,j)+((h^2)/(2*r))*U(1,j-1)-8*(j-1)*r*h)/(1+(h^2)/(2*r));

U(M+1,j)=(U(M,j)+(h^2)/(2*r)*U(M+1,j-1)-(h^2)*func_f(1,(j-2)*r))/(1+(h^2)/(2*r)+h);

end;

max = U(1,1);

min = U(1,1);

x = 0:h:1;

y = 0:r:1/8;

z = zeros(21,1);

for i=1:1:M+1

for j=1:1:N+1

if max<U(i,j)

max = U(i,j);

end;

if min>U(i,j)

min = U(i,j);

end;

end;

end;

z = min:(max-min)/20:max;

contour(y,x,U,z)

grid;

xlabel('Ось T ');

ylabel('Ось X ');

disp(U)

pause;

mesh(U)

xlabel('Ось T ');

ylabel('Ось X ');

6. Анализ полученных данных

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

Q(i,j)=| U1(i,j)-U2(i/op1,j/op2) |

где U1 и U2 матрицы размерности NxM и N1xM1, op1=N/N1, op2=M/M1, N<N1, M<M1

Т.е. элементами матрицы Q(i,j) были разности значений функции для близких узлов различных матриц.

В результате была получена следующая таблица:

Таблица 1. Значение элемента Q для матриц различного размера.

Размерности

Матриц

10x10

20x20

20x20

30x30

30x30

40x40

40x40

50x50

Норма

0.3023

0.1467

0.0864

0.0755

Полученные данные говорят о том, что при уменьшении шага сетки норма матрицы Q уменьшается, что, в свою очередь ,говорит о том, что задача решаемая этим методом корректна и устойчива.

На рисунках 3 и 4 представлены результаты расчёта программы по явной разностной схеме. Значения M = 6 N = 80, поверхности уровня проведены равномерно, с интервалом 0,8.

На рисунках 5 и 6 представлены результаты расчета программы по неявной разностной схеме. Значения M=6 N=80 поверхности уровня проведены равномерно с шагом 0,8.

РИС.3

РИС.4

РИС.5

РИС.6

0

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