Какие объекты исследует вычислительная математика |
Лекция 10: Численные методы решения жестких систем обыкновенных дифференциальных уравнений
9.3. Решение линейных ЖС ОДУ и вычисление матричной экспоненты
Рассмотрим один из наиболее простых численных методов решения жестких линейных систем ОДУ [9.10], основанный на представлении решения в явном виде
![u_{n + 1} = e^{B\tau }u_{n}](/sites/default/files/tex_cache/23b21507f8f923cde4318a2b1641d6b7.png)
для линейных систем жестких ОДУ вида
![$ \dot {u} = Bu, {u}(0) = u_0 . $](/sites/default/files/tex_cache/844dc5cb50c69a5663cf38bac57cb3ae.png)
Его численная реализация связана с вычислением матричной экспоненты. О свойствах матричной экспоненты (и в целом функций от матриц) можно прочитать в [9.11]. Использование для этого разложения в ряд Тейлора
![$ e^{A{\tau}} = {E} + \sum\limits_{k = 1}^{N}{\frac{\tau^k}{k!}{B}^{k}} $](/sites/default/files/tex_cache/7351e6b14a86badfc755c7a2fb65271a.png)
представляется непригодным, так как простые оценки показывают, что по
вычислительным затратам этот алгоритм сопоставим с методом Эйлера с шагом :
![$ \frac{{{\tau}^{k}}}{{k!}}\|{B}^{k}\| \approx \left({\frac{e\tau\|{B}\|}{k}}\right)^{k}, \mbox{ так как } k! \sim \left({\frac{k}{e}}\right)^{k} . $](/sites/default/files/tex_cache/c3cc350251e6ddf04020573a7d0fd009.png)
Следовательно, для того, чтобы k - й член разложения ряда Тейлора был, по крайней мере, порядка O(1), необходимо выполнение условия
![$ \frac{{e\tau\|{B}\|}}{k} \sim O(1), \mbox{ или } \tau\|{B}\| \sim
O(1), $](/sites/default/files/tex_cache/13fefa906b3aa2682ba050d2d351c6bf.png)
что соответствует условию численного интегрирования с шагом Количество членов ряда при этом
что неприемлемо для решения.
Представим экспоненту в следующем эквивалентном виде:
![$ e^{{B}{\tau}} = (e^{{\tau}A/2^p})^{2^p} \approx {\left[{E + \frac{{\tau}}{2^p}B + \ldots + \frac{1}{k!}{\left({\frac{{\tau}}{2^p}}\right)}^k B^k}\right]}^{2^p}.$](/sites/default/files/tex_cache/3ee1933b5bd77d67ad13acf21a22a1dc.png)
При этом значение параметра p выбирают таким, чтобы
![$ \frac{{\tau\|{B}\|}}{{2^{p}}} \ll 1 $](/sites/default/files/tex_cache/fcae2db0b99183666b823302721f9ce1.png)
и можно было использовать ряд Тейлора с небольшим количеством членов. Действительно, в этом случае
![$ \frac{{\tau\|{B}\|}}{{k \cdot 2^{p}}} \sim O(1) \mbox{ и } N \sim 2^{- p} \tau\|{B}\|, $](/sites/default/files/tex_cache/2d4408daa62a1a4336811339518721cb.png)
что вполне приемлемо при соответствующем выборе параметра p.
В этом алгоритме сначала вычисляют матрицу
![$ D = E + \sum\limits_{k = 1}^N{\left({\frac{\tau}{2^p}}\right)^k B^k},
$](/sites/default/files/tex_cache/541a769c2a075b71446145a1a694e0aa.png)
затем путем последовательных перемножений. При таком способе вычисления матрицы также имеется опасность, связанная с тем, что при некоторых p,
слагаемые, соответствующие мягкой части спектра, окажутся много меньше единицы (и слагаемых, соответствующих жесткой части). В этом случае предпочтение отдается представлению
![$ e^{A{\tau}} = \left[{\exp \left({- \frac{{\tau}}{2^p}{B}}\right)^{- 1}}\right]^{2^{p}}, $](/sites/default/files/tex_cache/25cfb320a3d29ca22e3918f76609fb0b.png)
а последовательность вычислений имеет вид
![$ D = E + \frac{{\tau}}{2^p}B; C = D^{- 1}; C^{\prime} = {(C^2 )}^p . $](/sites/default/files/tex_cache/cb32b162572e061b6fac638b860ae852.png)
При этом на мягкой части спектра, поскольку
имеем
![$ \left({1 - \frac{{\tau}}{{2^{p}}} |\lambda_j|}\right)^{- 2^{p}}
\approx e^{\lambda {\tau}} ; $](/sites/default/files/tex_cache/3be31c314a0bb01f02e02ff3f49a8e19.png)
на жесткой части, поскольку теперь p небольшие и получим оценку
![$ \left|{\left({\frac{1}{1 - {\tau}|\Lambda_j | \cdot 2^p}}\right)^{2^p}}\right| \ll 1, $](/sites/default/files/tex_cache/a33727b361bbb2cd0affe5e891653860.png)
что уже приемлемо для вычислений.