- •Московский Государственный Институт Электронной Техники
- •3. Порядок работы.
- •Теоретические сведения.
- •1. Классификация задач.
- •2. Метод сеток.
- •Порядок выполнения работы.
- •Классификация краевой задачи и её физический смысл
- •2. Выбор сеточного шаблона и составление системы уравнений для неявной разностной схемы
- •X t Рис. 1.
- •3. Выбор сеточного шаблона и составление системы уравнений для явной разностной схемы
- •Для применения данной системы для решения поставленной задачи необходимо выполнение условия
- •4. Тексты программы для неявной схемы.
- •4. Тексты программы для явной схемы.
- •5. Анализ полученных данных
- •Список литературы
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;