Метод конечных элементов
Рассмотренный в прошлой главе метод Эйлера относится к классу «методов конечных разностей»: они заменяют производную на разность значений в близкие моменты времени, получая приближённое уравнение, для которого затем ищется точное (по модулю вычислительных погрешностей) решение.
Метод конечных элементов же предлагает начинать не с аппроксимации исходного уравнения, а с аппроксимации искомого решения.
Кусочно-линейная аппроксимация
Рассмотрим для примера уравнение вида
\[ \dot{x}(t) = k x(t) \]
с начальным условием \(x(0) = A\).
Простейшей аппроксимацией решения является кусочно-линейная: отрезок от \(0\) до \(T\) разбивается на \(N\) частей, на каждой части \(x\) приближается линейной неоднородной функцией. Такая аппроксимация почти нигде не удовлетворяет уравнению, но если потребовать, чтобы точное равенство достигалось в граничных точках (для правой односторонней производной), получится метод Эйлера.
Метод конечных элементов использует другой критерий близости: вместо того, чтобы требовать точное равенство в нескольких точках, он требует равенства взвешенных средних значений вблизи этих точек.
Обобщённая постановка
Если про две функции \(f\) и \(g\) известно, что они достаточно хорошие (например, непрерывные), то из равенства интегралов
\[ \int_a^b f = \int_a^b g \]
для всевозможных \(a\) и \(b\) следует равенство самих функций.
Более того, если функция \(f\) выражает какую-то реальную величину, не существует способа измерить её значение в какой-либо точке. Максимум, на что можно надеяться — среднее значение на некотором отрезке:
\[ \frac{\int_a^b f}{b-a} \]
Поэтому довольно естественно перейти от точного равенства функций к равенству их средних значений на произвольных отрезках. Чуть менее естественно от равенства средних значений перейти к равенству взвешенных средних на всей области определения:
\[ \int_0^T fw = \int_0^T gw \]
Такое равенство формально является более сильным — равенство средних получается, если допускать только кусочно-постоянные весовые функции \(w\). Но оно, опять же, формально более слабое, чем точное равенство. Далее будем такое равенство называть обобщённым.
Обобщённая постановка уравнения (т.е. использующая вместо точного равенства обобщённое) оказывается неожиданно удобной:
\[ \int_0^T \dot{x}w = \int_0^T kxw \]
может быть преобразовано при помощи правила Лейбница и формулы Ньютона-Лейбница следующим образом:
\[ x(T)w(T) - Aw(0) = \int_0^T (x\dot{w} + kxw) \]
У этого уравнения есть две интересных (и полезных) особенности:
- В него уже включено граничное условие \( x(0) = A \).
- В нём не встречается \( \dot{x} \): оно имеет смысл даже для аппроксимаций с плохо ведущей себя производной.
Дискретизация
Любая кусочно-линейная функция может быть записана в виде линейной комбинации «зубьев». Договоримся, что \(i\)-й «зуб» — это функция \(\varphi_i\):
- равная 0 везде, кроме отрезка с центром \(iT/N\) и радиусом \(T/N\)
- линейно меняющаяся от 0 до 1 на левой половине этого отрезка
- линейно меняющаяся от 1 до 0 на правой половине этого отрезка
Всего зубьев \(N+1\) — с нулевого по \(N\)-й. Обратите внимание, что зубья с номерами \(0\) и \(N\) «половинчатые».
Пусть \(x = \sum_{i=0}^N \alpha_i \varphi_i\), где \(\alpha_i\) — неизвестные числа. Мы знаем, что \(\alpha_0 = A\). Остальные \(N\) штук нам нужно найти. Соответственно, нам нужно \(N\) уравнений.
Обычно эти уравнения получают, подставляя в качестве весовой функции те же зубья, на основе которых строится решение \(x\). В нашей ситуации отлично подойдут первые \(N\) зубьев (кроме самого последнего): для всех них верно \(w(T) = 0\), что избавляет от лишнего члена в уравнении.
Таким образом мы получаем систему из \(N\) уравнений вида
\[ -A\left(\varphi_i(0) + \int_0^T \varphi_0 (\dot{\varphi}_i + k\varphi_i) \right) = \sum_{j=1}^{N} \alpha_j \int_0^T \varphi_j(\dot{\varphi}_i + k\varphi_i) \]
для \(i\) от \(0\) до \(N-1\).