Решение краевых задач.
Опр. Краевой задачей называется задача, в которой определённым образом задано условие на краях исследуемой области. Условия определяют поведение искомой функции.
Опр. ( постановка краевых задач).
Решить дифференциальное уравнение y"=f(x,y,y'), при чём обязательно заданы граничные условия. Найти значения y в каждой точке фиксированной x.
Краевые задачи делятся на разные виды в зависимости от начальных условий:
1. Если граничные условия имеют вид: y(a)=A, y(b)=B. Где А и В либо константы, либо функция, то это краевые условия первого рода.
2. Если граничные условия имеют вид: y'(a)=A, y'(b)=B, то это краевая задача второго рода.
3. Если известны комбинации: α1·y'(a)+β1·y(a)=γ1 и
α2·y'(a)+β2·y(a)=γ2 то это краевая задача третьего рода.
Для задач первого рода известна функция, т.е. например, известно значение температуры на краях стержня.
Для задач второго рода на границах сама функция неизвестна, а известна её производная.
Для задач третьего рода неизвестно значение функции, неизвестна производная, а известна их комбинация.
Краевые задачи делятся на три основных типа:
1. Параболического типа (пример: уравнения теплопроводности).
2. Гиперболического типа (уравнение описывающее колебание струны).
3. Эллиптического типа.
Рассмотрим краевую задачу 2-го рода параболического типа.
Задача: (моделирует процессы теплопереноса).
- коэффициент.
f – функция внутренних тепловых источников.
U – температура.
Начальные условия:
U(x,0)=φ(x)
x=a = f(t) - левое граничное условие
U(b)=q(t) - правое граничное условие
Для её решения использую метод сеток.
Решение:
Изобразим декартовую систему координат, где отложим х (точка стержня) и у (момент времени).
Рассмотрим стержень.
Разобьем участок стержня на n равных частей и рассмотрим шаг h=(b-a)/n (см. рисунок).
Для выбора шага по времени используем условие устойчивости: это условие применяется для явной сетки, когда последующий слой считается через предыдущий. Если это условие будет не соблюдаться, то в программе могут возникать неадекватные результаты: очень большие числа или числа разных знаков. Обычно t приходится выбирать очень маленьким, например 0,001, 0,0001, что затрудняет процесс счёта на компьютере. Например, реальный процесс, который происходит 2 секунды, моделируется на компьютере 2 часа.
Используя условие U(x,0)=φ(x) мы можем найти значение температуры в каждой точке стержня в начальный момент времени, т.е. посчитать значение в следующих узлах сетки:
Используя, правое граничное условие, мы найдём значение температуры на правом краю стержня во все моменты времени. На сетке эти точки будут расположены следующим образом:
(см. рисунок).
Затем, используя основное уравнение теплопроводности и выразив последующий слой через предыдущий мы можем найти значения температуры в следующих точках (см. рисунок).
И, наконец, распишем производную на левой границе: Найдём значение в точке U0,I:
U0,i=U1,i-
Значение в данной точке будет соответствовать следующему узлу сетки (см рисунок).
Таким образом мы посчитаем значения температуры в следующих узлах (см. рисунок)
Таким образом мы можем посчитать температуру во всей сетке (во всех узлах) и будем знать температуру стержня в каждой точке стержня в каждый момент времени.(Для получения более подробных сведений обращаётесь в раздел численных методов – решение краевых задач.)
Алгоритм программы.
В программе можно использовать два одномерных массива, либо один двумерный массив.
Одномерный массив описывается следующим образом:
U0[0..n] – используется для хранения данных предыдущего слоя,
U1[0..n] – используется для хранения данных последующего слоя.
Задаём начальные условия в цикле, т.е. для каждой точки стержня задаём значение температуры в нулевой момент времени:
For i:=0 to nx do { n - количество разбиений стержня}
Begin
U0[i]=φ(x) {в качестве φ(x) ,берётся функция из граничного условия}
x:=i*dx {dx –шаг, который задаётся в начале программы самостоятельно}
Затем открываем цикл по времени:
For j:=1 to T do {T – конечный момент времени}
Begin
U1[n]:=q(t1) { в качестве q(t1) ,берётся функция из правого граничного условия }
t1:=dt*j { dt –шаг, который задаётся в начале программы исходя из условия устойчивости – тоже самое что и }
Затем решаем основное уравнение теплопроводности. Предварительно расписав его в разностном виде:
Где Ui,j+1 - это U[i]
Ui,j - это U0[i]
Ui+1,j - это U0[i+1]
Ui-1,j - это U0[i-1]
Выражаем последующий слой через предыдущий:
т.е. for i:=1 to n-1 do
U1[i]:=dt*(k*(U0[i+1]-2*U0[i]+U0[i-1])/(dx*dx)+f(i))+U0[i]
Т.о. мы посчитаем температуру на следующем слое , в точках соответствующих индексам от 1 до n-1.
Используя левое граничное условие найдём: U0,i=U1,i- т.е.
U1[0]:=U1[1]-dx*f(t) {где f(t) функция т левого граничного условия}
Затем выводим слой (результат) на экран:
For i:=0 to 1 do
Write(u1[i]);
Writeln;
Переприсваиваем слои:
U0:=U1 ;
Заканчиваем цикл по времени. Заканчиваем программу.
© ООО «Знанио»
С вами с 2009 года.