term-paper-diffeq

view doc/report.tex @ 113:bc94df402ff0

Updated report to comply with source code changes introduced in rev 110.
author Dmitry Dzhus <mail@sphinx.net.ru>
date Fri Nov 16 19:08:52 2007 +0300 (2 years ago)
parents c6dada80954a
children 3d877a5c33fc
line source
1 \documentclass{article}
2 \usepackage[utf8x]{inputenc}
3 \usepackage[english,russian]{babel}
4 \usepackage{mflogo}
5 \usepackage{listings}
7 \lstdefinelanguage[guile]{Scheme}
8 {morekeywords={define,let,map,lambda,if,cond,or,and,else},
9 morecomment=[l]{;},
10 morestring=[b]{"}}
11 \lstset{mathescape=true}
12 \lstset{language=[guile]Scheme}
13 %\lstset{numbers=left,stepnumber=10,numberblanklines=false}
14 \lstset{basicstyle=\footnotesize}
15 \lstset{frame=tb,frameround=ffff}
16 \lstset{breaklines=true,breakautoindent=true}
18 \newcommand{\filename}[1]{\texttt{#1}}
19 \newcommand{\procname}[1]{\texttt{#1}}
20 \newcommand{\includeplot}[2]{\begin{figure}[hb]
21 \centering
22 \includegraphics{#1__#2-plot.mps}
23 \caption{График $u(x)$ для функции преломления \eqref{#2-initial-data}}
24 \end{figure}}
25 \renewcommand{\epsilon}{\varepsilon}
26 \renewcommand{\phi}{\varphi}
27 \providecommand{\abs}[1]{\left \lvert{#1}\right \rvert}
28 \providecommand{\op}[1]{\mathrm{#1}}
29 \providecommand{\comp}{\circ}
31 \usepackage{amsmath,amssymb}
33 \usepackage{graphics}
35 \DeclareGraphicsExtensions{.mps,.pdf,.eps}
36 \DeclareGraphicsRule{.scm-plot.mps}{mps}{*}{}
37 \DeclareGraphicsRule{.scm-all-plots.mps}{mps}{*}{}
39 \numberwithin{equation}{section}
41 \begin{document}
43 \author{Дмитрий Джус}
44 \title{Курсовая работа по теме\\ «Обыкновенные дифференциальные уравнения»}
45 \maketitle
46 \thispagestyle{empty}
48 \clearpage
49 \tableofcontents
51 \clearpage
52 \part{Постановка задачи}
54 \section{Математический аспект}
56 Настоящая курсовая работа посвящена построению приближённого решения
57 краевой задачи для дифференциального уравнения вида
59 \begin{equation}\label{deq}
60 \frac{d^2 u}{dx^2} + n(x) u(x) = 0
61 \end{equation}
63 По условию, $n(x)$ представляет собой кусочно-непрерывную функцию,
64 равную константе $k^2$ на интервалах $(-\infty; 0)$ и $(a; +\infty)$ и
65 непрерывной известной функции на $[0; a]$. На границах $[0; a]$
66 решение и его первая производная должны удовлетворять условиям
67 сшивания:
69 \begin{subequations}\label{conds}
70 \begin{align}
71 u(0-0)& = u(0+0)&
72 u'(0-0)& = u'(0+0)&\label{conds-left} \\
73 u(a-0)& = u(a+0)&
74 u'(a-0)& = u'(a+0)&\label{conds-right}
75 \end{align}
76 \end{subequations}
78 \section{Физический аспект}
80 Задача соответствует возбуждения плоского слоя неоднородной
81 немагнитной среды электромагнитным полем, вектор электрического поля
82 распространяется вдоль оси $x$. $k$ имеет смысл волнового числа в
83 однородной части пространства, $n(x)$ — показатель преломления
84 неоднородной среды.
86 Из физических соображений, решение справа от слоя $[0; a]$ должно
87 иметь вид $u(x) = Be^{ikx}$, а слева — $u(x) = e^{ikx} +
88 Ae^{-ikx}$. Задача состоит в приближённом построении решения внутри
89 неоднородного слоя и отыскании комплексных констант $A$ и $B$
90 (называемых, соответственно, коэффициентами отражения и прохождения
91 электромагнитного поля).
93 Действительная область значений функции $n(x)$ соответствует
94 отсутствию поглощения энергии в среде, так что критерием правильности
95 полученных приближённых значений служит энергетическое тождество:
97 \begin{equation}\label{energy}
98 \abs{A}^2 + \abs{B}^2 = 1
99 \end{equation}
101 \clearpage
102 \part{Решение}
104 \section{Общие замечания}
106 Предлагаемые к реализации в курсовой работае приближённые методы были
107 описаны на алгоритмическом языке Scheme (простом и строго
108 функциональном диалекте Лиспа).
110 \section{Решение методом построения фундаментальной матрицы}
112 \subsection{Описание}
114 Дифференциальное уравнение второго порядка \eqref{deq} можно представить
115 в матричной форме, введя $v(x) = \frac{du}{dx}$:
117 \begin{equation}\label{mdeq}
118 \frac{d}{dx}
119 \begin{pmatrix}
120 u(x) \\
121 v(x)
122 \end{pmatrix}
123 = \begin{pmatrix}
124 0 & 1 \\
125 -n(x) & 0
126 \end{pmatrix}
127 \begin{pmatrix}
128 u(x) \\
129 v(x)
130 \end{pmatrix}
131 \end{equation}
133 Решение системы \eqref{mdeq} с матрицей $A(x) = \bigl( \begin{smallmatrix} 0
134 & 1 \\ -n(x) & 0 \end{smallmatrix} \bigr)$ можно найти в общем виде, если
135 построена фундаментальная матрица $\Omega(x)$:
137 \begin{equation}\label{fm}
138 \Omega(x) = \begin{pmatrix}
139 \omega_{11}(x) & \omega_{12}(x) \\
140 \omega_{21}(x) & \omega_{22}(x)
141 \end{pmatrix}
142 \end{equation}
144 $\Omega(x)$ является решением следующей матричной задачи Коши:
146 \begin{equation}\label{fmeq}
147 \frac{d}{dx} \Omega(x) = A(x) \Omega(x)
148 \end{equation}
150 с условием $\Omega(0) = \bigl( \begin{smallmatrix} 1& 0\\ 0&
151 1\end{smallmatrix} \bigr)$.
153 Решение \eqref{mdeq} для $\forall x \in [0; a]$ записывается в виде
155 \begin{equation}\label{fmsolution}
156 \begin{pmatrix}
157 u(x) \\
158 v(x)
159 \end{pmatrix} =
160 \begin{pmatrix}
161 \omega_{11}(x) & \omega_{12}(x) \\
162 \omega_{21}(x) & \omega_{22}(x)
163 \end{pmatrix}
164 \begin{pmatrix}
165 1 + A \\
166 ik(1 - A)
167 \end{pmatrix}
168 \end{equation}
170 Использование краевых условий \eqref{conds} позволяет получить
171 следующую линейную алгебраическую систему относительно неизвестных $A$
172 и $B$:
174 \begin{equation}\label{abeq}
175 \begin{split}
176 (\omega_{11}(a) - \omega_{12}(a) ik) A - e^{ika} B &= -ik
177 \omega_{12}(a) - \omega_{11}(a) \\
178 (\omega_{21}(a) - \omega_{22}(a) ik) A - ike^{ika} B &= -ik
179 \omega_{22}(a) - \omega_{21}(a)
180 \end{split}
181 \end{equation}
183 Нахождение значений компонентов матрицы $\Omega$ на правом конце $[0;
184 a]$, таким образом, позволит получить искомые значения $A$ и $B$.
186 Для поиска фундаментальной матрицы в точках $[0; a]$ предлагается
187 использование следующего численного метода, основанного на приближении
188 функции $n(x)$ кусочно-постоянной, то есть замене неоднородной среды
189 на плоско-слоистую с большим числом однородных слоёв.
191 Рассматриваемый интервал разбивается на $N$ интервалов точками
192 $x_i = \frac{a}{N}i$, $i = 1 \dotso N$, в середине каждого из
193 которых берётся точка $\overline{x_i} = \frac{a}{N}(i+\frac{i}{2})$. В
194 данной точке функция $n(x)$ аппроксимируется ступенчатой функцией
195 $\overline{n}(x) = n(\overline{x_i})$, так что \eqref{mdeq} обращается
196 в систему с постоянной матрицей $A_i = \bigl(
197 \begin{smallmatrix}0& 1 \\ -\overline{n}(x)& 0 \end{smallmatrix}
198 \bigr)$. Тогда на каждом интервале $[x_i; x_{i+1}]$ решение
199 \eqref{fmeq} может быть найдено явно в виде матричной экпоненты:
201 \[
202 \Omega_i(x) = e^{A_i (x - x_i)}
203 \]
205 При этом, значения фундаментальной матрицы $\Omega_N(x_{i+1})$ на
206 правом конце $[x_i; x_{i+1}]$ служат начальным условием задачи Коши на
207 $[x_{i+1}; x_{i+2}]$, так что для каждой точки $\hat{x} \in [x_i;
208 x_{i+1}]$ фундаментальная матрица \eqref{fm} имеет вид:
210 \begin{equation}\label{fmx}
211 \Omega_N(\hat{x}) = e^{A_i(\hat{x}-x_i)} e^{A_{i-1}(x_i-x_{i-1})} \dotsm e^{A_0(x_1-x_0)}
212 \end{equation}
214 На правом конце интервала $[0; a]$ приближённая фундаментальная
215 матрица записывается в виде:
217 \begin{equation}\label{fma}
218 \Omega_N(a) = e^{A_{N-1}(x_N-x_{N-1})} e^{A_{N-2}(x_{N-1}-x_{N-2})} \dotsm e^{A_0(x_1-x_0)}
219 \end{equation}
221 Для нахождения матричной экспоненты используется формула Тейлора:
223 \begin{equation}\label{matrix-exp}
224 \begin{split}
225 e^{A_i(x-x_i)} \approx E +& \frac{1}{1!}{A_i(x-x_i)} +
226 \frac{1}{2!}{A_i^2(x-x_i)^2}\\
227 +& \frac{1}{3!}{A_i^3(x-x_i)^3} + \frac{1}{4!}{A_i^4(x-x_i)^4}
228 \end{split}
229 \end{equation}
231 После построения фундаментальной матрицы в $a$ коэффициенты $A$ и $B$
232 находятся из \eqref{abeq} с использованием полученных компонент
233 $\omega_{ij}^N(a)$.
235 Решение на каждом отрезке разбиения $[0; a]$ находится из
236 \eqref{fmsolution} с использование найденного $A$ и последовательности
237 приближений фундаментальной матрицы на $[x_i; x_{i+1}]$ для $\forall
238 i$.
240 \clearpage
241 \subsection{Реализация}
243 Описание основных процедур, необходимых для реализации метода,
244 находится в файле \filename{fundmatrix-solution.scm} (его полное содержание
245 приведено на странице \pageref{fundmatrix-solution.scm-full-listing}).
247 В исходном тексте программы активно используются последовательные
248 определения функций в терминах друг друга.
250 Так, основной вычислительный процесс метода — построение приближений
251 фундаментальной матрицы — выражен в функции
252 \procname{build-fundamentals}:
254 \input{build-fundamentals__fundmatrix-solution.scm-tag-listing}
256 \procname{build-fundamentals} представляет последовательность вычислений
257 фундаментальной матрицы на интервалах $[x_i; x_{i+1}]$ в виде частного
258 случая функции \procname{evolve-sequence}, возвращающей
259 последовательность $a_{s_1}, \dotsc, a_{s_n}$, где $a_{s_k} =
260 f(a_{s_{k-1}}, s_{k-1})$
261 (см. с. \pageref{shared.scm-full-listing}). Из определения
262 \procname{build-fundamentals} видно, что роль $s_k$ выполняют точки $x_i
263 = \frac{a}{N}i$ с $i = 1 \dotso N$, а $a_{s_{k-1}}$ — приближение
264 фундаментальной матрицы на предыдущем отрезке (на первом шаге
265 $\Omega_N$ приближается единичной матрицей). Комбинируются же эти
266 значения при помощи матричного умножения, как следует из \eqref{fmx}.
268 Функция \procname{variable-matrix} возвращает матрицу $A$ системы
269 \eqref{mdeq} для заданной по условию функции $n(x)$:
271 \input{variable-matrix__fundmatrix-solution.scm-tag-listing}
273 Возвращённая матрица потом используется в \procname{build-fundamentals}.
275 В \procname{build-fundamentals} используется и функция
276 \procname{matrix-exp}, вычисляющая матричную
277 экспоненту $f(x, y, z) = e^{A(x)(y-z)}$ путём разложения в ряд Тейлора
278 \eqref{matrix-exp} с использованием схемы Горнера:
280 \input{matrix-exp__matrices.scm-tag-listing}
282 В этой функции последовательность коэффициентов матричного многочлена
283 $\frac{1}{0!}, \frac{1}{1!}, \frac{1}{2!}, \dotsc$ генерируется
284 функцией \procname{exp-series-coefficients},
285 выраженной в терминах вышеупомянутой \procname{evolve-sequence}.
287 Вычисление матричной экспоненты в каждой точке выражено через
288 функцию высшего порядка \procname{general-horner-eval}, представляющую
289 собой обобщённую схему Горнера:
291 \input{general-horner-eval__shared.scm-tag-listing}
293 \procname{general-horner-eval}, в свою очередь, является частным случаем
294 функции высшего порядка \procname{fold-right}, реализующей свёртку
295 последовательности справа налево.
297 После построения последовательности фундаментальных матриц
298 осуществляется поиск коэффициентов $A, B$ путём решения системы
299 \eqref{abeq} с помощью метода Гаусса\nocite{bahvalov01} (его исходный код приведён на
300 странице \pageref{gauss.scm-full-listing}):
302 \input{find-A-B__fundmatrix-solution.scm-tag-listing}
304 С использованием найденного коэффициента $A$ и приближений из
305 \procname{build-fundamentals} в функции
306 \procname{approximate-solution} согласно \eqref{fmsolution}
307 рассчитывается и приближённое решение исходного уравнения \eqref{deq}
308 внутри неоднородного слоя:
310 \input{approximate-solution__fundmatrix-solution.scm-tag-listing}
312 Функция высшего порядка \procname{iterative-improve} выражает один из
313 подходов к решению вычислительных задач: улучшать начальное решение
314 при помощи заданной «функции улучшения» до тех пор, пока его не можно
315 будет считать «хорошим» в смысле заданной функции оценки решения:
317 \input{iterative-improve__shared.scm-tag-listing}
319 Так, в данном методе процедура построения фундаментальных матриц
320 повторяется до тех пор, пока вычисляемые коэффициенты отражения и
321 прохождения не будут удовлетворять \eqref{energy}:
323 \input{get-solution__fundmatrix-solution.scm-tag-listing}
325 Интересно, что второй метод решения поставленной задачи, о котором
326 рассказано далее, также определяет сходную функцию
327 \procname{make-solution} в виде частного случая
328 \procname{iterative-improve}.
330 Функцией улучшения является двукратное увеличение числа отрезков
331 разбиения интервала $[0;a]$ с последующим построением фундаментальных
332 матриц, решения и нахождения $A$, $B$, а проверка «качества»
333 полученного решения осуществляется при помощи предиката
334 \procname{energy-conserves?}:
336 \input{energy-conserves?__shared.scm-tag-listing}
338 \clearpage
340 \subsection{Исходные данные}
341 \input{statement.scm-initial-data}
343 В терминах Scheme она задаётся следующим образом:
345 \input{f__statement.scm-tag-listing}
347 \subsection{Результаты}
349 \input{fundmatrix__statement.scm-results}
351 \includeplot{fundmatrix}{statement.scm}
353 \clearpage
355 \subsubsection{Результат вычислений с альтернативным набором исходных данных}
357 Метод построения фундаментальных матриц применим в задачах с более
358 сложными выражениями для $n(x)$ (но требуется, чтобы $n(x)$ была
359 непрерывной внутри $[0;a]$). Далее представлены результаты работы
360 с иными, нежели в предыдущем разделе, данными.
362 \input{exo-statement.scm-initial-data}
364 \input{fundmatrix__exo-statement.scm-results}
366 \includeplot{fundmatrix}{exo-statement.scm}
368 \clearpage
370 \section{Решение методом последовательных приближений}
372 \subsection{Описание}
374 Уравнение \eqref{deq} можно переписать в следующем виде:
376 \begin{equation}\label{ndeq}
377 \frac{d^2u}{dx^2} + k^2 u(x) = (k^2 - n(x)) u(x)
378 \end{equation}
380 Где $k^2$ — значение функции вне интервала $[0; a]$.
382 Для такого уравнения известна функция Грина:
384 \[
385 G(x, t) = \frac{e^{ik\abs{x-t}}}{2ik}
386 \]
388 Так что решение \eqref{ndeq} выписывается в таком виде:
390 \[
391 u(x) = \int \limits_{-\infty}^{+\infty} {\frac{e^{ik\abs{x-t}}}{2ik} (k^2-n(t))
392 u(t) dt}
393 \]
395 В силу свойств функции $n(x)$, при $x < 0$ и $x > a$ имеем $(k^2 -
396 n(x)) \equiv 0$, так что несобственный интеграл можно заменить на
397 интеграл в конечных пределах от $0$ до $a$:
399 \[
400 u(x) = \int \limits_{0}^{a} {\frac{e^{ik\abs{x-t}}}{2ik} (k^2-n(t))
401 u(t) dt}
402 \]
404 Кроме того, если раскрыть модуль в показателе $e$ для $x<0$ и $x>a$,
405 то станет ясно, что выписанное решение содержит волны, уходящие в
406 $+\infty$ и $-\infty$. Так как постановка задачи содержит волну
407 $e^{ikx}$, приходящую из минус бесконечности, полное поле во всей
408 области от $-\infty$ до $+\infty$ имеет следующий вид:
410 \begin{equation}\label{inteq}
411 u(x) = \int \limits_{0}^{a} {\frac{e^{ik\abs{x-t}}}{2ik} (k^2-n(t))
412 u(t) dt} + e^{ikx}
413 \end{equation}
415 Сокращённо это интегральное уравнение Фредгольма второго рода
416 записывается в таком виде:
418 \begin{equation}\label{inteq-short}
419 u = \op{A}u + f
420 \end{equation}
422 Где $\op{A}$ — интегральный оператор $\int_{0}^{a}
423 {\frac{e^{ik\abs{x-t}}}{2ik} (k^2-n(t)) u(t) dt}$, который действует на
424 функцию $u(x)$.
426 При $x < 0$ решение имеет вид:
428 \[
429 u(x) = \frac{e^{-ikx}}{2ik} \int \limits_{0}^{a} {e^{ikt} (k^2-n(t))
430 u(t) dt} + e^{ikx}
431 \]
433 Откуда можно получить выражение для коэффициента $A$:
435 \begin{equation}\label{int-A}
436 A = \frac{1}{2ik} \int \limits_{0}^{a} {e^{ikt} (k^2-n(t)) u(t) dt}
437 \end{equation}
439 Аналогично получается следующее выражение и для коэффициента $B$:
441 \begin{equation}\label{int-B}
442 B = \frac{1}{2ik} \int \limits_{0}^{a} {e^{-ikt} (k^2-n(t)) u(t) dt} + 1
443 \end{equation}
445 Построение решения $u(x)$ производится при помощи метода
446 последовательных приближений\nocite{polyanin03}. Решение
447 \eqref{inteq-short} представим в таком виде:
449 \[
450 u = u_0 + u_1 + u_2 + \dotsb
451 \]
453 Его подстановка в \eqref{inteq-short} даёт следующее:
455 \[
456 u_0 + u_1 + u_2 + \dotsb = \op{A}u_0 + \op{A}u_1 +
457 \op{A}u_2 + \dotsb + f
458 \]
460 Если положить $u_0=f, u_1=\op{A}u_0, \dotsc, u_{n+1}=\op{A} u_n$, то
461 таким выбором последовательных приближений это уравнение будет
462 тождественно удовлетворено.
464 После нахождения $u(x)$ коэффициенты $A$ и $B$ вычисляются из
465 \eqref{int-A} и \eqref{int-B}, соответственно.
467 \clearpage
468 \subsection{Реализация}
470 Для обеспечения работы программы с широким диапазоном исходных данных
471 — различных функций $n(x)$ — интегрирование \eqref{inteq}
472 осуществлялось \emph{численно} по формуле Симпсона.
474 Подинтегральная функция зависит от двух переменных $x$, $t$, а
475 интегрирование производится по $t$. Используемая функция
476 \procname{integrate} возвращает $g(x) = \int_a^b{f(x, t) dt}$,
477 применяя формулу Симпсона так:
479 \begin{equation}\label{simpson}
480 \begin{split}
481 \int \limits_a^b {f(x, t) dt} = \frac{h}{3}
482 (f(x, a) + 4 (f(x, t_1) + f(x, t_3) + \dotsb + f(x, t_{n-1})) + \\
483 + 2 (f(x, t_2) + f(x, t_4) + \dotsb + f(x, t_{n-2})) + f(x, b))
484 \end{split}
485 \end{equation}
487 Здесь $n = 2k, k \in \mathbb{Z},\ h = (b-a)/n,\ t_k = a+kh$.
489 \procname{integrate} осуществляет интегрирование функции, переданной
490 ей в качестве параметра, по второму её аргументу:
492 \input{integrate__iterative-solution.scm-tag-listing}
494 Функция \procname{integrate} выражает идею интегрирования функции двух
495 переменных в общем виде. Для вычисления \eqref{inteq} требуется
496 использовать приближение функции $u(x)$ и данную по условию функцию
497 $n(x)$ в выражении $f(x,t) = e^{ik|x-t|}(k^2-n(t))u(t)$, которое и
498 будет интегрироваться (постоянный множитель $1/2ik$ выносится из под
499 интеграла). Требуемое сопоставление выполняет функция
500 \procname{green-transform}:
502 \input{green-transform__iterative-solution.scm-tag-listing}
504 Причём эта функция представлена в виде частного случая более общей
505 процедуры \procname{green-subtransform}, выполняющей преобразование
506 своих трёх аргументов-функций $u(t), n(t), g(x, t)$ в функцию двух
507 аргументов $f(x,t) = e^{ik \cdot g(x, t)}(k^2-n(t))u(t)$:
509 \input{green-subtransform__iterative-solution.scm-tag-listing}
511 Тогда при $g(x, t) \equiv \abs{x-t}$ получим подинтегральную функцию
512 из \eqref{inteq}, а при $g(x, t) \equiv -t$ — из выражения для
513 коэффициента $B$ \eqref{int-B}.
515 Функция \procname{green-integrate}, используя описанные
516 \procname{green-transform} и \procname{integrate}, выполняет
517 интегрирование \eqref{inteq}, принимая функции $u(x), n(x)$ и правый
518 край отрезка $a$ в качестве аргументов. В сущности,
519 \procname{green-integrate} представляет в терминах Scheme оператор
520 $\op{A}$ из \eqref{inteq-short}:
522 \input{green-integrate__iterative-solution.scm-tag-listing}
524 В этой функции также осуществляется деление результата интегрирования
525 на константу $2ik$.
527 Стоит заметить, что процедура \procname{integrate} (и, следовательно,
528 \procname{green-integrate}) возвращает не число, а
529 \emph{функцию}. Вычисление значения этой функции в любой точке $x_0$
530 порождает свёртку интервала $[0; a]$ в эту точку. Таким образом,
531 последовательное применение \procname{green-integrate} порождает
532 функцию, вычисление значения которой породит последовательность
533 вложенных свёрток на интервале $[0; a]$.
535 \subsubsection{Применимость метода}
536 \label{iter-converge}
538 Сходимость ряда последовательных приближений $u = u_0 + \op{A} u_0 +
539 \op{A}^2 u_0 \dotsb$ обеспечивается наличием константы $1/2ik$
540 перед интегралом \eqref{inteq}, если данные $a, n(x), k$ таковы, что
541 для $M=\max(k^2-n(x_0))$ выполняется:
543 \begin{equation}\label{iter-converge-cond}
544 \frac{Ma}{2k}<1
545 \end{equation}
547 В случаях, когда исходные данные не удовлетворяют этому условию, ряд
548 приближений разойдётся и получить решение не удастся, в то время как
549 при помощи фундаментальных матриц за приемлемое время решаются
550 уравнения в системах, где \eqref{iter-converge-cond} не выполняется.
552 Исходные данные (функция $n(x)$), предлагаемые к использованию в
553 настоящей курсовой работе, специально подобраны таким образом, чтобы
554 \eqref{iter-converge-cond} заведомо выполнялись.
556 \subsubsection{Эффективность реализации}
558 Высокий уровень применяемой абстракции и простота реализации метода
559 негативным образом сказываются на эффективности: создаваемая
560 последовательным действием \procname{green-integrate} композиция
561 свёрток — функция, вычисление которой в каждой точке требует большого
562 количества операций.
564 Сложность \procname{iterative-solve} по элементарным операциям
565 \procname{integrate} экспоненциально растёт с увеличением числа
566 применений оператора $\op{A}$ к начальному приближению.
568 При $u_k(x) = \underbrace{\op{A} \comp \dotsb \comp \op{A}}_k\ \comp\ u_0(x)$ для
569 вычисления значения $u_k(x_0)$ \emph{в любой точке} $x_0$ потребуется
570 выполнение $m^k$ операций, где $m$ — постоянное число элементарных
571 операций сложения, умножения в процедуре \procname{integrate},
572 зависящее от количества разбиений для интегрирования функции на $[0;
573 a]$).
575 Учитывая построение \emph{последовательных} приближений, то есть
576 последовательное вычисление $A \comp e^{ikx},\ A \comp A \comp
577 e^{ikx},\ A \comp A \comp A \comp e^{ikx},\dotsc$, количество
578 выполняемых операций таково, что описываемый подход к реализации
579 метода очевидно не может реально применяться на практике в расчётных
580 задачах в силу низкой эффективности.
582 \subsubsection{Другие подходы к реализации метода}
584 \paragraph{Символьное интегрирование}
586 Интеграл \eqref{inteq} может быть вычислен по формуле
587 Ньютона-Лейбница, если известна первообразная подинтегральной
588 функции. Её поиск в явном виде составляет задачу символьного
589 неопределённого интегрирования.
591 Интегрирование элементарных функций и их простых сочетний является
592 решаемой алгоритмически задачей, которая, однако, не является
593 тривиальной (по причинам, в большей степени относящейся к общим
594 сложностям представления алгебраических выражений на
595 компьютере). Сложные выражения под знаком интеграла приводят к
596 непростым заменам, преобразованиям и приёмам. Интеграл может и не
597 браться в явном виде.
599 Символьное интегрирование потенциально даёт значительно большие
600 преимущества, чем численное, но сравнительно сложнее в
601 реализации. Описанная же ранее численная реализация метода
602 последовательных приближений представляет собой почти дословный
603 перевод словесного описания в термины Лиспа.
605 \paragraph{Использование готового выражения первообразной}
607 Первообразная $e^{ik\abs{x-t}}(k^2-n(t))u(t)$ по $t$ может быть
608 получена сторонними средствами — в другой программе или вручную (что
609 является единственным универсальным и наиболее гибким методом
610 интегрирования). По затратам на количество операций, выполняемых на
611 стороне описываемой в настоящей работе программы, этот подход наиболее
612 эффективен, поскольку сводит задачу нахождения интеграла к совсем
613 элементарным операциям.
615 \clearpage
616 \subsection{Результаты}
618 Исходные данные к задаче приведены в разделе
619 \ref{statement.scm-initial-data} на странице
620 \pageref{statement.scm-initial-data}.
622 \input{iterative__statement.scm-results}
624 \includeplot{iterative}{statement.scm}
626 \clearpage
627 \section{Решение методом коллокации}
628 \subsection{Описание}
629 Рассмотрим данное по условию дифференциальное уравнение \eqref{deq}:
631 \begin{equation}\label{inteq-eps}
632 \epsilon [u(x)] = u'' + n(x) u(x) = 0
633 \end{equation}
635 Будем искать его решение в виде
637 \begin{equation}\label{colloc-approx}
638 U_n(x) = \phi_0(x) + \sum_{m=1}^n{C_m \phi_m(x)}
639 \end{equation}
641 Здесь $\phi_m(x)$ — система линейно независимых \emph{базисных}
642 функций. Подставив \eqref{colloc-approx} в \eqref{inteq-eps}, получим
643 невязку $\epsilon [U_n(x)]$:
645 \[
646 \epsilon[U_n(x)]=\left [\phi_0(x)+\sum_{m=1}^n{C_m \phi_m(x)} \right
647 ]''+
648 n(x){\left [\phi_0(x)+\sum_{m=1}^n{C_m \phi_m(x)} \right ]}
649 \]
651 или
653 \begin{equation}\label{colloc-eps}
654 \epsilon[U_n(x)]=\psi_0(x)+\sum_{m=1}^n{C_m \psi_m(x)}
655 \end{equation}
657 где
659 \begin{align*}
660 \psi_0(x)& =\phi_0''(x) + n(x) \phi_0(x) \\
661 \psi_m(x)& =\phi_m''(x) + n(x) \phi_m(x)
662 \end{align*}
664 Метод коллокации предполагает поиск значений $C_m$ таких, что
665 \eqref{inteq-eps} обращается в 0 в заданной системе из $n$ \emph{точек
666 коллокации} $0 \leq x_1 < \dotsb < x_n \leq a$ принадлежащих
667 рассматриваемому отрезку $[0;a]$:
669 \begin{equation}
670 \epsilon[U_n(x_j)] = 0,\qquad j = 1 \dotso n
671 \end{equation}
673 Используя \eqref{inteq-eps} получаем систему из $n$ линейных уравнений
674 для определения значений $C_m$:
676 \begin{equation}\label{colloc-system}
677 \sum_{m=1}^n{C_m\psi_m(x_j)} = -\psi_0(x_j),\qquad j = 1 \dotso n
678 \end{equation}
680 В случае совместности \eqref{colloc-system} найденные коэффициенты
681 $C_m$ используются в выражении для приближённого решения
682 \eqref{colloc-approx}.
684 \subsubsection{О выборе системы базисных функций}
685 В уравнении \eqref{colloc-eps} члены $\psi_0(x)$ и $\psi_m(x)$
686 разделены не случайно: при выборе системы $\phi_k$ (а значит и
687 $\psi_k$) требуется учитывать набор краевых условий \eqref{conds}.
689 Метод коллокации требует от первой базисной функции $\phi_0(x)$
690 удовлетворения набору неоднородных краевых условий \eqref{conds}, а от
691 $\phi_m(x),\ m>0$ — удовлетворения соответствующим однородным краевым
692 условиями.
694 \subsection{Реализация}
696 \clearpage
697 \subsection{Результаты}
699 \clearpage
700 \section{Сопоставление результатов}
702 Сравнение результатов вычислений для одних и тех же исходных данных
703 (см. с. \pageref{statement.scm-initial-data}) при помощи различных
704 методов — построением фундаментальной матрицы и решением интегрального
705 уравнения последовательными приближениями — позволяет проверить
706 корректность реализации обоих методов:
708 \begin{figure}[hb]
709 \centering
710 \includegraphics{statement.scm-all-plots.mps}
711 \caption{Графики решения для \eqref{statement.scm-initial-data},
712 полученные двумя разными методами}
713 \end{figure}
715 \clearpage
716 \appendix
717 \part{Исходные тексты}
718 \section{Общие файлы}
719 \input{shared.scm-full-listing}
720 \input{matrices.scm-full-listing}
721 \input{gauss.scm-full-listing}
723 \clearpage
724 \section{Реализации методов решения}
725 \subsection{Метод построения фундаментальной матрицы}
727 \input{fundmatrix-solution.scm-full-listing}
729 \clearpage
730 \subsection{Метод последовательных приближений}
732 \input{iterative-solution.scm-full-listing}
734 \clearpage
735 \subsection{Метод коллокации}
737 \clearpage
738 \section{Диспетчер}
740 \input{dispatcher.scm-full-listing}
742 \clearpage
743 \part{Информация о документе}
745 Данный документ был подготовлен с использованием \LaTeX{}.
747 Для автоматизации сборки отчёта о курсовой работе применялась
748 сборочная система \texttt{GNU Make}. Для извлечения определений
749 процедур из исходного кода использовались сценарии командной оболочки
750 и \texttt{GNU Emacs}. С их же помощью был автоматизирован процесс
751 включения результата расчётов в курсовую работу. Графики решений были
752 построены по данным, предоставленным расчётной программой, при помощи
753 средств \MP.
755 Для автоматического определения зависимостей
756 \LaTeX{}-файла использовалась утилита \texttt{texdepend}.
758 \nocite{demidovich67}
760 \bibliographystyle{gost780s}
761 \bibliography{report}
763 \end{document}