Явная разностная схема:
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clc;
clear;
%~~~~~~~~~~~~~~~Ввести
шаг по оси X ~~~~~~~~~~~~~~~~~~~~
M
= input('Введите количество узлов по оси
X: ');
if((M<2)
| (M>90)) %Защита от дурака
return
end
h
= 1/(M-1);
fprintf('
Шаг по оси X: %g \n',h);
%~~~~~~~~~~~~~~~Ввести
шаг по оси Y ~~~~~~~~~~~~~~~~~~~~
N
= input('Введите количество узлов по оси
Y: ');
if((N<2)
| (N>90)) %Защита от дурака
return
end
t
= 1/(N-1);
fprintf('
Шаг по оси Y: %g \n',t);
%~~~~~~~~~~~~~~
Создать матрицy функции U(X,Y)~~~~~~~~~~~
U=zeros(M,N); %
Матрица решения
for
i=2:M-1
U(i,1)
= 20*sin((3*pi/4)*(i-1)*h); % начальные условия
end
U(M,1)
= (4/(3*pi*h+4))*U(M-1,1); %Граничное условие 3-го
рода
%инициализация
первой точки
for
i=2:M-1
U(i,2)
= U(i,1)+((t^2)/2)*(U(i-1,1)-2*U(i,1)+U(i+1,1))/(h^2);
end
U(M,2)
= (4/(3*pi*h+4))*U(M-1,2); %Граничное условие 3-го
рода
%~~~~~~~~~~~~~~~~~~~~~~~Считаем~~~~~~~~~~~~~~~~~~~~~~~~~
fprintf('\n
Программа работает, подождите...\n');
g
= t/h;
for
j=2:N-1
fprintf
('¦');
for
i=2:M-1
U(i,j+1)
= 2*(1-g^2)*U(i,j) + (g^2)*(U(i-1,j)+U(i+1,j))-U(i,j-1);
end
U(M,j+1)
= (4/(3*pi*h+4))*U(M-1,j+1); %Граничное условие
3-го рода
end
fprintf('\n');
%-------------
Вывод результатов -------------------
x=0:h:1;
y1=0:t:1;
v=[-20:3:20];
for
i=1:M
for
j=1:N
m(N+1-j,i)=U(i,j);
end
end
%contour(m,v,x,y1)
grid
xlabel('X');
ylabel('T');
pause
disp(m);
%-------------
Просмотр в разных ракурсах
------------------------
for
t=0:30:270
mesh(0:1/(N-1):1,0:1/(M-1):1,U),grid;
pause
end
for
t=1:30:360
mesh(U,[t,0]);
pause
end
clc;
Таблица
значений функции для явной схемы
Г
рафик
функции (явная схема)
График
функции (неявная разностная схема):

Проверка
на устойчивость:

Литература
Долголаптев
В.Г., Земсков В.Н. Численные методы
решения разностных уравнений
математической физики. -М. МИЭТ, 1987.
519.6 (07) Д-64
Самарский
А.А. Теория разностных схем. М. :Наука,
1977. 53:51 (075.8)
2