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

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

disp('----------Программа (явная схема)--------')

clear;

%-------- ЗАПРОС И ВЫЧИСЛЕНИЕ ПРЕДВАРИТЕЛЬНЫХ ПАРАМЕТРОВ -------%

min_kol_uzlov = 4; %минимал. число узлов на оси

max_kol_uzlov = 150; %максим. число узлов на оси

M = zeros(1,1); %действит.число узлов на оси OX

N = zeros(1,1); %действит.число узлов на оси OT

h = zeros(1,1); %длина шага разбиения по оси OX

r = zeros(1,1); %длина шага разбиения по оси OT

vspomog = zeros(1,1); %вспомогательная переменная

%Запрос числа шагов по OX

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

max_kol_uzlov = min_kol_uzlov+95;

%Запрос числа шагов по OT

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/N;

%------------- ВЫЧИСЛЕНИЕ МАТРИЦЫ РЕШЕНИЙ ----------------%

U = zeros(M+1,N+1); %матрица решений

%заполнение первого слоя матр. по T

for i=1:1:M+1

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

kof_b1 = 0; %коэффициенты, определенные для данной функции

kof_b2 = -2; % см. (***)

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) + (h^2)/2*func_f(0,(j-1)*r) + h*func_m1((j-1)*r))/(1+(h^2)/(2*r)+kof_b1*h);

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

%вывод результата

max = U(1,1); %максимальное значение функции

min = U(1,1); %минимальное значение функции

x = 0:h:1; %массив делений по оси X

y = 0:r:1; %массив делений по оси T

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

disp('Для продолжения нажмите любую клавишу...')

pause; end;

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