ЧМ (ЭКТ-3) / Лабы / Лаба 7 (ДЗ) / lab7
.docЛабораторная работа N7(домашнее задание).
Решение дифференциальных уравнений в частных производных второго порядка.
Краткие теоретические сведения.
Рассмотрим уравнение теплопроводности, описывающее распространение тепла в однородном стержне
, (1)
где функция
определяет температуру стержня в сечении
в момент времени
,
,
а
.
Здесь
– коэффициент температуропроводности,
– заданная функция, равная нулю, если
внутри стержня отсутствуют источники
тепла. Нетрудно убедится, используя
канонический вид дифференциального
уравнения
,
и выражение для вычисления дискриминанта
,
что это уравнение является дифференциальным уравнением параболического типа.
Построим разностную схему решения дифференциального уравнения (1) с начальным условием и граничными условиями
,
. (2)
Как и раньше введем прямоугольную сетку,
на которой определим
и
.
Заменим производные
и
разностными отношениями, причем
производную
будем аппроксимировать в слое j,
в результате получим разностную схему
, (3)
для
.
С начальными и граничными условиями
,
(4)
при
.
Данной схеме соответствует следующий
шаблон
![]()
|
—
—
![]()
Если же производную
аппроксимировать разностным отношением
не на слое j, а на слое
(j+1), то получим
разностную схему
. (5)
В этом случае
с теми же начальными и граничными
условиями, что и для схемы (3). Этой схеме
соответствует шаблон
—
—
![]()
|
![]()
В схеме (3) в каждом уравнении содержится только одно значение функции на следующем слое. Это значение явно выражается через значения функции на данном слое, поэтому эта схема называется явной. Схема (5) содержит в каждом уравнении несколько неизвестных значений функции на новом слое, такая схема называется неявной. Перепишем схему (5) в следующем виде
, (6)
с граничными условиями
![]()
для
.
На каждом слое с номером
схема (6) представляет собой систему
линейных алгебраических уравнений для
определения величин
,
правые части этих уравнений известны,
поскольку содержат значения решения в
предыдущем слое
и значения известной функции
.
Пусть
,
и
.
Тогда уравнения (8.18) преобразуются к
виду
при
, (7)
Эта система линейных алгебраических уравнений с трехдиагональной матрицей коэффициентов, она может быть решена методом прогонки.
Введем обозначения
,
,
и рассмотрим однородное дифференциальное
уравнение. Неявная схема будет представлена
уравнениями:
(8)
при
,
а явная схема:
(9)
или
. (10)
Исследуем устойчивость схем вычисления
с использованием принципа максимума.
Внесем ошибку
на исходном слое, тогда ошибка
на новом слое будет удовлетворять для
явной схемы равенству
,
из которого следует, что
.
Решая неравенство
,
получаем условие устойчивости явной схемы
. (11)
Для неявной схемы, аналогично рассуждая, получаем равенство
,
откуда следует, что неравенство
![]()
выполняется при всех
.
Это означает, что неявная схема является
безусловно устойчивой.
Вариант N13.
Решить уравнение теплопроводности,
используя неявную схему,
с начальным
и граничными
,
условиями, где
.
Отобразить полученное решение графически.
Применяя неявную схему, получить систему
линейных алгебраических уравнений с
трехдиагональной матрицей и, решая эту
систему методом прогонки, последовательно
получить значения функции
для различных значений
.
|
|
3,5 |
|
|
1,4 |
|
|
-1 |
|
|
2 |
Текст программы.
clear
n=50
tau=1/n
a=3.5
b=1.4
c=-1
d=2
h=b/n
U=zeros(n)
b1=0
y=0
v=0
f=zeros(n)
for i=1:n
x(i)=i*h
f(i)=a*x(i).^2+((d*c-a*b.^2)*x(i))/b+c
U(i,1)=c
U(i,n)=d
U(1,i)=f(i)
end
A=zeros(n-2)
for j=2:n
y(1)=c
y(n)=d
A(1,j-1)=-(2+(h^2)/(tau))
A(1,j)=1
b1(1,1)=-((h^2)/tau)*U(j-1,2)-U(j-1,1)
for i=3:n-2
A(i-1,i-2)=1
A(i-1,i-1)=-(2+(h^2)/(tau))
A(i-1,i)=1
b1(i-1,1)=-((h^2)/tau)*U(j-1,i)
end
A(n-2,n-3)=1
A(n-2,n-2)=-(2+(h^2)/(tau))
b1(n-2,1)=-((h^2)/tau)*U(j-1,n-1)-U(j-1,n)
for i=1:n-1
if (i==1)
Alfa(i,1)=-A(i,i+1)/A(i,i)
Beta(i,1)=b1(i,1)/A(i,i)
end
if(i>1)
if(i==n-2)
Alfa(i,1)=0
Beta(i,1)=(b1(i,1)-A(i,i-1)*Beta(i-1,1))/(A(i,i-1)*Alfa(i-1,1)+A(i,i))
end
if(i<n-2)
Alfa(i,1)=(-A(i,i+1))/(A(i,i-1)*Alfa(i-1,1)+A(i,i))
Beta(i,1)=(b1(i,1)-A(i,i-1)*Beta(i-1,1))/(A(i,i-1)*Alfa(i-1,1)+A(i,i))
end
end
end
for i=n-2:-1:1
if(i==n-2)
v(i,1)=Beta(i,1)
end
if(i<n-2)
v(i,1)=Alfa(i,1)*v(i+1,1)+Beta(i,1)
end
end
for i=2:n-1
U(j,i)=v(i-1,1)
end
end
U(:,1)=[]
mesh(U)
После выполнения программы получим:


