- •Московский Государственный Институт Электронной Техники
- •3. Порядок работы.
- •Порядок выполнения работы.
- •Классификация краевой задачи и её физический смысл
- •2. Выбор сеточного шаблона и составление системы уравнений для неявной разностной схемы
- •3. Выбор сеточного шаблона и составление системы уравнений для явной разностной схемы
- •Для применения данной системы для решения поставленной задачи необходимо выполнение условия
- •3. Тексты программы для неявной схемы.
- •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;
%вращение
hag = 5; %шаг поворота в градусах
GP = 0; %величина поворота в горизонт плоскости
VP = 0; %величина поворота в вертикальной плоскости
vspomog = 0; %вспомогательная переменная
mesh(U,[VP,GP]);
while vspomog == 0
s=input('Задайте направление поворота <1,2,3,4 - поворот; 0 - завершение работы>:','s')
switch s,
case '4',
VP = VP + hag;
case '1',
VP = VP - hag;
case '3',
GP = GP + hag;
case '2',
GP = GP - hag;
case '0',
vspomog = 1; end;
mesh(U,[VP,GP]);
xlabel('Ось T ');
ylabel('Ось X '); end;