http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&user=Niko&feedformat=atomВикиконспекты - Вклад участника [ru]2024-03-19T03:32:37ZВклад участникаMediaWiki 1.30.0http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B5%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%91%D0%B5%D1%80%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0&diff=27075Неравенство Бернштейна2012-06-26T15:46:14Z<p>Niko: </p>
<hr />
<div>[[Явление Гиббса|<<]][[Об обратных теоремах теории приближения функций|>>]]<br />
<br />
{{В разработке}}<br />
<br />
<tex>T_n(x) = \frac{a_0}2 + \sum\limits_{k=1}^n (a_k \cos kx + b_k \sin kx)</tex><br />
<br />
{{Теорема<br />
|author=Бернштейн<br />
|statement=<tex>\max\limits_{x\in\mathbb{R}} |T'_n(x)| \le n\cdot\max\limits_{x\in\mathbb{R}} |T(x)|</tex>. Константу <tex>n</tex> уменьшить нельзя<br />
|proof=<br />
<tex>T_n = \sin nx \Rightarrow T'_n = n \cos nx</tex>. Здесь <tex>n</tex> уменьшить нельзя.<br />
<br />
Так как это неравенство понадобится для так называемых обратных задач теории приближений, то мы приведём доказательство более грубого неравенства, но порядок константы будет тот же самый: вместо <tex>n</tex> будет <tex>2n</tex>. Доказательство классического неравенства более трудное. Однако, наше можно доказать, используя <tex>L_p</tex>.<br />
<br />
Основываемся на том, что тригонометрический полином {{---}} ряд Фурье самого себя. Запишем его через интеграл Дирихле.<br />
<br />
<tex>T_n(x) = \int\limits_Q T_n(t)D_n(x-t) dt = \int\limits_Q T_n(t)D_n(t-x)dt</tex><br />
<br />
Дифференцируем по <tex>x</tex>. Интеграл дифференцировать можно, так как промежуточный интеграл конечен, а под интегралом {{---}} тригонометрический полином.<br />
<br />
<tex>T'_n(x) = -\int\limits_Q T_n(t)D'_n(t-x) dt = \int\limits_Q T_n(x+t)D'_n(t)dt</tex><br />
<br />
<tex>T'_n(x) = \int\limits_Q T_n(x+t) D'_n(t) dt</tex><br />
<br />
<tex>D_n(t) = \frac1\pi\left(\frac12 + \sum\limits_{k=1}^n \cos kt \right)</tex><br />
<br />
<tex>D'_n(t) = -\frac1\pi \sum\limits_{k=1}^n k\sin kt</tex><br />
<br />
Воспользуемся ортогональностью тригонометрической системы. Принимая по внимание то, что под знаком интеграла полином степени не выше <tex>n</tex>:<br />
<br />
<tex>G(t) = \sum\limits_{k=n+1}^pc_k\cos kt + d_k\sin kt</tex><br />
<br />
<tex>\int\limits_Q T_n(x+t)D'_n(t) dt</tex> [в силу ортогональности] <tex>=\int\limits_Q T_n(x+t)(D'_n(t)-G(t)) dt</tex><br />
<br />
Вспомним об ядре Фейера<br />
<br />
<tex>\Phi_n(t) = \frac1{n+1} \sum\limits_{k=0}^n D_k(t)</tex> <tex>= \frac1{\pi(n+1)}\left(\frac12 + \sum\limits_{k=1}^n \left(\frac12 + \sum\limits_{j=1}^k \cos jt \right) \right)</tex> <tex>= \frac1{\pi(n+1)} \left( \frac{n+1}2 + \sum\limits_{j=1}^n \cos jt \sum\limits_{k=j}^n 1 \right) </tex> <tex>= \frac1{\pi(n+1)} \left(\frac{n+1}2 + \sum\limits_{j=1}^n (n-j+1)\cos jt\right)</tex> <tex>= \frac1{2\pi} + \frac1\pi \sum\limits_{j=1}^n \left(1 - \frac{j}{n+1}\right) \cos jt</tex><br />
<br />
Итого: <tex>\Phi_n(t) = \frac1{2\pi} + \frac1\pi \sum\limits_{j=1}^n\left(1-\frac{j}{n+1}\right)\cos jt</tex><br />
<br />
<tex>G(t) = \frac{1}{\pi}\sum\limits_{k=1}^{n-1} k \sin (2n -k)t</tex> Это тот полином, который можно подставить в интеграл.<br />
<br />
<tex>T'_n(x) = \int\limits_Q T_n(x+t)(-\frac1\pi)\left( \sum\limits_{k=1}^n k\sin kt + \sum\limits_{k=1}^{n-1} k\sin(2n-k)t \right) dt</tex> <tex>= -\int\limits_Q T_n(x+t)\frac1\pi(n\sin nt + \sum\limits_{k=1}^{n-1} k(\sin kt+\sin(2n-k)t)) dt</tex> <tex>= -\int\limits_Q T_n(x+t)\frac1\pi \left(n\sin nt + 2\sum\limits_{k=1}^{n-1} k\sin nt \cdot \cos (n-k)t\right) dt</tex> <tex>= -\int\limits_Q T_n(k+t)\frac{2n}\pi\sin nt \left(\frac12 + \frac1n\sum\limits_{k=1}^{n-1} k\cos(n-k)t\right) dt</tex> <tex>=-\int\limits_Q T_n(x+t)\frac{2n}\pi \sin nt \left(\frac12 + \sum\limits_{j=1}^{n-1} \frac{n-j}n \cos jt\right) dt</tex><br />
<br />
Итого: <tex>T'_n(x) = -2n\int\limits_QT_n(x+t)\sin nt \Phi_{n-1}(t)dt</tex><br />
<br />
<tex>\Phi_n</tex> {{---}} неотрицательное и нормированное.<br />
<br />
<tex>\|f\|_\infty = \max\limits_{x\in\mathbb{R}} |f(x)|</tex> <tex>\Rightarrow</tex> <tex>\|f(t + x)\|_\infty = \|f(t)\|_\infty</tex>, <tex>\|f\|_\infty</tex> не зависит от <tex> x </tex>.<br />
<br />
<tex>|\sin nt| < 1</tex>, <tex>\|T'_n\| \le 2n \|T_n\| \cdot \int\limits_Q\Phi_n(t)dt = 2n\|T_n\|</tex><br />
<br />
Ослабленное неравенство Бернштейна установлено.<br />
}}<br />
<br />
[[Явление Гиббса|<<]][[Об обратных теоремах теории приближения функций|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%AF%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%93%D0%B8%D0%B1%D0%B1%D1%81%D0%B0&diff=27071Явление Гиббса2012-06-26T15:25:28Z<p>Niko: </p>
<hr />
<div>[[Об интеграле Фурье|<<]][[Неравенство Бернштейна|>>]]<br />
<br />
{{В разработке}}<br />
<br />
{{Определение<br />
|definition=''Явление Гиббса'' {{---}} некоторое особое поведение частичных сумм ряда Фурье в окрестности точки разрыва разлагаемой функции.<br />
}}<br />
<br />
С целью упрощения вычислений рассмотрим на примере функции, равной знаку числа <tex>f(x) = \operatorname{sign} x</tex>, <tex>2\pi</tex>-периодизованной. Эта функция удовлетворяет условию [[Сходимость ряда Фурье в индивидуальной точке#Теорема Дини | теоремы Дини]] в каждой точке, значит, в каждой точке её можно разложить в ряд Фурье. <tex>f(x) </tex> {{---}} нечётная, значит, будет ряд только по синусам:<br />
<br />
<tex>s_n(x) = \int\limits_Q f(t) D_n(t-x) dt = \int\limits_0^\pi + \int\limits_{-\pi}^0 = -1 \cdot \int\limits_{-\pi}^0 D_n(t-x)dt + 1 \cdot \overset{t:=-y}{\int\limits_0^\pi D_n(t-x)dt}</tex> <tex>=\int\limits_0^\pi D_n(t-x) dt - \int\limits_0^\pi D_n(t+x)dt</tex> <tex>=\int\limits_{-x}^{\pi-x} D_n(t)dt - \int\limits_x^{\pi+x} D_n(t) dt</tex> <tex>= \int\limits_{-x}^x + \int\limits_x^{\pi-x} - \int\limits_x^{\pi+x}</tex> <tex>= \int\limits_{-x}^x - \left(\int\limits_x^{\pi+x} - \int\limits_x^{\pi-x}\right)</tex> <tex>=\int\limits_{-x}^x - \int\limits_{\pi-x}^{\pi+x}</tex> <tex>=\int\limits_{-x}^x (D_n(t) - D_n(\pi + t))dt</tex><br />
<br />
Итого: <tex>s_n(x) = \int\limits_{-x}^x (D_n(t) - D_n(\pi + t)) dt</tex><br />
<br />
<tex>D_n(t) - D_n(\pi + t) = \frac1\pi \frac{\sin [(n+1/2)t - (-1)^n t/2]}{\sin t}</tex><br />
<br />
<tex>n + \frac{1-(-1)^n}2 = 2\left[\frac{n+1}2\right]</tex><br />
<br />
<tex>s_n(x) = \frac1\pi\int\limits_{-x}^x \frac{\sin 2\left[\frac{n+1}2\right]t}{\sin t} dt</tex><br />
<br />
Продифференцируем по <tex>x</tex>:<br />
<tex>s'_n(x) = \frac2\pi \frac{\sin 2\left[\frac{n+1}2\right]x}{\sin x}</tex>, <tex>x \in \langle 0; \pi\rangle</tex><br />
<br />
<tex>s'_n(x_{m_n}) = 0</tex>, <tex>x_{m_n} = \frac\pi{m_n}</tex>, <tex>2\left[\frac{n+1}2\right] = m_n</tex><br />
<br />
Путём дифференциального исчисления проверяем, что <tex>x_{m_n}</tex> {{---}} точка максимума. <br />
<br />
<tex>s_n(x_{m_n}) = \frac2\pi \int\limits_0^{x_{m_n}} \frac{\sin m_nt}{\sin t} dt=</tex> (заменим переменную на <tex>m_n t</tex>) <tex>= \frac2\pi \int\limits_0^\pi \frac{\sin t}t \frac{t/m_n}{\sin t/m_n} dt</tex><br />
<br />
<tex> \frac{t/m_n}{\sin t/m_n} \xrightarrow[n \to \infty]{} 1</tex>, <tex>\frac{t}{\sin t}</tex> возрастает, значит, к этому интегралу применима [[Предельный переход под знаком интеграла Лебега | теорема Лебега о предельном переходе под знаком интеграла]]:<br />
<br />
<tex>s_n(x_{m_n}) > s_{n+1}(x_{m_{n+1}})</tex><br />
<br />
<tex>s_n(x_{m_n}) \to \frac2\pi\int\limits_0^\pi\frac{\sin t}t dt \approx 1,17\ldots</tex><br />
<br />
Смысл полученного в следующем: функция пройдёт через точку максимума <tex>>1</tex> и резко пойдёт в ноль. Явление {{---}} явление Гиббса, он обнаружил физический эффект, связаный с математическим поведением этих сумм.<br />
<br />
== См. также ==<br />
[http://en.wikipedia.org/wiki/Gibbs_phenomenon Wikipedia — Gibbs phenomenon]<br />
<br />
[[Об интеграле Фурье|<<]][[Неравенство Бернштейна|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%94%D0%B6%D0%B5%D0%BA%D1%81%D0%BE%D0%BD%D0%B0&diff=27064Теорема Джексона2012-06-26T14:12:57Z<p>Niko: /* Следствия */</p>
<hr />
<div>Пофиксите в общем, эту муть, а то я уже офигеваю с этого. --[[Участник:Dgerasimov|Дмитрий Герасимов]] 21:32, 24 июня 2012 (GST)<br />
{{В разработке}}<br />
Ранее нами введено [[Наилучшее приближение в линейных нормированных пространствах | наилучшее приближение]] в <tex> C </tex>:<br />
<br />
<tex> E_n(f)_C = E_n(f) = \inf \| f - T \|_C, T \in H_n </tex>.<br />
<br />
Наилучшее приближение:<br />
<br />
<tex> \exists T_n(f)_C = T_n(f): E_n(f) = \| f - T_n(f) \|_C </tex> — полином наилучшего приближения.<br />
<br />
<tex> E_n(f) </tex> — полунорма, <tex> \forall T \in H_n, E_n(T) = 0 </tex>. <tex> E_n(f) = E_n(f + T) </tex><br />
<br />
<tex> \omega(f, h)_C </tex> — [[модуль непрерывности функции]] <tex> = \sup\limits_{|t| \le h} \| f(\cdot + t) - f(\cdot) \|_C = \sup\limits_{|x_2 - x_1| \le h} |f(x_2) - f(x_1)| </tex><br />
<br />
[[Наилучшее приближение в линейных нормированных пространствах | Ранее]] было установлено, что <tex> E_n(f)_C \xrightarrow[n \to \infty]{} 0 </tex>.<br />
<br />
Группу теорем, которая позволяет судить о скорости стремления наилучшего приближения к нулю называют «прямыми теоремами теории аппроксимации функций (конструктивной теории функций)». Одной из характеристик, которой описывают структурные свойства фунции, является модуль непрерывности.<br />
<br />
Чтобы судить о <tex> E_n(f) </tex>, надо строить приближение функции в виде полинома таким образом, чтобы уметь оценивать его отклонение от самой функции в терминах модуля непрерывности. Тогда само отклонение будет не меньше модуля непрерывности, и само приближение будет оценено через него. <br />
<br />
Типичный прием — интегрирование свертки с тригонометрическим ядром. <br />
<br />
<tex> s_n(f, x) = \int\limits_Q f(x + t) D_n(t) dt </tex><br />
<br />
<tex> \sigma_n(f, x) = \int\limits_Q f(x + t) \Phi_n(t) dt </tex><br />
<br />
Получающиеся интегралы являются тригонометрическими полиномами. <br />
<br />
<tex> A(f, x) = \int\limits_Q f(x + t) J_n(t) dt, J_n </tex> — тригонометрический полином, произвольное ядро. Заменим <tex> y = x + t </tex>.<br />
<br />
<tex> A(f, x) = \int\limits_Q f(y) J_n(y - x) dy </tex><br />
<br />
<tex> J_n(y - x) = T_n(x) </tex> — тригонометрический полином по <tex> x </tex>, коэффициенты которого зависят от <tex> y </tex>.<br />
<br />
<tex> A(f, x) = \int\limits_Q f(x + t) J_n(t) dt </tex>.<br />
<br />
Пусть <tex> \int\limits_Q J_n(t) = 1, J_n(t) \ge 0 </tex>.<br />
<br />
<tex> |f(x) - A(f, x)| \le \int\limits_Q |f(x + t) - f(x)| J_n(t) dt \le \int\limits_Q \omega(f, |t|) J_n(t) dt </tex><br />
<br />
<tex>\le \int\limits_Q \omega^*(f, |t|) J_n(t) dt \le </tex> (применим [[Выпуклые функции#Неравенство Йенсена | неравенство Йенсена]] для выпуклых функций) <tex> \le \omega^*(f, \int\limits_Q |t| J_n(t) dt) \le 2 \omega(f, \int\limits_Q |t| J_n(t) dt) </tex><br />
<br />
<tex> f </tex> — непрерывная, <tex> 2 \pi </tex> - периодическая функция.<br />
<br />
<tex> \| f - A(f) \|_C \le 2 \omega (f, \int\limits_Q |t| J_n(t) dt) </tex>, где <tex> \int\limits_Q |t| J_n(t) dt </tex> называется первым, абсолютным моментом ядра.<br />
<br />
Из этого неравенства видно, что суть получения основных теорем состоит в том, чтобы удачно подобрать усредняющее ядро, чтобы <tex> \omega \to 0 </tex> при <tex> n \to \infty </tex>.<br />
<br />
Одним из этих ядер является ядро Джексона.<br />
{{Определение<br />
|definition=<br />
Ядро Джексона — тригонометрический полином, определяющийся как <tex> d_n(t) = \frac1{2 \pi n (2 n^2 + 1)} \left( \frac{\sin\frac{nt}{2}}{\sin\frac{t}{2}} \right)^4 </tex>, <tex> d_n(t) \in H_{2n-2} </tex>.<br />
}}<br />
<br />
<tex> \int\limits_Q d_n(t) = 1 </tex> {{TODO|t=а доказать?}}<br />
<br />
{{Утверждение<br />
|statement=<br />
<tex> \int\limits_0^{\pi} t d_n(t) \le \frac{3}{4} \frac{1}{n} </tex><br />
|proof=<br />
<tex> \int\limits_0^{\pi} = \int\limits_0^{\frac{\pi}{2n}} + \int\limits_{\frac{\pi}{2n}}^{\pi} </tex><br />
<br />
<tex> \int\limits_0^{\frac{\pi}{2n}} t \frac{1}{2 \pi n (2 n^2 + 1)} \left( \frac{\sin\frac{nt}{2}}{\sin\frac{t}{2}} \right)^4 dt \le </tex><br />
<tex> \int\limits_0^{\frac{\pi}{2n}} t \frac{n^4}{2 \pi n (2 n^2 + 1)} dt = \frac{1}{2} \left( \frac{\pi}{2 n} \right)^2 \frac{n^3}{2 \pi (2n^2 + 1)} \le a \frac{1}{n} </tex><br />
<br />
<tex> \int\limits_{\frac{\pi}{2n}}^{\pi} t \frac{\pi^4}{t^4} \frac{1}{2 \pi n (2 n^2 +1)} dt = \frac{1}{2} \frac{1}{2 \pi n (2n^2 +1)} \left( \frac{4 n^2}{\pi^2} - \frac{1}{\pi^2} \right) \le b \frac{1}{n} </tex>. Неравенство установили.<br />
}}<br />
<br />
== Теорема Джексона ==<br />
<br />
{{Теорема<br />
|author=<br />
Джексон<br />
|statement=<br />
<tex> f \in C \Rightarrow E_n(f) \le 2 \omega (f, \frac{3 \pi}{n + 1}) </tex><br />
|proof=<br />
<tex> Y(f, x) = \int\limits_Q f(x + t) d_n(t) dt </tex> — интеграл Джексона<br />
<br />
<tex> Y_n(f) \in H_{2n - 2} </tex> <br />
<br />
<tex> E_{2n - 2} (f) \le \| f - Y_n(f) \| \le 2 \omega (f, \int\limits_Q |t| d_n(t) dt) \le 2 \omega (f, \frac{3}{4 n}) \le 2 \omega (f, \frac{3 \pi}{2 n}) </tex><br />
<br />
Для четных членов:<br />
: <tex> E_{2n - 2} (f) \le 2 \omega (f, \frac{3 \pi}{2 n}) </tex><br />
: <tex> \frac{3 \pi}{(2n - 2) + 1} = \frac{3 \pi}{2n - 1} > \frac{3 \pi}{2 n}</tex><br />
Дле нечетных:<br />
: <tex> E_{2n - 1} (f) \le E_{2n - 2} (f) \le 2 \omega (f, \frac{3 \pi}{2 n}) </tex><br />
: <tex> \frac{3 \pi}{(2n - 1) + 1} = \frac{3 \pi}{2 n}</tex><br />
<br />
Приходим к требуемому неравенству соединяя эти два, что и требовалось.<br />
}}<br />
<br />
== Следствия ==<br />
<br />
<tex> f \in C^1 </tex> — непрерывная, дифференциируемая<br />
<br />
<tex> |f(x + t) - f(x)| = |f'(x + \theta t)| |t|, |f'(x + \theta t)| \le \| f' \|_C </tex><br />
<br />
<tex> \omega(f, h) \le \| f' \|_C h </tex><br />
<br />
<tex> \omega(f, \frac{3 \pi}{n + 1}) \le \| f' \|_C \frac{3 \pi}{n + 1} </tex><br />
<br />
Следствие:<br />
<br />
<tex> f \in C^1 \Rightarrow E_n(f) \le \| f' \|_C \frac{6 \pi}{n + 1} </tex><br />
<br />
<tex> f \in C^{(p)} </tex> <br />
<br />
<tex> E_n(f) = E_n(f + T), T \in H_n </tex> <br />
<br />
Рассмотрим <tex> T_n(f') </tex>. Как и при почленном интегрировании рядов Фурье если из него вычесть его нулевой коэффициент Фурье и написать интеграл от <tex> 0 </tex> до <tex> x </tex>, мы получим тригонометрический полином.<br />
<br />
<tex> \int\limits_0^x (T_n(f', t) - \frac{1}{2} a_0 (T_n(f'))) dt \in H_n </tex> <br />
<br />
Подставим это в предыдущее равенство вместо <tex> T </tex>:<br />
<br />
<tex> E_n(f) = E_n(f - \int\limits_0^x T_n(f', t) - \frac12 a_0(T_n(f')) dt) \le \frac{6 \pi}{n + 1} \| g' \| = \frac{6 \pi}{n + 1} \| f' - T_n(f') + \frac12 a_0(T_n(f'))) \| \le \frac{6 \pi}{n + 1} ( \| f' - T_n(f') \| + \frac12 | a_0(T_n (f'))|) (\star)</tex> <br />
<br />
<tex> \frac12 a_0(T_n(f')) = \frac{1}{2 \pi} \int\limits_Q T_n (f', x) dx </tex> <br />
<br />
<tex> f' </tex> — <tex> 2 \pi </tex>-периодична <tex> \Rightarrow \int\limits_Q f' = f(\pi) - f(-\pi) = 0 </tex><br />
<br />
<tex> \frac12 a_0(T_n(f')) = \frac{1}{2 \pi} \int\limits_Q (T_n(f', x) - f'(x))dx </tex> <br />
<br />
<tex> |\frac12 a_0(T_n(f'))| \le \| T_n(f') - f'\| = E_n(f') </tex>. Подставим в <tex>(\star)</tex> и получим в итоге следующее:<br />
<br />
{{Утверждение<br />
|statement=<br />
<tex> f \in C^1 \Rightarrow E_n(f) \le \frac{12 \pi}{n + 1} E_n(f') </tex><br />
|proof=<br />
Следует из написанного выше.<br />
}}<br />
<br />
<tex> p = 1: E_n(f) \le \| f' \| \frac{6 \pi}{n + 1} </tex> <br />
<br />
<tex> p = 2: E_n(f) \le \frac{12 \pi}{n + 1} E_n(f') \le 2 (\frac{6 \pi}{n+1})^2 \| f'' \|_C </tex><br />
<br />
По индукции приходим к:<br />
<br />
<tex> f \in C^{(p)} \Rightarrow E_n(f) \le c_p \frac{1}{(n+1)^p} \| f^{(p)} \|_C, c_p</tex>, где <tex>c_p</tex> — константа.<br />
<br />
То есть чем больше дифференциируемая(гладкая) функция, тем быстрее наилучшее приближение стремится к нулю.<br />
<br />
[http://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_%D0%94%D0%B6%D0%B5%D0%BA%D1%81%D0%BE%D0%BD%D0%B0 Википедия — Ядро Джексона]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D1%83%D0%B7%D0%B8%D0%BD%D0%B0-%D0%94%D0%B0%D0%BD%D0%B6%D1%83%D0%B0&diff=27061Теорема Лузина-Данжуа2012-06-26T13:32:16Z<p>Niko: </p>
<hr />
<div>[[L_2-теория рядов Фурье|<<]][[Теорема Джексона|>>]]<br />
<br />
Рассмотрим произвольный тригонометрический ряд:<br />
<br />
<tex> \frac{a_0}{2} + \sum\limits_{n=1}^{\infty} (a_n \cos nx + b_n \sin nx) </tex> <br />
<br />
<tex> |a_n \cos nx + b_n \sin nx| \le |a_n| + |b_n| </tex> <br />
<br />
Если <tex> \sum\limits_{n=1}^{\infty} (|a_n| + |b_n|) </tex> сходится, то тригонометрический ряд будет абсолютно сходящимся. <br />
<br />
Обратное в общем случае неверно, тригонометрический ряд может абсолютно сходиться в бесконечном числе точек, но при этом числовой будет расходиться.<br />
<br />
Рассмотрим, например, <tex> \sum\limits_{n=1}^{\infty} \sin (n! x), x_k = \frac{\pi}{k!} </tex>, тогда при <tex> n \ge k: \sin(n! x_k) = \sin(\pi n (n - 1) \dots (k + 1)) = 0 </tex>, то есть, ряд абсолютно сходится. Однако, <tex> b_{n!} = 1 </tex>, и ряд из коэффициентов расходится.<br />
<br />
Однако, есть важная теорема:<br />
<br />
<tex> a_n \cos nx + b_n \sin nx = \sqrt{a_n^2 + b_n^2} \cos (nx + \varphi_n) </tex><br />
<br />
<tex> \sqrt{a_n^2 + b_n^2} \le |a_n| + |b_n| \le \sqrt 2 \sqrt{a_n^2 + b_n^2} </tex>, следовательно, ряды <tex> \sum\limits_1^{\infty} (|a_n| + |b_n|) </tex> и <tex> \sum\limits_1^{\infty} \sqrt{a_n^2 + b_n^2}) </tex> равносходятся.<br />
<br />
{{Теорема<br />
|author=<br />
Лузин, Данжуа<br />
|statement=<br />
Пусть тригонометрический ряд абсолютно сходится на множестве положительной меры. Тогда ряд из <tex> r_n = \sqrt{a_n^2 + b_n^2} </tex> сходится, следовательно, исходный тригонометрический ряд будет абсолютно сходящимся на всей числовой оси.<br />
|proof=<br />
<tex> \sum\limits_{n=1}^{\infty} r_n |\cos (nx + \varphi_n)| </tex> — сходится для любого <tex> x </tex> в <tex> A </tex> по условию теоремы, где <tex> \lambda A > 0 </tex>.<br />
<br />
Пусть <tex> \alpha(x) = \sum\limits_{n=1}^{\infty} r_n \cos^2(nx + \varphi_n) </tex>. <tex> \alpha(x) </tex> измерима и конечна на <tex> A </tex>, так как <tex> r_n \cos^2(nx + \varphi_n) \le r_n |\cos(nx + \varphi_n)| </tex>.<br />
<br />
Тогда <tex> \exists A_0 \subset A: \lambda A_0 > 0, \alpha(x) </tex> — ограничена на <tex> A_0 </tex>. <tex> A = \bigcup\limits_{n = 1}^{\infty} A(0 \le \alpha(x) \le n), \lambda A > 0 \Rightarrow \lambda A_n \to \lambda A \Rightarrow \exists n_0 : \lambda A_{n_0} > 0 </tex>, обозначим такой <tex>A_{n_0} </tex> за <tex> A_0 </tex>.<br />
<br />
На <tex> A_0 </tex> <tex> \alpha </tex> — суммируема, по [[Классические теоремы о предельном переходе под знаком интеграла Лебега#Теорема Леви|теореме Б. Леви]], ряд можно почленно интегрировать. <br />
<br />
<tex> \int\limits_{A_0} \alpha(x) dx = \sum\limits_{n=1}^{\infty} r_n \int\limits_{A_0} \cos^2(nx + \varphi_{n, x}) = \sum\limits_{n=1}^{\infty} r_n \int\limits_{A_0} \frac{1 + \cos(2nx + 2\varphi_{n, x})}{2} = </tex><br />
<br />
<tex> = \sum\limits_{n=1}^{\infty} \frac12 r_n \left( \lambda A_0 + \int\limits_{A_0} \cos(2\varphi_{n,x}) \cos (2nx) - \int\limits_{A_0} \sin(2\varphi_{n,x}) \sin (2nx) \right) </tex>. Оба интеграла стремятся к нулю по лемме Римана-Лебега, следовательно, разность этих интегралов с некоторого номера больше <tex> -\frac12 \lambda A_0 </tex> , а значит, <tex> n </tex>-е слагаемое ряда больше <tex> \frac12 r_n \frac12 \lambda A_0 </tex>. Значит, из сходимости исходного ряда по признаку сравнения следует сходимость <tex> \sum\limits_{n=1}^{\infty} r_n </tex>.<br />
}}<br />
<br />
Таким образом, отождествили сходимость рядов <tex> \sum\limits_{n=1}^{\infty} (a_n \cos nx + b_n \sin nx) </tex> и <tex> \sum\limits_{n=1}^{\infty} (|a_n| + |b_n|) </tex>.<br />
<br />
Запишем условие абсолютной сходимости на языке наилучших приближений.<br />
<br />
{{Теорема<br />
|statement=<br />
<tex> f \in L_2, \sum\limits_{n=1}^{\infty} \frac{E_n(f)_{L_2}}{\sqrt n} < + \infty </tex><br />
<br />
Тогда ряд Фурье абсолютно сходится.<br />
|proof=<br />
<tex> E_n^2(f)_2 = \pi \sum\limits_{k=n+1}^{\infty} (a_k^2 (f) + b_k^2 (f)) </tex>. Для абсолютной сходимости достаточно доказать, что <tex> \sum\limits_{k=1}^{\infty} \sqrt{a_k^2 + b_k^2} < + \infty </tex> в условиях теоремы.<br />
<br />
<tex>\sum\limits_{k=1}^{\infty} \sqrt{a_k^2 + b_k^2} =</tex> <tex> \sum\limits_{n=1}^{\infty} \sum\limits_{k = n}^{\infty} \frac{\sqrt{a_k^2 (f) + b_k^2 (f)}}{k} \le </tex> (используем [[Неравенства Гёльдера, Минковского#Теорема Гёльдера|неравенство Коши для сумм]])<br />
<tex> \le \sum\limits_{n=1}^{\infty} \left( \sum\limits_{k=n}^{\infty}(a_k^2 + b_k^2) \right)^{\frac12} \left( \sum\limits_{k=n}^{\infty} \frac1{k^2} \right)^{\frac12} </tex><br />
<br />
<tex> \left( \sum\limits_{k=n}^{\infty}(a_k^2 + b_k^2) \right)^{\frac12} </tex> равно <tex> E_{n-1}(f)_2 </tex><br />
<br />
<tex> \left( \sum\limits_{k=n}^{\infty} \frac1{k^2} \right)^{\frac12} \le \left( \sum\limits_{k=n}^{\infty} \frac1{k}\frac1{k-1} \right)^{\frac12} \le \left( \sum\limits_{k=n}^{\infty} \frac1{k-1} - \frac1k \right)^{\frac12} \le \frac{1}{\sqrt{n-1}} </tex><br />
<br />
Таким образом, получили, что <tex>\sum\limits_{k=1}^{\infty} \sqrt{a_k^2 + b_k^2} \le \sqrt{a_1^2 + b_1^2} + \sum\limits_{n=2}^{\infty} \frac{cE_{n-1}(f)_{L_2}}{\sqrt{n-1}} < + \infty </tex>, таким образом, ряд из <tex> r_n </tex> сходится.<br />
}}<br />
<br />
== См. также ==<br />
[http://en.wikipedia.org/wiki/Denjoy%E2%80%93Luzin_theorem Denjoy-Luzin_theorem]<br />
<br />
[[L_2-теория рядов Фурье|<<]][[Теорема Джексона|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26992L 2-теория рядов Фурье2012-06-25T21:37:58Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1{\sqrt\pi} \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty}( a_n(f) \cos nx + b_n(f) \sin nx)</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ряд <tex>\sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: (<tex>\forall j : \langle x, e_j\rangle = 0) \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n, \ldots) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists n \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26991L 2-теория рядов Фурье2012-06-25T21:34:46Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1{\sqrt\pi} \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty}( a_n(f) \cos nx + b_n(f) \sin nx)</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ряд <tex>\sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: (<tex>\forall j : \langle x, e_j\rangle = 0) \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n, \ldots) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26983L 2-теория рядов Фурье2012-06-25T20:58:57Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1{\sqrt\pi} \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty}( a_n(f) \cos nx + b_n(f) \sin nx)</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ряд <tex>\sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26980L 2-теория рядов Фурье2012-06-25T20:56:27Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1{\sqrt\pi} \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_n(f) \cos nx + b_n(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ряд <tex>\sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26978L 2-теория рядов Фурье2012-06-25T20:53:08Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1{\sqrt\pi} \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26975L 2-теория рядов Фурье2012-06-25T20:38:40Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Определение<br />
|definition=<br />
Ряд <tex> \sum\limits_{k = 1}^{\infty} x_k </tex> является '''ортогональным''', если <tex> \forall n \ne m \Rightarrow (x_n, x_m) = 0 </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм: пусть<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_j e_j</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> (причем он может быть расходящимся), <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
тогда: <tex>\|x-s_n(x)\|^2 = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|^2</tex>, <tex>\alpha_k \in \mathbb{R}</tex> {{---}} '''экстремальное свойство частичных сумм'''.<br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26972L 2-теория рядов Фурье2012-06-25T20:33:54Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, f \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм:<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_ne_n</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
Экстремальное свойство: <tex>\|x-s_n(x)\| = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|</tex>, <tex>\alpha_k \in \mathbb{R}</tex><br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26970L 2-теория рядов Фурье2012-06-25T20:32:10Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, f \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; g \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм:<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_ne_n</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
Экстремальное свойство: <tex>\|x-s_n(x)\| = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|</tex>, <tex>\alpha_k \in \mathbb{R}</tex><br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26969L 2-теория рядов Фурье2012-06-25T20:31:09Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; g \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм:<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_ne_n</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
Экстремальное свойство: <tex>\|x-s_n(x)\| = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|</tex>, <tex>\alpha_k \in \mathbb{R}</tex><br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26968L 2-теория рядов Фурье2012-06-25T20:30:37Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \ge 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм:<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_ne_n</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
Экстремальное свойство: <tex>\|x-s_n(x)\| = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|</tex>, <tex>\alpha_k \in \mathbb{R}</tex><br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=L_2-%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D1%8F%D0%B4%D0%BE%D0%B2_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&diff=26967L 2-теория рядов Фурье2012-06-25T20:30:14Z<p>Niko: </p>
<hr />
<div>[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
{{В разработке}}<br />
<br />
В теории интеграла Лебега мы доказали, что любое пространство <tex>L_p</tex> — полное. С другой стороны, в <br />
пространстве <tex>L_2</tex> можно определить скалярное произведение:<br />
<br />
<tex>\langle f, g \rangle = \int\limits_Q f\cdot g</tex><br />
<br />
Этот интеграл конечен в силу неравенства Гёльдера, так как <tex>\int\limits_Q |fg| \le \sqrt{\int\limits_Q f^2} + \sqrt{\int\limits_Q g^2}</tex><br />
<br />
Эта операция обладает свойствами скалярного произведения:<br />
* <tex>\langle f; f \rangle \re 0</tex> и <tex>\langle f; f\rangle = 0 \iff f = 0</tex> почти всюду<br />
* Линейность. <tex>\langle \alpha f_1 + \beta f_2 , g \rangle = \alpha\langle f_1, g \rangle + \beta \langle f_2, g\rangle</tex><br />
* Симметричность. <tex>\langle f, g\rangle = \langle g, f \rangle</tex><br />
<br />
Введём норму <tex>\|f\| = \sqrt{\langle f, f\rangle} = \sqrt{\int\limits_Q f^2}</tex><br />
<br />
В силу того, что пространство полное и норма порождает скалярное произведение, это пространство Гильберта.<br />
<br />
''<tex>L_2</tex>-теория рядов Фурье'' {{---}} теория, исследуются свойства рядов Фурье как элементов данного Гильбертова пространства.<br />
<br />
Центральную роль в <tex>L_2</tex>-теории играет ''ортонормированная система точек''(ОНС).<br />
<br />
{{Определение<br />
|definition=<tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС <tex>\iff</tex> <tex>\langle e_i, e_j \rangle = \delta_{ij}</tex><br />
}}<br />
<br />
Если в качестве модели взять <tex>L_2</tex> и рассмотреть стандартную тригонометрическую систему функций <tex>1, \sin x, \cos x, \sin 2x, \cos 2x, \ldots, \sin nx, \cos nx</tex>, то окажется, что она {{---}} ортогональная.<br />
<br />
Попарная ортогональность:<br />
<tex>\int\limits_Q \cos^2 nx dx = \pi</tex>, <tex>\int\limits_Q \sin^2 nx dx = \pi</tex>, <tex>\int\limits_Q 1 = 2\pi</tex>.<br />
<br />
Тогда ОНС будет:<br />
<tex>\frac1{\sqrt{2\pi}}, \frac{\sin x}{\sqrt\pi}, \frac{\cos x}{\sqrt\pi}, \ldots, \frac{\sin nx}{\sqrt\pi}, \frac{\cos nx}{\sqrt\pi}</tex><br />
<br />
По ортонормированной системе можно составлять формальные ряды в <tex>\mathcal{H}</tex>.<br />
<br />
<tex>\sum\limits_{j=1}^\infty \alpha_je_j</tex> в <tex>\mathcal{H}</tex> ортогональна: <tex>i\ne j \Rightarrow \langle \alpha_1 e_i, \alpha_2 e_j \rangle</tex> = 0<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>\sum\limits_{j=1}^\infty a_j</tex> {{---}} ортогональный ряд. Он сходится тогда и только тогда, когда <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex> сходится. Если <tex>\sum\limits_{j=1}^{\infty} a_j = a</tex>, то <tex>\sum\limits_{j=1}^\infty \|a_j\|^2 = \|a\|^2 </tex>.<br />
|proof=<br />
Возьмём <tex>A_n = \sum\limits_{j=1}^n a_j</tex>. По определению, сходимость ряда <tex>\sum\limits_{j=1}^{\infty} a_j</tex> равносильна существованию предела <tex>A_n</tex>. Так как пространство {{---}} Гильбертово, то есть полное, значит сходимость равносильна сходимости в себе. Значит, <br />
<tex>\lim\limits_{n, m \to \infty} A_n - A_m = 0</tex>, что равносильно <tex> \|A_n - A_m\| \to 0 </tex>.<br />
<br />
Пусть <tex> m > n </tex>. <tex>A_m - A_n = \sum\limits_{j=n+1}^m a_j</tex>.<br />
<br />
<tex>\|A_m - A_n\|^2 = \left\langle \sum\limits_{i=n+1}^m a_i, \sum\limits_{j=n+1}^m a_j \right\rangle</tex><br />
<tex>= \sum\limits_{i, j = n+1}^m \langle a_i, a_j\rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \langle a_j, a_j \rangle</tex><br />
<tex>= \sum\limits_{j=n+1}^m \|a_j\|^2</tex><br />
<br />
По критерию Коши сходимости числовых рядов <tex>\sum\limits_{j=n+1}^m \|a_j\|^2 \to 0 \iff \sum\limits_{j=1}^{\infty} \| a_j \|^2 < \infty</tex><br />
<br />
Итак, мы установили, что сходимость ортогонального ряда <tex>\sum\limits_{j=1}^\infty a_j</tex> равносильна сходимости <tex>\sum\limits_{j=1}^\infty \|a_j\|^2</tex>.<br />
<br />
<tex>a = \sum\limits_{j=1}^\infty a_j \Rightarrow \langle a, a \rangle = \langle \sum\limits_{j=1}^\infty a_j, \sum\limits_{j=1}^\infty a_j \rangle \Rightarrow \| a \|^2 = \sum\limits_{j=1}^{\infty} \| a_j \|^2</tex><br />
<br />
}}<br />
<br />
Возвращаясь к ряду по ортогональной системе <tex>\sum\limits_{j=1}^\infty \alpha_j e_j</tex>, получаем, что он сходится <tex>\iff</tex> сходится <tex>\sum\limits_{j=1}^\infty \alpha_j^2</tex>.<br />
<br />
На базе рядов по ортогональной системе вводится понятие абстрактного ряда Фурье.<br />
<br />
Пусть <tex>x = \sum\limits_{j=1}^\infty \alpha_j e_j</tex>, тогда, по непрерывности скалярного произведения, можно записать:<br />
<tex>\langle x, e_k\rangle = \sum\limits_{j=1}^\infty \alpha_j\langle e_j, e_k\rangle = \alpha_k</tex><br />
<br />
То есть, если <tex>x</tex> разлагается по ортогональной системе, то необходимо <tex>\alpha_j = \langle x, e_j\rangle</tex> {{---}} коэффициент Фурье. <br />
<br />
Центральную роль играет изучение ортогональных рядов вида <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>x \in \mathcal{H}</tex>. Такие ряды называются '''абстрактными рядами Фурье'''.<br />
<br />
В применении к <tex>L_2</tex>: <tex>f \in L_2</tex>, <tex>\langle f, \frac1{\sqrt\pi} \cos nx\rangle =\int\limits_Q f(x) \frac{1}{\sqrt \pi} \cos nx dx = \sqrt\pi \left(\frac1\pi \int\limits_Q f(x) \cos nx dx\right) = \sqrt\pi a_n(f)</tex><br />
<br />
Аналогично, для синусов: <tex>\langle f, \frac1\pi \sin nx\rangle = \sqrt\pi b_n(f)</tex><br />
<br />
<tex>\langle f, \frac1{\sqrt{2\pi}}\rangle = \sqrt{\frac\pi2} a_0(f)</tex><br />
<br />
Тогда, получается: <tex>\sum\limits_{j=0}^\infty \langle f, e_j\rangle e_j = </tex> (из того, что <tex>L_2</tex>) <tex>\sqrt{\frac\pi2} a_0(f) \cdot \frac{1}{\sqrt{2 \pi}} + \sum\limits_{n=1}^\infty(\sqrt\pi a_n(f)\cdot \frac{\cos nx }{\sqrt \pi} + \sqrt\pi b_n(f) \cdot \frac{\sin nx}{\sqrt \pi} ) </tex> <tex> = \frac{a_0(f)}{2} + \sum\limits_{n = 1}^{\infty} a_0(f) \cos nx + b_0(f) \sin nx</tex>, то есть, абстрактный ряд Фурье совпадает с классическим.<br />
<br />
Применим то, что было сказано выше: <tex>\sum\limits_{j=1}^\infty \langle f, e_j \rangle = \alpha_j</tex> будет сходиться в <tex>L_2</tex> <tex>\iff</tex> сходится ояд <tex>\sum\limits_{j=1}^\infty (a_n^2(f) + b_n^2(f))</tex> (забиваем на множитель и одно слагаемое).<br />
<br />
== Теорема Рисса-Фишера ==<br />
{{Теорема<br />
|author=<br />
Рисс, Фишер<br />
|statement=<br />
Пусть <tex>e_1, e_2, \ldots, e_n</tex> {{---}} ОНС, <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex>.<br />
Тогда существует <tex>x \in \mathcal{H}: \sum\limits_{j=1}^\infty c_ne_n = x</tex> , то есть, точка разложится в ряд Фурье.<br />
|proof=<br />
Выше мы проверяли, что, раз ряд ортогональный, то его сходимость равносильна сходимости <tex>\sum\limits_{j=1}^\infty c_j^2 < +\infty</tex><br />
<br />
Поэтому просто положим <tex>x</tex> равным <tex>\sum\limits_{j=1}^\infty c_ne_n</tex>.<br />
}}<br />
<br />
Легко установить экстремальное свойство частичных сумм:<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty c_ne_n</tex>, <tex>x\in\mathcal{H}</tex>, <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, <tex>s_n(x) = \sum\limits_{j=1}^n \langle x, e_j\rangle e_j</tex><br />
<br />
Экстремальное свойство: <tex>\|x-s_n(x)\| = \inf \|x - \sum\limits_{k=1}^n \alpha_ke_k\|</tex>, <tex>\alpha_k \in \mathbb{R}</tex><br />
<br />
Из него получается [[Нормированные_пространства#теорема Бесселя|неравенство Бесселя]]: <tex>\sum\limits_{j=1}^\infty \langle x, e_j\rangle^2 \le \|x\|^2</tex><br />
<br />
Раз ряд состоит из квадратов коэффициентов Фурье, то он всегда сходится. В любом случае, ряд Фурье будет сходиться в <tex>\mathcal{H}</tex>.<br />
<br />
Возникает вопрос: ''к чему же?''<br />
<br />
{{Утверждение<br />
|statement=<br />
Если <tex>y = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex>, из этого не следует <tex>x = y</tex>.<br />
|proof=<br />
Рассмотрим в <tex>\mathbb{R}^3</tex> ОНС <tex>\{e_1, e_2\}</tex>. <br />
<br />
<tex>x = e_3</tex>, <tex>\langle x, e_1\rangle = \langle x, e_2\rangle = 0</tex><br />
<br />
<tex>\langle x, e_1\rangle e_1 + \langle x, e_2\rangle e_2 = 0</tex><br />
<br />
<tex>\alpha e_1 + \beta e_2 \in \mathcal{L}(e_1, e_2)</tex><br />
<br />
Сумма ряда Фурье <tex>=0</tex>, что <tex>\ne e_3</tex><br />
}}<br />
<br />
Таким образом, ряд Фурье всегда сходится, но не всегда к тому, к чему хотелось бы.<br />
<br />
Для того, чтобы сгладить последствия этого, используют только ОНС со следующими дополнительными свойствами:<br />
# ОНС {{---}} замкнута: <tex>\forall j : \langle x, e_j\rangle = 0 \Rightarrow x = 0</tex>.<br />
# ОНС {{---}} полная: <tex>\operatorname{Cl} \mathcal{L}(e_1, \ldots, e_n) = \mathcal{H}</tex> (замыкание линейной оболочки совпадает с самим пространством).<br />
<br />
{{Теорема<br />
|statement=ОНС {{---}} полная <tex>\iff</tex> ОНС {{---}} замкнутая<br />
|proof=<br />
<tex>\Rightarrow</tex> Пусть ОНС {{---}} полная<br />
<br />
<tex>x \in \mathcal{H}</tex>, <tex>\forall j: \langle x, e_j\rangle = 0</tex>. В силу полноты системы, <tex>\forall \varepsilon > 0 : \exists \sum\limits_{k=1}^n \alpha_k e_k : \|x - \sum\limits_{k=1}^n \alpha_k e_k\| < \varepsilon</tex><br />
<br />
Но частичная сумма ряда Фурье обладает экстремальным свойством:<br />
<br />
<tex>\|x-s_n\| \le \|\sum\limits_{k=1}^n \alpha_ke_k-x\|<\varepsilon</tex>.<br />
<br />
<tex>\|x - s_{n+p}(x)\| \le \|x - s_n(x)\| \le \varepsilon</tex> <tex>\Rightarrow</tex> <tex>x</tex> разложилось в ряд Фурье.<br />
<br />
А раз у <tex>x</tex> все коэффициенты нулевые, то сумма ряда {{---}} 0.<br />
<br />
Значит, из полноты вытекает замкнутость.<br />
<br />
<tex>\Leftarrow</tex> Пусть система замкнута<br />
<tex>\forall x \in \mathcal{H} : \sum\limits_{n=1}^\infty |\langle x, e_n\rangle|^2 < +\infty</tex>. По теореме Рисса-Фишера, <tex>\exists y = \sum\limits_{k=1}^\infty \langle x, e_k\rangle e_k</tex>.<br />
<br />
По свойствам ортогональных рядов, <tex>\langle y, e_k\rangle = \langle x, e_k\rangle</tex> <tex>\Rightarrow</tex> <tex>\langle y - x, e_k\rangle =0</tex>.<br />
<br />
Но система замкнута <tex>\Rightarrow</tex> <tex>y - x = 0</tex>, то есть, <tex>x = y</tex>.<br />
<br />
Значит, <tex>x</tex> разложилось в ряд Фурье <tex>\Rightarrow</tex> <tex>x = \lim\limits_{n\to\infty} s_n(x)</tex>, что и означает полноту системы.<br />
}}<br />
<br />
Собирая всё это вместе, приходим к финальному результату<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} ОНС, замкнутая(или полная). Тогда ряд Фурье любой точки <tex>x \in \mathcal{H}</tex> совпадает с <tex> x </tex>.<br />
}}<br />
<br />
{{Теорема<br />
|statement=<tex>f \in L_2</tex> <tex>\Rightarrow</tex> функция <tex>f</tex> разлагается в ряд Фурье по метрике <tex>L_2</tex>.<br />
}}<br />
<br />
<tex>x = \sum\limits_{j=1}^\infty \langle x, e_j\rangle e_j</tex> <tex>\Rightarrow</tex> <tex>\|x\|^2 = \sum\limits_{j=1}^\infty |\langle x, e_k\rangle|^2</tex> {{---}} уравнение замкнутости.<br />
<br />
Оно так называется потому, что если оно выполняется для любого <tex>x</tex>, то соответствующая ОНС {{---}} замкнутая.<br />
<br />
Возьмём вторую точку <tex>y = \sum \langle y, e_k\rangle e_k</tex><br />
<br />
{{Утверждение<br />
|author=Парсеваль<br />
|statement=<tex>\langle x, y\rangle = \sum\limits_{j=1}^\infty \langle x, e_j\rangle \cdot \langle y, e_j\rangle</tex>. <br />
}}<br />
<br />
Прикладывая всё это к <tex>L_2</tex> и вспоминая связь коэффициентов Фурье с коэффициентами в <tex>L_2</tex>-теории, приходим к равенству Персеваля:<br />
<br />
<tex>\int\limits_Q fg = \frac{a_0(f)a_0(g)}2 + \sum\limits_{n=1}^\infty (a_n(f)a_n(g) + b_n(f)b_n(g))</tex><br />
<br />
В частности, <tex>\int\limits_Q f^2 = \frac{a_0^2(x)}2 + \sum\limits_{n=1}^\infty (a_n^2(f) + b_n^2(f))</tex><br />
<br />
Далее, в замкнутых системах, <tex>\|x-s_n(x)\|^2 = \|\sum\limits_{k=n+1}^\infty \langle x, e_k\rangle e_k\|^2 = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
С другой стороны, экстремальное свойство частичных сумм показывает, что: <br />
<br />
<tex>\|x-s_n(x)\| = E_n^2(x)_n</tex><br />
<br />
Итого: <tex>E_n^2(x)_n = \sum\limits_{k=n+1}^\infty |\langle x, e_k\rangle|^2</tex><br />
<br />
В <tex>L_2</tex>: <tex>E_n^2(x)_n = \pi\sum\limits_{k=n+1}^\infty (a_k^2(f) + b_k^2(f)) </tex>.<br />
<br />
Финально: последнее равенство показывает исключительный характер <tex>L_2</tex>: в нём наилучшее приближение вычисляется точно с указанием экстремального полинома.<br />
<br />
[[О почленном интегрировании ряда Фурье|<<]][[Теорема Лузина-Данжуа|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%A0%D0%B8%D0%BC%D0%B0%D0%BD%D0%B0-%D0%9B%D0%B5%D0%B1%D0%B5%D0%B3%D0%B0&diff=26885Обсуждение:Лемма Римана-Лебега2012-06-24T23:48:28Z<p>Niko: Новая страница: «Есть у кого-нибудь в конспекте доказательство и формулировка обобщенной теоремы Вейерш...»</p>
<hr />
<div>Есть у кого-нибудь в конспекте доказательство и формулировка обобщенной теоремы Вейерштрасса?</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A4%D0%B5%D0%B9%D0%B5%D1%80%D0%B0&diff=26879Теорема Фейера2012-06-24T21:36:45Z<p>Niko: /* Теорема Фейера в L_p */</p>
<hr />
<div>[[Наилучшее приближение в линейных нормированных пространствах|<<]][[Лемма Римана-Лебега|>>]]<br />
<br />
Пусть <tex>f \in L_1</tex>, <tex>\sigma (f, x) = \int\limits_Q f(x + t) \Phi_n(t)dt</tex><br />
<br />
<tex>(\sigma_n(f, x) = \frac{1}{n+1} \sum\limits_{k = 0}^n S_k(f))</tex><br />
<br />
Поставим вопрос о сходимости сумм Фейера к <tex>f</tex> либо в индивидуальной <br />
точке, либо в пространстве <tex>L_p</tex> (по норме этих пространств).<br />
<br />
Любая сумма Фейера {{---}} тригонометрический полином: <tex>\sigma_n(f) \in H_n</tex>.<br />
<br />
__TOC__<br />
<br />
== Теорема Фейера в L_1 ==<br />
<br />
{{Теорема<br />
|author=Фейер<br />
|statement=Пусть <tex>f \in L_1</tex>, <tex>s \in \mathbb{R}</tex>, <tex>x \in \mathbb{R}</tex>,<br />
<tex>\lim\limits_{t\to +0} \frac1t \int\limits_0^t |f(x + t) + f(x - t) - 2s| dt = 0</tex>. Тогда<br />
<tex>\lim\limits_{n\to\infty} \sigma_n(f, x) = s</tex><br />
|proof=<br />
{{Определение<br />
|definition=Точку <tex>x</tex> принято называть '''регулярной''', если<br />
в этой точке существуют односторонние пределы.<br />
}}<br />
Например, любая точка непрерывности {{---}} регулярная. <br />
<br />
{{Утверждение<br />
|about=<br />
следствие Фейера о двух пределах<br />
|statement=<br />
Пусть точка <tex>x</tex> — регулярная, тогда в ней <tex>\lim\limits_{n \to \infty} \sigma_n(f, x) = \frac{f(x + 0) + f(x - 0)}2 </tex><br />
|proof=<br />
Пусть <tex>s = \frac{f(x - 0) + f(x + 0)}{2} </tex>.<br />
<br />
Так как <tex>f(x + t) \xrightarrow[t\to +0]{} f(x + 0), f(x - t) \xrightarrow[t\to -0]{} f(x - 0) </tex>, по определению предела <tex> \forall\varepsilon\exists\delta : 0 < t < \delta : |f(x \pm t) - f(x \pm 0)| < \varepsilon</tex>.<br />
<br />
Для таких <tex>t</tex>: <tex>|f(x + t) + f(x - t) - 2s| \leq |f(x + t) - f(x + 0)| + |f(x - t) - f(x - 0)| < 2\varepsilon</tex>,<br />
<br />
и интересующий нас интеграл <tex>\frac1t\int\limits_0^t|f(x+t)+f(x-t)-2s| \leq \frac1t\int\limits_0^t2\varepsilon = 2\varepsilon</tex>.<br />
<br />
Значит, условие теоремы Фейера для данного интеграла выполняется, и в регулярной точке, <tex>\lim\limits_{n \to \infty} \sigma_n(f, x) = \frac{f(x + 0) + f(x - 0)}2 </tex>.<br />
<br />
В частности, в точке непрерывности функции суммы Фейера всегда сходятся к значению функции в данной точке. <br />
}}<br />
<br />
<tex>\varphi_x(t) \stackrel{\mathrm{def}}= f(x + t) + f(x - t) - 2s</tex><br />
<br />
Используя результаты, полученные [[Интеграл_Фейера|здесь]], <tex>\sigma_n(f, x) - s = \int\limits_0^\pi \varphi_x(t)\frac1{2\pi(n+1)} \frac{\sin^2\frac{n + 1}{2}t}{\sin^2\frac t2} dt</tex><br />
<br />
Надо доказать, что этот интеграл при <tex>n\to\infty</tex> стремится к <tex>0</tex>.<br />
<br />
Воспользуемся положительностью <tex>\Phi_n</tex>: <tex>|\sigma_n(f, x) - s| \leq \int\limits_0^\pi |\varphi_x(t)|\Phi_n(t) dt</tex>.<br />
<br />
Нужно доказать, что этот интеграл стремится к нулю. Разобьем его на два интеграла: <tex>h_n = \frac1n</tex>, <tex>\int\limits_0^\pi = \int\limits_0^{h_n} + \int\limits_{h_n}^\pi</tex>, и рассмотрим по отдельности.<br />
<br />
{{Утверждение<br />
|statement=<tex>\int\limits_0^{h_n}|\varphi_x(t)| \frac1{2\pi(n+1)}\frac{\sin^2\frac{n+1}2 t}{\sin^2\frac t2} dt \to 0</tex><br />
|proof=Воспользуемся неравенствами <tex>|\sin nt| \leq n|\sin t|</tex> и <tex>\frac2\pi t \leq \sin t \leq t</tex> (<tex>t \in [0; \frac\pi2]</tex>)<br />
<br />
<tex>\sin^2(n+1)\frac{t}2 \leq (n+1)^2\sin^2\frac{t}2</tex><br />
<br />
<tex>\frac{\sin^2(n+1)\frac t2}{\sin^2\frac{t}2} \leq (n + 1)^2,\ n + 1 \leq 2n</tex><br />
<br />
Значит, <tex>\int\limits_0^{h_n} \leq \frac1{2\pi}(n+1)\int\limits_0^{1/n} |\varphi_x(t)|dt \leq \frac1{\pi} \cdot \frac1{h_n}\int\limits_0^{h_n}|\varphi_x(t)|dt</tex>.<br />
<br />
По условию теоремы, <tex>\frac1{h_n}\int\limits_0^{h_n}|\varphi_x(t)|dt \to 0</tex>.<br />
}}<br />
<br />
{{Утверждение<br />
|statement=<br />
<tex>\int\limits_{h_n}^\pi|\varphi_x(t)| \frac1{2\pi(n+1)}\frac{\sin^2\frac{n+1}2 t}{\sin^2\frac t2} dt \to 0</tex><br />
|proof=<br />
<tex>\sin^2 \frac{n+1}2 t \leq 1</tex>, <tex>\sin^2 \frac t2 \geq \left(\frac2\pi \frac t2\right)^2 = \left(\frac{t}{\pi}\right)^2</tex>.<br />
<br />
<tex>\int\limits_{h_n}^\pi|\varphi_x(t)| \frac1{2\pi(n+1)}\frac{\sin^2\frac{n+1}2}{\sin^2\frac t2} dt \leq</tex><tex>\int\limits_{h_n}^\pi |\varphi_x(t)| \frac1{2\pi(n + 1)} \frac1{\left(\frac{t}\pi\right)^2} \leq</tex><br />
<br />
<tex>\leq \int\limits_{h_n}^\pi |\varphi_x(t)| \frac{\pi^2}{2\pi t^2(n+1)} dt = </tex><tex>\frac\pi2 \frac1{n+1} \int\limits_{h_n}^\pi\frac{|\varphi_x(t)|}{t^2} dt \le \frac\pi2 h_n \int\limits_{h_n}^\pi \frac1{t^2}d\Phi_x(t) = </tex><br />
<br />
(<tex>\Phi_x(t) = \int\limits_{0}^{t} |\phi_x(y)| dy </tex>; проинтегрируем по частям. '''Здесь <tex>\Phi_x(t)</tex> {{---}} НЕ ядро Фейера, а просто определённый интеграл''')<br />
<br />
<tex>= \frac\pi2 h_n \left(\frac1{t^2}\Phi_x(t) \bigg|_{h_n}^{\pi} + 2\int\limits_{h_n}^\pi \Phi_x(t) \frac1{t^3} dt \right)</tex>.<br />
<br />
Оценим каждое из слагаемых.<br />
<br />
Первое слагаемое (<tex>h_n \frac1{\pi^2} \Phi_x(\pi) - h_n \frac1{h_n^2}\Phi_x(h_n)</tex>):<br />
<br />
<tex>\frac1{\pi^2} \Phi_x(\pi)</tex> - константа, <tex> h_n \to 0</tex>;<br />
<br />
<tex>h_n \frac1{h_n^2} \Phi_x(h_n) = \frac1{h_n} \int\limits_0^{h_n} |\varphi_x(y)| dy \to 0</tex> по условию теоремы.<br />
<br />
Второе слагаемое:<br />
<br />
<tex>h_n \int\limits_{h_n}^\pi\Phi_x(t) \frac1{t^3} dt = </tex><tex>h_n\int\limits_{h_n}^\pi \left(\frac1t\int\limits_0^t|\varphi_x(y)| dy \right) \frac1{t^2} dt</tex><br />
<br />
По условию теоремы, <tex> \left(\frac1t\int\limits_0^t|\varphi_x(y)| dy \right) \to 0 </tex>. Распишем это по определению:<br />
<br />
<tex>\forall\varepsilon\exists\delta : 0 < t < \delta : \frac1t\int\limits_0^t|\varphi_x(y)|dy < \varepsilon</tex>.<br />
<br />
Пусть, начиная с какого-то <tex>N</tex>, <tex> h_n < \delta</tex><br />
<br />
Тогда <tex>h_n\int\limits_{h_n}^\pi(...)\frac1{t^2} \stackrel{h_n < \delta}{=} h_n \int\limits_{h_n}^\delta + h_n\int\limits_\delta^\pi</tex><br />
<br />
<tex>h_n \int\limits_{h_n}^\delta(...)\frac1{t^2} dt < \varepsilon h_n \int\limits_{h_n}^\delta \frac1{t^2} dt = </tex><tex>\varepsilon h_n \left(\frac1{h_n} - \frac1\delta\right) \leq a \varepsilon</tex><br />
<br />
Второй интеграл <tex>h_n \int\limits_\delta^\pi \to 0</tex>, так как <tex>\int\limits_\delta^\pi</tex> {{---}} константа для данного <tex>\delta</tex>, а <tex>h_n \to 0</tex>.<br />
}}<br />
<br />
Оба интеграла стремятся к нулю, теорема Фейера доказана.<br />
}}<br />
<br />
Заметим, что если в теореме Фейера <tex>f \in C</tex> (непрерывные <tex>2\pi</tex>-периодические функции), то теорема выполнена в каждой точке <tex>x</tex>, и, самое важное, равномерно по <tex>x</tex>, то есть,<br />
<br />
В этом случае, <tex>\sigma_n(f) \stackrel{n \to \infty}{\rightrightarrows} f</tex> на <tex> \mathbb{R} </tex>.<br />
<br />
Это связано с тем, что условия Фейера выполнены равномерно по <tex>x</tex> <br />
(из теоремы Кантора: <tex>f</tex> {{---}} непрерывно на <tex>[a; b]</tex> <tex>\Rightarrow</tex> <tex>f</tex> {{---}} равномерно непрерывна на нём)<br />
<br />
== Теорема Фейера в L_p ==<br />
Установим теперь теорему Фейера в <tex>L_p</tex>.<br />
<br />
{{Утверждение<br />
|statement=<br />
<tex>f \in L_p \Rightarrow \| \sigma_n(f)\|_p \le \|f\|_p </tex><br />
|proof=<br />
Так как <tex> \sigma_n(f) \in H_n </tex>, то <tex> \sigma_n(f) \in L_p </tex>.<br />
<br />
<tex> \| \sigma_n(f)\|^p_p = \int\limits_{Q} |\sigma_n(f)|^pdx, \sigma_n(f, x) = \int\limits_{Q} f(x+t) \Phi_n(t) dt </tex>.<br />
<br />
<tex> |\sigma_n(f, x)| \le \int\limits_{Q} |f(x + t)|\Phi_n(t) dt = </tex> (возьмем <tex> q:\ \frac1p + \frac1q = 1 </tex>)<br />
<br />
<tex>= \int\limits_{Q} |f(x + t)\Phi_n^{\frac1p}(t)| \Phi_n^{\frac1q}(t) dt \le (\int\limits_{Q} |f(x + t)|^p \Phi_n(t) dt)^{\frac1p} (\int\limits_{Q} \Phi_n(t) dt)^{\frac1q}</tex> (здесь мы воспользовались неравенством Гельдера). Несложно заметить, что второй множитель равен <tex> 1 </tex>. Подставим это неравенство под знак интеграла в предыдущем равенстве:<br />
<br />
<tex> \|\sigma_n(f)\|^p_p \le \int\limits_{Q}(\int\limits_{Q} |f(x+t)|^p\Phi_n(t) dt)dx = </tex> (по [[Теорема Фубини|теореме Фубини]] меняем порядок интегрирования)<br />
<br />
<tex> = \int\limits_{Q}(\int\limits_{Q} |f(x+t)|^p\Phi_n(t) dx)dt = \int\limits_{Q}\Phi_n(t) (\int\limits_{Q} |f(x+t)|^p dx)dt =</tex> <tex>\int\limits_{Q}\Phi_n(t) (\int\limits_{Q} |f(x)|^p dx)dt = \int\limits_{Q} |f(x)|^p dx </tex>.<br />
<br />
Возводя неравенство в степень <tex> \frac1p </tex>, получаем требуемое.<br />
<br />
}}<br />
<br />
{{Теорема<br />
|author=<br />
Фейер<br />
|statement=<br />
<tex>f\in L_p \Rightarrow \|f - \sigma_n(f)\|_p \xrightarrow[n \to \infty]{} 0</tex>.<br />
|proof=<br />
<br />
<tex>\sigma_n(f) \in H_n</tex>, <tex>E_n(f)_p \leq \|f-\sigma_p(f)\|_p</tex><br />
<br />
Используем тот факт, что в <tex>C</tex> теорема Фейера выполнена, то есть, для непрерывной функции суммы Фейера сходятся равномерно на <tex> \mathbb{R}</tex>:<br />
<br />
<tex>f\in C \Rightarrow \sigma_n(f) \stackrel{\mathbb{R}}{\rightrightarrows} f,\ n \to \infty</tex>.<br />
<br />
Рассмотрим произвольную функцию <tex> g \in L_p </tex>.<br />
<br />
[[Пространство L_p(E)|Ранее]] нами уже было доказано, что пространство <tex>C</tex> всюду плотно в <tex>L_p</tex> : <tex>\forall\varepsilon>0\forall g\in L_p\exists \varphi \in C : \|g - \varphi\|_p<\varepsilon</tex>.<br />
<br />
<tex>\|\sigma_n(g) - g\|_p = \|(\sigma_n(g) - \sigma_n(\varphi)) - (g - \varphi) + (\sigma_n(\varphi) - \varphi)\|_p \leq</tex> (по [[Интеграл_Фейера|записи интеграла Фейера]] очевидно <tex>\sigma_n(g) - \sigma_n(\varphi)) = \sigma_n(g - \varphi)</tex>)<br />
<br />
<tex>\leq \|\sigma_n(g-\varphi)\|_p + \underset{\leq \varepsilon}{\underbrace{\|g - \varphi\|_p}} + \|\sigma_n(\varphi) - \varphi\|_p </tex>.<br />
<br />
По доказанному только что утверждению, <tex> \|\sigma_n(g-\varphi)\|_p \leq \|g-\varphi\|_p \leq \varepsilon </tex>.<br />
<br />
Значит, <tex>\|\sigma_n(g) - g\|_p \leq 2\varepsilon + \|\sigma_n(\varphi) - \varphi\|_p</tex><br />
<br />
<tex>\forall f\in C : \|f\|_p^p = \int\limits_Q|f(t)|^p dt</tex>.<br />
<br />
<tex>|f(t)| \leq \|f\|_\infty = \max\limits_Q |f(t)|</tex><br />
<br />
<tex>\|f\|_p^p \leq 2\pi\|f\|_\infty^p</tex><br />
<br />
<tex>\|f\|_p \leq (2\pi)^{1/p}\|f\|_\infty</tex><br />
<br />
<tex>\varphi\in C</tex>, <tex>\sigma_n(\varphi) \in C</tex>, <tex>\sigma_n(\varphi) - \varphi \in C</tex><br />
<br />
<tex>\|\sigma_n(\varphi) - \varphi\|_p \leq (2\pi)^{1/p} \|\sigma_n(\varphi) - \varphi\|_\infty</tex><br />
<br />
<tex>\|\sigma_n(g) - g\|_p \leq 2\varepsilon + \|\sigma_n(\varphi) - \varphi\|_p</tex><br />
<br />
Так как в <tex>C</tex> верна теорема Фейера, то <tex>\forall \varepsilon>0\exists N \forall n > N : \|\sigma_n(\varphi) - \varphi\|_\infty < \varepsilon</tex><br />
<br />
Значит, <tex>\forall n > N\forall\varepsilon > 0 : \|\sigma_n(g) - g\|_p \leq (2 + (2\pi)^{1/p}) \varepsilon</tex>, и теорема верна по определению предела.<br />
}}<br />
<br />
[[Наилучшее приближение в линейных нормированных пространствах|<<]][[Лемма Римана-Лебега|>>]]<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%B5_%D0%BF%D1%80%D0%B8%D0%B1%D0%BB%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0%D1%85&diff=26834Наилучшее приближение в линейных нормированных пространствах2012-06-24T19:04:48Z<p>Niko: </p>
<hr />
<div>[[Интеграл Фейера|<<]][[Теорема Фейера|>>]]<br />
<br />
{{В разработке}}<br />
Пусть <tex>X</tex> {{---}} [[Нормированные_пространства#определение и примеры|нормированное пространство]], к примеру, <tex>L_p</tex>. Пусть <tex>Y</tex> {{---}} линейное множество в <tex>X</tex>, например, <tex>H_n</tex> (тригонометрических полиномов степени не больше <tex>n</tex>).<br />
{{Определение<br />
|definition = Для любого <tex> x \in X</tex> величина <tex>E_y(x) = \inf\limits_{y \in Y}{\|x-y\|}</tex> называется '''наилучшим приближением точки <tex>x</tex> элементами линейного множества <tex>Y</tex>'''.<br />
Если при этом существует <tex>y^* \in Y</tex> такой, что <tex>E_y(x)=\|x-y^*\|</tex>, то этот <tex>y^*</tex> называется '''элементом наилучшего приближения точки <tex>x</tex>'''.<br />
}}<br />
Заметим: гарантий, что <tex>y^*</tex> единственный и что он вообще существует, нет. <br />
<br />
<tex>E_y(x) \ge 0</tex>, если <tex>x \in Y</tex>, то <tex>E_y(x)=0</tex>, таким образом, положительной определенности у этого функционала нет.<br />
<br />
{{Утверждение<br />
|statement= Наилучшее приближение является полунормой, то есть выполняются однородность и неравенство треугольника.<br />
|proof= <br />
'''Однородность''': <tex>\forall \varepsilon > 0 </tex>, по определению нижней грани <tex>\|x-y_{\varepsilon}\| < E_y(x)+\varepsilon</tex>, где <tex>y_{\varepsilon} \in Y</tex>.<br />
<tex>|\lambda|\|x-y_{\varepsilon}\|<|\lambda|E_y(x)+|\lambda| \varepsilon </tex><br />
<br />
По аксиомам нормы: <tex>|\lambda|\|x-y_{\varepsilon}\|=\|\lambda x-\lambda y_\varepsilon\|</tex>.<br />
<br />
Так как <tex>Y</tex> {{---}} линейное пространство, то <tex>\lambda y_{\varepsilon} \in Y</tex> и <tex>\| \lambda x - \lambda y_{\varepsilon} \| \ge E_y(\lambda x)</tex>.<br />
<br />
Тогда <tex>E_y(\lambda x) < |\lambda|E_y(x)+ |\lambda|\varepsilon</tex>, при <tex>\varepsilon \to 0</tex> получаем <tex>E_y(\lambda x) \le |\lambda|E_y(x)</tex>.<br />
<br />
В обратную сторону: <tex>E_y(x)=E_y(\lambda \frac{x}{\lambda}) \le |\lambda|E_y(\frac{x}{\lambda})</tex>, то есть, <tex>\frac{1}{|\lambda|}E_y(x) \le E_y(\frac{x}{\lambda})</tex>. <br />
<br />
Пусть <tex>\mu = \frac{1}{\lambda}</tex>, тогда <tex>|\mu|E_y(x) \le E_y(\mu x)</tex>.<br />
<br />
Таким образом, получаем два противоположных неравенства, следовательно, <tex>E_y(\lambda x)=|\lambda|E_y(x)</tex>.<br />
<br />
'''Неравенство треугольника''': <tex>\forall \varepsilon > 0</tex>: <tex>\|x_1-y_{\varepsilon}\|< E_y(x_1)+\varepsilon</tex> и <tex>\|x_2-z_{\varepsilon}\|< E_y(x_2)+\varepsilon</tex>.<br />
<br />
Складывая два неравенства, получим <tex>\|x_1-y_{\varepsilon}\|+\|x_2-z_{\varepsilon}\|<E_y(x_1)+E_y(x_2)+2\varepsilon</tex>.<br />
<br />
По свойствам нижней грани, <tex>E_y(x_1+x_2)\le \|(x_1+x_2)-(y_{\varepsilon}+z_{\varepsilon})\| \le \| x_1 - y_{\varepsilon} \| + \| x_2 - z_{\varepsilon} \| < E_y(x_1) + E_y(x_2) + 2\varepsilon</tex>, так как <tex>y_{\varepsilon}+z_{\varepsilon} \in Y</tex>.<br />
<br />
При <tex>\varepsilon \to 0</tex> приходим к неравенству треугольника: <tex>E_y(x_1+x_2)\le E_y(x_1)+E_y(x_2)</tex>.<br />
}}<br />
<br />
Отметим некоторый технический момент: <tex>\forall x \in X</tex>, <tex>\forall y \in Y</tex> выполняется: <tex>E_y(x)=E_y((x+y)-y)\le E_y(x+y)+E(-y)</tex>, <tex>E_y(-y) = 0</tex>, так как <tex>-y \in Y</tex>, следовательно, <tex>E_y(x) \le E_y(x+y) \le E_y(x) + E_y(y) = E_y(x)</tex>. <br />
<br />
Значит, <tex>\forall y \in Y E_y(x)=E_y(x+y)</tex>.<br />
<br />
Также, так как <tex>0 \in Y</tex>, то <tex>E_y(x) \le \|x-0\|=\|x\|</tex>, следовательно, <tex>E_y(x) \le \|x\|</tex>.<br />
<br />
[[%D0%9D%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0#.D0.90.D1.80.D0.B8.D1.84.D0.BC.D0.B5.D1.82.D0.B8.D0.BA.D0.B0_.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.BE.D0.B2|Отсюда]], если <tex>x_n \to x</tex>, то <tex>E_y(x_n) \to E_y(x)</tex>, то есть, <tex> E </tex> непрерывно как функционал в норме <tex> X </tex>.<br />
<br />
Основной интерес представляют покрытия <tex> X </tex> элементами конечномерных подпространств. <br />
<br />
Пусть <tex>\dim Y < +\infty</tex>, <tex>Y=\mathcal L(e_1,..,e_p)</tex> (<tex> \mathcal L </tex> - линейная оболочка множества), тогда <tex>\dim Y = p</tex>.<br />
<br />
К примеру, <tex>\dim H_n = 2n+1</tex>, <tex>H_n = \mathcal L(1, \cos{x}, \sin{x},..,\cos{nx}, \sin{nx})</tex>.<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>X</tex> {{---}} нормированное пространство, <tex>\dim Y < +\infty</tex>, тогда <tex>\forall x \in X</tex> существует элемент наилучшего приближения <tex>x</tex>.<br />
|proof=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} базис <tex>Y</tex>, то есть, <tex>Y = \mathcal L(e_1,..,e_n)</tex>.<br />
<br />
Рассмотрим функцию <tex>f(\alpha_1,..,\alpha_n)=\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|</tex>, тогда ясно, что<br />
<br />
<tex>E_y(x)=\inf\limits_{\overline{\alpha}\in \mathbb{R}^n}f(\alpha_1,..,\alpha_n)</tex>.<br />
<br />
Надо доказать, что существует <tex>\overline{\alpha^*}=(\alpha^*_1,..,\alpha^*_n)</tex>, на котором достигается эта нижняя грань, тогда в качестве <tex>y^*</tex> можно взять <tex>y^*=\sum\limits_{k=1}^{n}\alpha^*_k e_k</tex>. Доказательство существования будем вести с помощью [[Предел_отображения_в_метрическом_пространстве#weirstrass|теоремы Вейерштрасса]], утверждающей, что если функция <tex>n</tex> переменных непрерывна на компакте, то она принимает на нем свое минимальное значение.<br />
<br />
Проверим непрерывность: <br />
<tex>|f(\overline{\alpha}+\Delta \overline{\alpha})-f(\overline{\alpha})| = |\|x-\sum\limits_{k=1}^{n}(\alpha_k+\Delta\alpha_k)e_k\|-\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|| \le </tex><br />
<br />
<tex>\le |\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\| + \|\sum\limits_{k=1}^{n} \Delta\alpha_k e_k\| - \|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|| = </tex><br />
<br />
<tex> = \|\sum\limits_{k=1}^{n} \Delta \alpha_k e_k\| \le \sum\limits_{k=1}^{n}|\Delta\alpha_k\||e_k\| \le \sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}\sqrt{\sum\limits_{k=1}^{n}\Delta\alpha^2_k}</tex> (по неравенству Коши). <br />
<br />
Заметим, что <tex>\sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}</tex> {{---}} константа для данного базиса, а <tex>\sqrt{\sum\limits_{k=1}^{n}\Delta\alpha^2_k}</tex> {{---}} норма для <tex>\Delta\overline{\alpha}</tex> в <tex>\mathbb{R}^n</tex>, тогда из полученного неравенства очевидно, что <tex>f</tex> {{---}} непрерывна.<br />
<br />
Пусть <tex>M=2E_y(x)</tex>. Считаем, что <tex>x \not\in Y</tex>, тогда <tex>E_y(x) > 0</tex> (иначе, если <tex>E_y(x)=0</tex>, то <tex>\forall n</tex> <tex>\exists y_n \in Y</tex> такой, что <tex>\|x-y_n\| < \frac{1}{n}</tex>. Устремляя <tex>n \to \infty</tex>, получаем, что <tex>\|x-y_n\| \to 0</tex>. Так как <tex>y_n \to x</tex> в <tex>X</tex>, а <tex>\dim Y < \infty</tex>, то <tex>Y</tex> замкнуто в <tex>X</tex>, <tex>y_n \in Y</tex>, значит и <tex>x \in Y</tex>, что противоречит нашему предположению).<br />
<br />
Выясним, на каком множестве гарантированно <tex>f(\overline{\alpha}) > M</tex>, то есть, <tex>\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\| > M</tex>. <br />
<br />
<tex>\|x - \sum\limits_{k=1}^{n}\alpha_k e_k\| \ge \|\sum\limits_{k=1}^{n}\alpha_k e_k\| - \|x\|</tex>, то есть, надо смотреть такие <tex>\overline{\alpha}</tex>, для которых выполнено условие: <tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\| > M + \|x\|</tex>. Если выполнено это неравенство, то в силу предыдущих выкладок, необходимое нам неравенство тоже выполнено. Тогда на совокупности точек <tex>\overline{\alpha} \in \mathbb{R}^n</tex> таких, что <tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\| > M + \|x\|</tex> функция минимума достигать не может, так как <tex>M</tex> само в два раза больше этого минимума.<br />
<br />
Значит, минимум может достигаться только на <tex>T = \{\overline{\alpha} \in \mathbb{R}^n : \|\sum\limits_{k=1}^{n}\alpha_k e_k\| \le M + \|x\|\}</tex>. Если убедиться, что это множество {{---}} компакт в <tex>\mathbb{R}^n</tex>, то, по теореме Вейерштрасса, <tex>f</tex> примет на нем свое минимальное значение, которое является наилучшим приближением.<br />
<br />
Компактом в <tex>\mathbb{R}^n</tex> называют множество, которое содержит в себе пределы всех своих сходящихся подпоследовательностей, что равносильно ограниченности и замкнутости множества.<br />
<br />
1) ''Замкнутость''<br />
<br />
Пусть <tex>\overline{\alpha}^{(m)} \to \overline{\alpha}</tex>, <tex>\overline{\alpha}^{(m)} \in T</tex>, так как сходимость покоординатная, то <tex>\alpha^{(m)}_k \to \alpha_k</tex> для <tex>k = \overline{1,n}</tex>. <br />
<br />
Если <tex>\|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k\| \to \|\sum\limits_{k=1}^{n}\alpha_k e_k\|</tex>, то, так как <tex>\|\sum\limits_{k=1}^{n}\alpha^{(m)}_k e_k\|\le M + \|x\|</tex>, предел нормы ограничен этим же значением, тогда <tex>\overline{\alpha}\in T</tex>, и <tex>T</tex> замкнуто.<br />
<br />
<tex>|\|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k\|-\|\sum\limits_{k=1}^{n}\alpha_k e_k\|| \le \|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k-\sum\limits_{k=1}^{n}\alpha_ke_k\|=\|\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)e_k\| \le </tex><br />
<br />
<tex> \le \sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}\sqrt{\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)^2}</tex>. <br />
<br />
Так как <tex>\sqrt{\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)^2} \to 0</tex>, то <tex>T</tex> {{---}} замкнуто.<br />
<br />
2) ''Ограниченность''<br />
<br />
Рассмотрим евклидову норму в <tex> \mathbb{R}^n </tex>: <tex>\|\overline{\alpha}\| = \sqrt{\sum\limits_{k=1}^{n}\alpha_k^2}</tex>. <br />
<br />
<tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\|=\|\overline{\alpha}\|\|\sum\limits_{k=1}^{n}\frac{\alpha_k}{\|\overline{\alpha}\|}e_k\| \le M + \|x\|</tex>. Обозначим за <tex>\beta_k = \frac{\alpha_k}{\|\overline{\alpha}\|}</tex> и заметим, что <tex>\sum\limits_{k=1}^{n}\beta_k^2=1</tex>. Будем рассматривать суммы <tex>\|\sum\limits_{k=1}^{n}\beta_k e_k\|</tex>, нам необходимо доказать их ограниченность. <br />
<br />
Обозначим <tex>m = \inf\limits_{\|\beta\|=1}\|\sum\limits_{k=1}^{n}\beta_k e_k\|</tex>.<br />
<br />
Нижняя грань(инфимум) берется по единичной сфере в <tex>\mathbb{R}^n</tex> (компакт в <tex>\mathbb{R}^n</tex>), по непрерывной функции, значит, по теореме Вейерштрасса, найдется <tex>\beta^*</tex> такая, что <tex>\|\beta^*\|=1</tex> и <tex>m = \|\sum\limits_{k=1}^{n}\beta_k^* e_k\|</tex>.<br />
<br />
Если предположить, что <tex>m = 0</tex>, то <tex>\sum\limits_{k=1}^{n}\beta^*_k e_k = 0</tex>, но так как <tex>e_k</tex> {{---}} линейно независимы, то <tex>\beta^*=0</tex> и <tex>\sum\limits_{k=1}^{n}(\beta^*_k)^2=0</tex>. Но этого быть не может, ведь <tex>\sum\limits_{k=1}^{n}(\beta^*_k)^2 = \|\beta^*\|^2 = 1</tex>, откуда противоречие. Значит, <tex>m>0</tex>.<br />
<br />
Тогда <tex>\|\overline{\alpha}\| \le \frac{M+\|x\|}{m}</tex>, <tex>T</tex> ограниченно, <tex>T</tex> {{---}} компакт, теорема доказана.<br />
}}<br />
<br />
Можно рассмотреть <tex>C[0,1]</tex>, <tex>\|f\|=\max\limits_{x \in [0,1]}|f(x)|</tex>. Если в качестве <tex>A_n = \{\sum\limits_{k=1}^{n}\alpha_k t^k, \alpha_k \in \mathbb{R}\}</tex> взять конечномерное подмножество <tex>C[0,1]</tex>, далее начинать рассматривать <tex>E_n(f)</tex>, то, по доказанной теореме, существует <tex> T_n(f) \in A_n</tex>, такое, что <tex>E_n(f)=|f-T_n(f)|</tex>.<br />
<br />
Так как <tex>A_n \subset A_{n+1}</tex>, то <tex>E_n(f) \ge E_{n+1}(f)</tex>, то есть, <tex>E_n(f)</tex> {{---}} не возрастает и по [[Приближение_непрерывной_функции_полиномами_на_отрезке#weirstrasscont|теореме Вейерштрасса]], любая непрерывная функция сколь угодно точно приближается полиномом, а значит, <tex>E_n(f) \to 0</tex>.<br />
<br />
[[Интеграл Фейера|<<]][[Теорема Фейера|>>]]<br />
<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D0%B8%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%B5_%D0%BF%D1%80%D0%B8%D0%B1%D0%BB%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0%D1%85&diff=26828Наилучшее приближение в линейных нормированных пространствах2012-06-24T18:48:30Z<p>Niko: </p>
<hr />
<div>[[Интеграл Фейера|<<]][[Теорема Фейера|>>]]<br />
<br />
{{В разработке}}<br />
Пусть <tex>X</tex> {{---}} [[Нормированные_пространства#определение и примеры|нормированное пространство]], к примеру, <tex>L_p</tex>. Пусть <tex>Y</tex> {{---}} линейное множество в <tex>X</tex>, например, <tex>H_n</tex> (тригонометрических полиномов степени не больше <tex>n</tex>).<br />
{{Определение<br />
|definition = Для любого <tex> x \in X</tex> величина <tex>E_y(x) = \inf\limits_{y \in Y}{\|x-y\|}</tex> называется '''наилучшим приближением точки <tex>x</tex> элементами линейного множества <tex>Y</tex>'''.<br />
Если при этом существует <tex>y^* \in Y</tex> такой, что <tex>E_y(x)=\|x-y^*\|</tex>, то этот <tex>y^*</tex> называется '''элементом наилучшего приближения точки <tex>x</tex>'''.<br />
}}<br />
Заметим: гарантий, что <tex>y^*</tex> единственный и что он вообще существует, нет. <br />
<br />
<tex>E_y(x) \ge 0</tex>, если <tex>x \in Y</tex>, то <tex>E_y(x)=0</tex>, таким образом, положительной определенности у этого функционала нет.<br />
<br />
{{Утверждение<br />
|statement= Наилучшее приближение является полунормой, то есть выполняются однородность и неравенство треугольника.<br />
|proof= <br />
'''Однородность''': <tex>\forall \varepsilon > 0 </tex>, по определению нижней грани <tex>\|x-y_{\varepsilon}\| < E_y(x)+\varepsilon</tex>, где <tex>y_{\varepsilon} \in Y</tex>.<br />
<tex>|\lambda|\|x-y_{\varepsilon}\|<|\lambda|E_y(x)+|\lambda| \varepsilon </tex><br />
<br />
По аксиомам нормы: <tex>|\lambda|\|x-y_{\varepsilon}\|=\|\lambda x-\lambda y_\varepsilon\|</tex>.<br />
<br />
Так как <tex>Y</tex> {{---}} линейное пространство, то <tex>\lambda y_{\varepsilon} \in Y</tex> и <tex>\| \lambda x - \lambda y_{\varepsilon} \| \ge E_y(\lambda x)</tex>.<br />
<br />
Тогда <tex>E_y(\lambda x) < |\lambda|E_y(x)+ |\lambda|\varepsilon</tex>, при <tex>\varepsilon \to 0</tex> получаем <tex>E_y(\lambda x) \le |\lambda|E_y(x)</tex>.<br />
<br />
В обратную сторону: <tex>E_y(x)=E_y(\lambda \frac{x}{\lambda}) \le |\lambda|E_y(\frac{x}{\lambda})</tex>, то есть, <tex>\frac{1}{|\lambda|}E_y(x) \le E_y(\frac{x}{\lambda})</tex>. <br />
<br />
Пусть <tex>\mu = \frac{1}{\lambda}</tex>, тогда <tex>|\mu|E_y(x) \le E_y(\mu x)</tex>.<br />
<br />
Таким образом, получаем два противоположных неравенства, следовательно, <tex>E_y(\lambda x)=|\lambda|E_y(x)</tex>.<br />
<br />
'''Неравенство треугольника''': <tex>\forall \varepsilon > 0</tex>: <tex>\|x_1-y_{\varepsilon}\|< E_y(x_1)+\varepsilon</tex> и <tex>\|x_2-z_{\varepsilon}\|< E_y(x_2)+\varepsilon</tex>.<br />
<br />
Складывая два неравенства, получим <tex>\|x_1-y_{\varepsilon}\|+\|x_2-z_{\varepsilon}\|<E_y(x_1)+E_y(x_2)+2\varepsilon</tex>.<br />
<br />
По свойствам нижней грани, <tex>E_y(x_1+x_2)\le \|(x_1+x_2)-(y_{\varepsilon}+z_{\varepsilon})\| \le \| x_1 - y_{\varepsilon} \| + \| x_2 - z_{\varepsilon} \| < E_y(x_1) + E_y(x_2) + 2\varepsilon</tex>, так как <tex>y_{\varepsilon}+z_{\varepsilon} \in Y</tex>.<br />
<br />
При <tex>\varepsilon \to 0</tex> приходим к неравенству треугольника: <tex>E_y(x_1+x_2)\le E_y(x_1)+E_y(x_2)</tex>.<br />
}}<br />
<br />
Отметим некоторый технический момент: <tex>\forall x \in X</tex>, <tex>\forall y \in Y</tex> выполняется: <tex>E_y(x)=E_y((x+y)-y)\le E_y(x+y)+E(-y)</tex>, <tex>E_y(-y) = 0</tex>, так как <tex>-y \in Y</tex>, следовательно, <tex>E_y(x) \le E_y(x+y) \le E_y(x) + E_y(y) = E_y(x)</tex>. <br />
<br />
Значит, <tex>\forall y \in Y E_y(x)=E_y(x+y)</tex>.<br />
<br />
Также, так как <tex>0 \in Y</tex>, то <tex>E_y(x) \le \|x-0\|=\|x\|</tex>, следовательно, <tex>E_y(x) \le \|x\|</tex>.<br />
<br />
[[%D0%9D%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0#.D0.90.D1.80.D0.B8.D1.84.D0.BC.D0.B5.D1.82.D0.B8.D0.BA.D0.B0_.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.BE.D0.B2|Отсюда]], если <tex>x_n \to x</tex>, то <tex>E_y(x_n) \to E_y(x)</tex>, то есть, <tex> E </tex> непрерывно как функционал в норме <tex> X </tex>.<br />
<br />
Основной интерес представляют покрытия <tex> X </tex> элементами конечномерных подпространств. <br />
<br />
Пусть <tex>\dim Y < +\infty</tex>, <tex>Y=\mathcal L(e_1,..,e_p)</tex> (<tex> \mathcal L </tex> - линейная оболочка множества), тогда <tex>\dim Y = p</tex>.<br />
<br />
К примеру, <tex>\dim H_n = 2n+1</tex>, <tex>H_n = \mathcal L(1, \cos{x}, \sin{x},..,\cos{nx}, \sin{nx})</tex>.<br />
<br />
{{Теорема<br />
|statement=<br />
Пусть <tex>X</tex> {{---}} нормированное пространство, <tex>\dim Y < +\infty</tex>, тогда <tex>\forall x \in X</tex> существует элемент наилучшего приближения <tex>x</tex>.<br />
|proof=<br />
Пусть <tex>e_1, \ldots, e_n</tex> {{---}} базис <tex>Y</tex>, то есть, <tex>Y = \mathcal L(e_1,..,e_n)</tex>.<br />
<br />
Рассмотрим функцию <tex>f(\alpha_1,..,\alpha_n)=\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|</tex>, тогда ясно, что<br />
<br />
<tex>E_y(x)=\inf\limits_{\overline{\alpha}\in \mathbb{R}^n}f(\alpha_1,..,\alpha_n)</tex>.<br />
<br />
Надо доказать, что существует <tex>\overline{\alpha^*}=(\alpha^*_1,..,\alpha^*_n)</tex>, на котором достигается эта нижняя грань, тогда в качестве <tex>y^*</tex> можно взять <tex>y^*=\sum\limits_{k=1}^{n}\alpha^*_k e_k</tex>. Доказательство существования будем вести с помощью [[Предел_отображения_в_метрическом_пространстве#weirstrass|теоремы Вейерштрасса]], утверждающей, что если функция <tex>n</tex> переменных непрерывна на компакте, то она принимает на нем свое минимальное значение.<br />
<br />
Проверим непрерывность: <br />
<tex>|f(\overline{\alpha}+\Delta \overline{\alpha})-f(\overline{\alpha})| = |\|x-\sum\limits_{k=1}^{n}(\alpha_k+\Delta\alpha_k)e_k\|-\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|| \le </tex><br />
<br />
<tex>\le |\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\| + \|\sum\limits_{k=1}^{n} \Delta\alpha_k e_k\| - \|x-\sum\limits_{k=1}^{n}\alpha_k e_k\|| = </tex><br />
<br />
<tex> = \|\sum\limits_{k=1}^{n} \Delta \alpha_k e_k\| \le \sum\limits_{k=1}^{n}|\Delta\alpha_k\||e_k\| \le \sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}\sqrt{\sum\limits_{k=1}^{n}\Delta\alpha^2_k}</tex> (по неравенству Коши). <br />
<br />
Заметим, что <tex>\sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}</tex> {{---}} константа для данного базиса, а <tex>\sqrt{\sum\limits_{k=1}^{n}\Delta\alpha^2_k}</tex> {{---}} норма для <tex>\Delta\overline{\alpha}</tex> в <tex>\mathbb{R}^n</tex>, тогда из полученного неравенства очевидно, что <tex>f</tex> {{---}} непрерывна.<br />
<br />
Пусть <tex>M=2E_y(x)</tex>. Считаем, что <tex>x \not\in Y</tex>, тогда <tex>E_y(x) > 0</tex> (иначе, если <tex>E_y(x)=0</tex>, то <tex>\forall n</tex> <tex>\exists y_n \in Y</tex> такой, что <tex>\|x-y_n\| < \frac{1}{n}</tex>. Устремляя <tex>n \to \infty</tex>, получаем, что <tex>\|x-y_n\| \to 0</tex>. Так как <tex>y_n \to x</tex> в <tex>X</tex>, а <tex>\dim Y < \infty</tex>, то <tex>Y</tex> замкнуто в <tex>X</tex>, <tex>y_n \in Y</tex>, значит и <tex>x \in Y</tex>, что противоречит нашему предположению).<br />
<br />
Выясним, на каком множестве гарантированно <tex>f(\overline{\alpha}) > M</tex>, то есть, <tex>\|x-\sum\limits_{k=1}^{n}\alpha_k e_k\| > M</tex>. <br />
<br />
<tex>\|x - \sum\limits_{k=1}^{n}\alpha_k e_k\| \ge \|\sum\limits_{k=1}^{n}\alpha_k e_k\| - \|x\|</tex>, то есть, надо смотреть такие <tex>\overline{\alpha}</tex>, для которых выполнено условие: <tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\| > M + \|x\|</tex>. Если выполнено это неравенство, то в силу предыдущих выкладок, необходимое нам неравенство тоже выполнено. Тогда на совокупности точек <tex>\overline{\alpha} \in \mathbb{R}^n</tex> таких, что <tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\| > M + \|x\|</tex> функция минимума достигать не может, так как <tex>M</tex> само в два раза больше этого минимума.<br />
<br />
Значит, минимум может достигаться только на <tex>T = \{\overline{\alpha} \in \mathbb{R}^n : \|\sum\limits_{k=1}^{n}\alpha_k e_k\| \le M + \|x\|\}</tex>. Если убедиться, что это множество {{---}} компакт в <tex>\mathbb{R}^n</tex>, то, по теореме Вейерштрасса, <tex>f</tex> примет на нем свое минимальное значение, которое является наилучшим приближением.<br />
<br />
Компактом в <tex>\mathbb{R}^n</tex> называют множество, которое содержит в себе пределы всех своих сходящихся подпоследовательностей, что равносильно ограниченности и замкнутости множества.<br />
<br />
1) ''Замкнутость''<br />
<br />
Пусть <tex>\overline{\alpha}^{(m)} \to \overline{\alpha}</tex>, <tex>\overline{\alpha}^{(m)} \in T</tex>, так как сходимость покоординатная, то <tex>\alpha^{(m)}_k \to \alpha_k</tex> для <tex>k = \overline{1,n}</tex>. <br />
<br />
Если <tex>\|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k\| \to \|\sum\limits_{k=1}^{n}\alpha_k e_k\|</tex>, то, так как <tex>\|\sum\limits_{k=1}^{n}\alpha^{(m)}_k e_k\|\le M + \|x\|</tex>, предел нормы ограничен этим же значением, тогда <tex>\overline{\alpha}\in T</tex>, и <tex>T</tex> замкнуто.<br />
<br />
<tex>|\|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k\|-\|\sum\limits_{k=1}^{n}\alpha_k e_k\|| \le \|\sum\limits_{k=1}^{n}\alpha^{(m)}_ke_k-\sum\limits_{k=1}^{n}\alpha_ke_k\|=\|\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)e_k\| \le </tex><br />
<br />
<tex> \le \sqrt{\sum\limits_{k=1}^{n}\|e_k\|^2}\sqrt{\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)^2}</tex>. <br />
<br />
Так как <tex>\sqrt{\sum\limits_{k=1}^{n}(\alpha^{(m)}_k-\alpha_k)^2} \to 0</tex>, то <tex>T</tex> {{---}} замкнуто.<br />
<br />
2) ''Ограниченность''<br />
<br />
Рассмотрим евклидову норму в <tex> \mathbb{R}^n </tex>: <tex>\|\overline{\alpha}\| = \sqrt{\sum\limits_{k=1}^{n}\alpha_k^2}</tex>. <br />
<br />
<tex>\|\sum\limits_{k=1}^{n}\alpha_k e_k\|=\|\overline{\alpha}\|\|\sum\limits_{k=1}^{n}\frac{\alpha_k}{\|\overline{\alpha}\|}e_k\| \le M + \|x\|</tex>. Обозначим за <tex>\beta_k = \frac{\alpha_k}{\|\overline{\alpha}\|}</tex> и заметим, что <tex>\sum\limits_{k=1}^{n}\beta_k^2=1</tex>. Будем рассматривать суммы <tex>\|\sum\limits_{k=1}^{n}\beta_k e_k\|</tex>, нам необходимо доказать их ограниченность. <br />
<br />
Обозначим <tex>m = \inf\limits_{\|\beta\|=1}\|\sum\limits_{k=1}^{n}\beta_k e_k\|</tex>.<br />
<br />
Нижняя грань(инфимум) берется по единичной сфере в <tex>\mathbb{R}^n</tex> (компакт в <tex>\mathbb{R}^n</tex>), по непрерывной функции, значит, по теореме Вейерштрасса, найдется <tex>\beta^*</tex> такая, что <tex>\|\beta^*\|=1</tex> и <tex>m = \|\sum\limits_{k=1}^{n}\beta_k^* e_k\|</tex>.<br />
<br />
Если предположить, что <tex>m = 0</tex>, то <tex>\sum\limits_{k=1}^{n}\beta^*_k e_k = 0</tex>, но так как <tex>e_k</tex> {{---}} линейно независимы, то <tex>\beta^*=0</tex> и <tex>\sum\limits_{k=1}^{n}(\beta^*_k)^2=0</tex>. Но этого быть не может, ведь <tex>\sum\limits_{k=1}^{n}(\beta^*_k)^2 = \|\beta^*\|^2 = 1</tex>, откуда противоречие. Значит, <tex>m>0</tex>.<br />
<br />
Тогда <tex>\|\overline{\alpha}\| \le \frac{M+\|x\|}{m}</tex>, <tex>T</tex> ограниченно, <tex>T</tex> {{---}} компакт, теорема доказана.<br />
}}<br />
<br />
Можно рассмотреть <tex>C[0,1]</tex>, <tex>\|f\|=\max\limits_{x \in [0,1]}|f(x)|</tex>. Если в качестве <tex>A_n = \{\sum\limits_{k=1}^{n}\alpha_k t^k, \alpha_k \in \mathbb{R}\}</tex> взять конечномерное подмножество <tex>C[0,1]</tex>, далее начинать рассматривать <tex>E_n(f)</tex>, то, по доказанной теореме, существует <tex> T_n(f) \in A_n</tex>, такое, что <tex>E_n(f)=|f-T_n(f)|</tex>.<br />
<br />
Так как <tex>A_n \subset A_{n+1}</tex>, то <tex>E_n(f) \ge E_{n+1}(f)</tex>, то есть, <tex>E_n(f)</tex> {{---}} убывает. Тогда, по [[Приближение_непрерывной_функции_полиномами_на_отрезке#weirstrasscont|теореме Вейерштрасса]], любая непрерывная функция сколь угодно точно приближается полиномом, а значит, <tex>E_n(f) \to 0</tex>.<br />
<br />
[[Интеграл Фейера|<<]][[Теорема Фейера|>>]]<br />
<br />
[[Категория:Математический анализ 2 курс]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=26210Дискретная математика, алгоритмы и структуры данных2012-06-20T18:28:10Z<p>Niko: /* Теория расписаний */</p>
<hr />
<div>[[Категория:Дискретная математика и алгоритмы]]<br />
[[Категория: Алгоритмы и структуры данных]]<br />
<br />
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].<br />
<br />
= Первый семестр =<br />
<br />
== Отношения ==<br />
*[[Определение отношения]]<br />
*[[Степень отношений]]<br />
*[[Композиция отношений|Композиция отношений. Обратное отношение]]<br />
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]<br />
*[[Симметричное отношение]]<br />
*[[Антисимметричное отношение]]<br />
*[[Транзитивное отношение]]<br />
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]<br />
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]<br />
*[[Транзитивный остов]]<br />
*[[Отношение порядка]]<br />
*[[Отношение эквивалентности]]<br />
<br />
== Булевы функции ==<br />
*[[Определение булевой функции]]<br />
*[[Суперпозиции]]<br />
*[[ДНФ]]<br />
*[[КНФ]]<br />
*[[Полином Жегалкина]]<br />
*[[Полные системы функций. Теорема Поста о полной системе функций]]<br />
*[[Сокращенная и минимальная ДНФ]]<br />
*[[Минимизация ДНФ с помощью покрытий гиперкуба и карт Карно]]<br />
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]<br />
*[[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]]<br />
*[[Представление функции класса DM с помощью медианы]]<br />
*[[Пороговая функция]]<br />
<br />
== Схемы из функциональных элементов ==<br />
*[[Реализация булевой функции схемой из функциональных элементов]]<br />
*[[Cумматор]]<br />
*[[Каскадный сумматор]]<br />
*[[Двоичный каскадный сумматор]]<br />
*[[Реализация вычитания сумматором]]<br />
*[[Матричный умножитель]]<br />
*[[Дерево Уоллеса]]<br />
<br />
== Представление информации ==<br />
*[[Кодирование информации]]<br />
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]<br />
*[[Представление вещественных чисел]]<br />
*[[Представление символов, таблицы кодировок]]<br />
<br />
== Алгоритмы сжатия ==<br />
*[[Алгоритм Хаффмана]]<br />
*[[Алгоритм LZW]]<br />
*[[Алгоритмы LZ77 и LZ78]]<br />
*[[Преобразование Барроуза-Уиллера]]<br />
*[[Обратное преобразование Барроуза-Уиллера]]<br />
*[[Преобразование MTF]]<br />
*[[Расстояние Хэмминга]]<br />
*[[Избыточное кодирование, код Хэмминга]]<br />
*[[Неравенство Крафта]]<br />
*[[Неравенство Макмиллана]]<br />
<br />
== Комбинаторика ==<br />
*[[Комбинаторные объекты]]<br />
*[[Лексикографический порядок]]<br />
*[[Формула включения-исключения]]<br />
*[[Генерация комбинаторных объектов в лексикографическом порядке]]<br />
*[[Получение номера по объекту]]<br />
*[[Получение объекта по номеру]]<br />
*[[Получение следующего объекта]]<br />
*[[Коды Грея]]<br />
*[[Коды Грея для перестановок]]<br />
*[[Цепные коды]]<br />
*[[Правильные скобочные последовательности]]<br />
*[[Действие перестановки на набор из элементов, представление в виде циклов]]<br />
*[[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]<br />
*[[Таблица инверсий]]<br />
*[[Умножение перестановок, обратная перестановка, группа перестановок]]<br />
*[[Теорема Кэли]]<br />
*[[Матричное представление перестановок]]<br />
*[[Задача о минимуме/максимуме скалярного произведения]]<br />
*[[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]<br />
*[[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]<br />
*[[Производящая функция]]<br />
<br />
== [[Динамическое программирование]] ==<br />
*[[Кратчайший путь в ациклическом графе]]<br />
*[[Задача о расстановке знаков в выражении]]<br />
*[[Задача о наибольшей общей подпоследовательности]]<br />
*[[Задача о порядке перемножения матриц]]<br />
*[[Задача о наибольшей возрастающей подпоследовательности]]<br />
*[[Задача о паросочетании максимального веса в дереве, амортизированные оценки для ДП на дереве]]<br />
*[[Метод четырех русских для умножения матриц]]<br />
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<br />
*[[Задача коммивояжера, ДП по подмножествам]]<br />
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]<br />
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]<br />
*[[Задача о расстоянии Дамерау-Левенштейна]]<br />
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]<br />
<br />
== Теория вероятностей ==<br />
*[[Вероятностное пространство, элементарный исход, событие]]<br />
*[[Независимые события]]<br />
*[[Условная вероятность]]<br />
*[[Формула Байеса]]<br />
*[[Формула полной вероятности]]<br />
*[[Дискретная случайная величина]]<br />
*[[Независимые случайные величины]]<br />
*[[Математическое ожидание случайной величины]]<br />
*[[Дисперсия случайной величины]]<br />
*[[Ковариация случайных величин]]<br />
*[[Энтропия случайного источника]]<br />
*[[Симуляция одним распределением другого]]<br />
*[[Арифметическое кодирование]]<br />
*[[Задача о двух конвертах]]<br />
<br />
== Марковские цепи ==<br />
<br />
* [[Марковская цепь]]<br />
* [[Теорема о поглощении]]<br />
* [[Фундаментальная матрица]]<br />
* [[Математическое ожидание времени поглощения]]<br />
* [[Расчет вероятности поглощения в состоянии]]<br />
* [[Эргодическая марковская цепь]]<br />
* [[Регулярная марковская цепь]]<br />
<br />
= Второй семестр =<br />
<br />
== Амортизационный анализ ==<br />
* [[Амортизационный анализ]]<br />
* [[Саморасширяющийся массив]]<br />
* [[Массив с увеличением/уменьшением размера]]<br />
* [[Список]]<br />
* [[Стек]]<br />
* [[Очередь]]<br />
* [[Персистентный стек]]<br />
* [[Персистентный дек]]<br />
<br />
== Приоритетные очереди ==<br />
<br />
* [[Двоичная куча]]<br />
* [[Биномиальная куча]]<br />
* [[Фибоначчиева куча]]<br />
<br />
== Система непересекающихся множеств ==<br />
* [[СНМ (наивные реализации) | Наивные реализации]]<br />
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]<br />
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]<br />
<br />
== Поисковые структуры данных ==<br />
* [[Упорядоченное множество]]<br />
* [[Дерево поиска, наивная реализация]]<br />
* [[АВЛ-дерево]]<br />
* [[2-3 дерево]]<br />
* [[B-дерево]]<br />
* [[Красно-черное дерево]]<br />
* [[Декартово дерево]]<br />
* [[Декартово дерево по неявному ключу]]<br />
* [[Splay-дерево]]<br />
* [[Рандомизированное бинарное дерево поиска]]<br />
* [[Дерево ван Эмде Боаса]]<br />
* [[Список с пропусками]]<br />
<br />
== Дерево отрезков ==<br />
<br />
* [[Статистики на отрезках. Корневая эвристика]]<br />
* [[Дерево отрезков. Построение]]<br />
* [[Реализация запроса в дереве отрезков сверху]]<br />
* [[Реализация запроса в дереве отрезков снизу]]<br />
* [[Несогласованные поддеревья. Реализация массового обновления]]<br />
* [[Многомерное дерево отрезков]]<br />
* [[Сжатое многомерное дерево отрезков]]<br />
<br />
== Дерево Фенвика ==<br />
* [[Дерево Фенвика]]<br />
* [[Встречное дерево Фенвика]]<br />
* [[Дерево Фенвика для некоммутативных операций]]<br />
* [[Многомерное дерево Фенвика]]<br />
<br />
== Хеширование ==<br />
* [[Хеш-таблица]]<br />
* [[Хеширование]]<br />
* [[Открытое и закрытое хеширование]]<br />
* [[Поиск свободного места при закрытом хешировании]]<br />
* [[Хеширование кукушки]]<br />
* [[Идеальное хеширование]]<br />
* [[Перехеширование. Амортизационный анализ]]<br />
* [[Фильтр Блума]]<br />
* [[Универсальное семейство хеш-функций]]<br />
<br />
== [[Сортировка]] ==<br />
* [[Сортировка выбором]]<br />
* [[Сортировка пузырьком]]<br />
* [[Сортировка вставками]]<br />
* [[Сортировка кучей]]<br />
* [[Быстрая сортировка]]<br />
* [[Сортировка слиянием]]<br />
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]<br />
* [[Теорема о нижней оценке для сортировки сравнениями]]<br />
* [[Сортировка подсчетом]]<br />
* [[Сортировка подсчетом сложных объектов]]<br />
* [[Цифровая сортировка]]<br />
* [[Карманная сортировка]]<br />
* [[Поиск k-ой порядковой статистики]]<br />
* [[Поиск k-ой порядковой статистики за линейное время]]<br />
<br />
== Сортирующие сети ==<br />
* [[Сортирующие сети]]<br />
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]<br />
* [[Сортирующие сети для квадратичных сортировок]]<br />
* [[Сеть Бетчера]]<br />
<br />
== Алгоритмы поиска ==<br />
* [[Целочисленный двоичный поиск]]<br />
* [[Вещественный двоичный поиск]]<br />
* [[Троичный поиск]]<br />
* [[Поиск с помощью золотого сечения]]<br />
* [[Интерполяционный поиск]]<br />
<br />
== Связь между структурами данных ==<br />
* [[Связь между структурами данных]]<br />
<br />
= Третий семестр =<br />
<br />
== Основные определения теории графов ==<br />
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]<br />
* [[Лемма о рукопожатиях]]<br />
* [[Теорема о существовании простого пути в случае существования пути]]<br />
* [[Теорема о существовании простого цикла в случае существования цикла]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
* [[Матрица инцидентности графа]]<br />
* [[Циклическое пространство графа]]<br />
* [[Фундаментальные циклы графа]]<br />
* [[Дерево, эквивалентные определения]]<br />
<br />
== Связность в графах ==<br />
* [[Отношение связности, компоненты связности]]<br />
* [[Отношение реберной двусвязности]]<br />
* [[Отношение вершинной двусвязности]]<br />
* [[Граф компонент реберной двусвязности]]<br />
* [[Граф блоков-точек сочленения]]<br />
* [[Точка сочленения, эквивалентные определения]]<br />
* [[Мост, эквивалентные определения]]<br />
* [[k-связность]]<br />
* [[Теорема Менгера]]<br />
* [[Теорема Менгера, альтернативное доказательство]]<br />
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]<br />
<br />
== Остовные деревья ==<br />
* [[Матрица Кирхгофа]]<br />
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]<br />
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]<br />
* [[Количество помеченных деревьев]]<br />
* [[Коды Прюфера]]<br />
<br />
== Обходы графов ==<br />
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]<br />
* [[Покрытие ребер графа путями]]<br />
* [[Алгоритм построения Эйлерова цикла]]<br />
* [[Произвольно вычерчиваемые из заданной вершины графы]]<br />
* [[Гамильтоновы графы]]<br />
* [[Теорема Хватала]]<br />
* [[Теорема Дирака]]<br />
* [[Теорема Оре]]<br />
* [[Турниры]]<br />
* [[Теорема Редеи-Камиона]]<br />
<br />
== Укладки графов ==<br />
* [[Укладка графа на плоскости]]<br />
* [[Формула Эйлера]]<br />
* [[Непланарность K5 и K3,3|Непланарность <tex>K_5</tex> и <tex>K_{3,3}</tex>]]<br />
* [[Укладка дерева]]<br />
* [[Укладка графа с планарными компонентами реберной двусвязности]]<br />
* [[Укладка графа с планарными компонентами вершинной двусвязности]]<br />
* [[Теорема Понтрягина-Куратовского]]<br />
* [[Двойственный граф планарного графа]]<br />
<br />
== Раскраски графов ==<br />
* [[Раскраска графа]]<br />
* [[Двудольные графы и раскраска в 2 цвета]]<br />
* [[Хроматический многочлен]]<br />
** [[Хроматический многочлен#Хроматический многочлен полного графа|Хроматический многочлен полного графа]]<br />
** [[Хроматический многочлен#Хроматический многочлен пустого графа|Хроматический многочлен пустого графа]]<br />
** [[Хроматический многочлен#Хроматический многочлен дерева|Хроматический многочлен дерева]]<br />
** [[Хроматический многочлен#Рекуррентные формулы для хроматических многочленов|Рекуррентные формулы для хроматических многочленов]]<br />
** [[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена: старший, второй коэффициенты, знакопеременность]]<br />
* [[Формула Зыкова]]<br />
* [[Формула Уитни]]<br />
<br />
== Обход в глубину ==<br />
* [[Обход в глубину, цвета вершин]]<br />
* [[Лемма о белых путях]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска цикла в ориентированном графе]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [[Построение компонент реберной двусвязности]]<br />
<br />
== Кратчайшие пути в графах ==<br />
* [[Обход в ширину]]<br />
* [[Алгоритм Форда-Беллмана]]<br />
* [[Алгоритм Дейкстры]]<br />
* [[Алгоритм Флойда]]<br />
* [[Алгоритм A*]]<br />
* [[Алгоритм Джонсона]]<br />
<br />
== Построение остовных деревьев ==<br />
* [[Лемма о безопасном ребре]]<br />
* [[Алгоритм Прима]]<br />
* [[Алгоритм Краскала]]<br />
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]<br />
* [[Алгоритм двух китайцев]]<br />
<br />
== Задача о паросочетании ==<br />
* [[Теорема о максимальном паросочетании и дополняющих цепях]]<br />
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]<br />
* [[Алгоритм Куна для поиска максимального паросочетания]]<br />
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]<br />
* [[Связь вершинного покрытия и независимого множества]]<br />
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]<br />
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]<br />
<br />
== Задача о максимальном потоке ==<br />
* [[Определение сети, потока]]<br />
* [[Разрез, лемма о потоке через разрез]]<br />
* [[Дополняющая сеть, дополняющий путь]]<br />
* [[Лемма о сложении потоков]]<br />
* [[Теорема Форда-Фалкерсона]]<br />
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]<br />
* [[Алоритм Эдмондса-Карпа]]<br />
* [[Алгоритм масштабирования потока]]<br />
* [[Блокирующий поток]]<br />
* [[Схема алгоритма Диница]]<br />
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]<br />
* [[Алгоритм поиска блокирующего потока в ациклической сети]]<br />
* [[Теорема о декомпозиции]]<br />
* [[Теорема о декомпозиционном барьере]]<br />
* [[Циркуляция потока]]<br />
<br />
== Задача о потоке минимальной стоимости ==<br />
* [[Поток минимальной стоимости]]<br />
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]<br />
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]<br />
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]<br />
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]<br />
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]<br />
* [[Венгерский алгоритм решения задачи о назначениях]]<br />
<br />
= Четвертый семестр =<br />
<br />
== Основные определения. Простые комбинаторные свойства слов ==<br />
* [[Основные определения, связанные со строками]]<br />
* [[Период и бордер, их связь]]<br />
* [[Слово Фибоначчи]]<br />
* [[Слово Туэ-Морса]]<br />
<br />
== Поиск подстроки в строке ==<br />
* [[Наивный алгоритм поиска подстроки в строке]]<br />
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]<br />
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]<br />
* [[Префикс-функция]]<br />
* [[Алгоритм Кнута-Морриса-Пратта]]<br />
* [[Z-функция]]<br />
* [[Автомат для поиска образца в тексте]]<br />
* [[Бор]]<br />
* [[Алгоритм Ахо-Корасик]]<br />
<br />
== Суффиксное дерево ==<br />
* [[Суффиксный бор]]<br />
* [[Сжатое суффиксное дерево]]<br />
* [[Алгоритм Укконена]]<br />
<br />
== Суффиксный массив ==<br />
* [[Суффиксный массив]]<br />
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]<br />
* [[Цифровая сортировка]]<br />
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]<br />
* [[Алгоритм Касаи и др.]]<br />
* [[Алгоритм Карккайнена-Сандерса]]<br />
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]<br />
<br />
== Задача о наименьшем общем предке ==<br />
* [[Метод двоичного подъема]]<br />
* [[Сведение задачи LCA к задаче RMQ]]<br />
* [[Решение RMQ с помощью разреженной таблицы]]<br />
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)<br />
* [[Сведение задачи RMQ к задаче LCA]]<br />
<br />
== Матроиды ==<br />
* [[Определение матроида]]<br />
* [[Примеры матроидов]]<br />
* [[Прямая сумма матроидов]]<br />
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]<br />
* [[Жадный алгоритм поиска базы минимального веса]]<br />
* [[Теорема о базах]]<br />
* [[Аксиоматизация матроида базами]]<br />
* [[Теорема о циклах]]<br />
* [[Аксиоматизация матроида циклами]]<br />
* [[Ранговая функция, полумодулярность]]<br />
* [[Двойственный матроид]]<br />
* [[Оператор замыкания для матроидов]]<br />
=== Пересечение матроидов ===<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Лемма о паросочетании в графе замен]]<br />
* [[Лемма о единственном паросочетании в графе замен]]<br />
* [[Граф замен для двух матроидов]]<br />
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Теорема Эдмондса-Лоулера]]<br />
=== Объединение матроидов ===<br />
* [[Объединение матроидов, проверка множества на независимость]]<br />
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Теория расписаний ==<br />
* [[Классификация задач]]<br />
* [[Методы решения задач теории расписаний]]<br />
* [[Правило Лаулера]]<br />
* [[Flow shop]]<br />
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]<br />
* [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]]<br />
* [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]]<br />
* [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]]<br />
* [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]]<br />
* [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]]<br />
* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]<br />
* [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum u_i</tex>]]<br />
* [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i u_i</tex>]]<br />
* [[1wisumwi(ci - pi -ri)|<tex>1 \mid w_{i}\mid \sum w_{i}(c_{i} - p_{i} -r_{i})</tex>]]<br />
* [[1ridipi|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=R2Cmax&diff=26209R2Cmax2012-06-20T18:14:14Z<p>Niko: </p>
<hr />
<div><div style="background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;">Эта статья находится в разработке!</div><br />
<includeonly>[[Категория: В разработке]]</includeonly><br />
<br />
==Постановка задачи==<br />
Дано два разных неоднородных станка, которые работают параллельно. Есть <tex>n</tex> работ, время выполнения которых на первом <br />
и втором станке различное. Нужно минимизировать время завершения всех работ.<br />
<br />
==Сложность задачи==<br />
Задача <tex>R2 \mid \mid C_{max}</tex> является <tex>\mathrm{NP}</tex>-полной задачей.<br />
<br />
==Неэффективное решение==<br />
Переберём все битовые последовательности из <tex>n</tex> элементов. Для каждой перестановки вычислим завершение последней работы. Работы будем выполнять следующим образом, если на <tex>i</tex>&nbsp;-й позиции стоит 0, то <tex>i</tex>&nbsp;-ая работа будет выполняться на первом станке, иначе на втором. Среди всех перестановок выберем ту перестановку, у которой <tex>C_{max}</tex> минимальный.<br />
<br />
Время работы алгоритма <tex>O(n \cdot 2^n)</tex><br />
<br />
==Эффективное решение==<br />
Применим для решения данной задачи динамическое программирование.<br />
<br />
Будем считать <tex>dp[i][j]</tex>, в котором будем хранить минимально время выполнения работ на втором станке, где <tex>i</tex> означает, что мы рассмотрели <tex>i</tex> работ, а <tex>j</tex> с каким временем выполнения работ на первом станке. Тогда <tex>j</tex> не превосходит суммы выполнения работ на первом станке.<br />
<br />
Изначальное значение <tex>dp[0][0] = 0</tex>, а всё остальную таблицу проинициализируем бесконечностью.<br />
<br />
Допустим мы посчитали динамику для <tex>i-1</tex> работ. Теперь надо пересчитать её для <tex>i</tex>-ой работы. Переберём время выполнения работ на первом станке и посчитаем какое минимально время выполнения мы можем получить при на втором станке при фиксированном первом времени. Так как <tex>i</tex>-ю работу мы можем выполнить либо на первом станке, либо на втором, то <tex>dp[i][j]= \min(dp[i-1][j-p_1[i]], dp[i-1][j]+p_2[i])</tex>.<br />
<br />
Тогда ответом на задачу будет минимум среди всех максимумов из <tex>j</tex> и <tex>dp[n][j]</tex>.<br />
<br />
==Псевдокод==<br />
<tex>maxTime \leftarrow 0 </tex><br />
for <tex>i = 1 \dots n</tex><br />
<tex>maxTime += p_1[i]</tex><br />
<tex>dp[][] \leftarrow INF</tex><br />
<tex>dp[0][0] \leftarrow 0 </tex><br />
for <tex>i = 1 \dots n</tex><br />
for <tex>j = 0 \dots maxTime </tex><br />
if <tex>(j - p_2[i] > 0) </tex> then<br />
<tex>dp[i][j] \leftarrow \min (dp[i][j], dp[i-1][j - p_1[i]) </tex><br />
<tex>dp[i][j] \leftarrow \min (dp[i][j], dp[i-1][j] + p_2[i])</tex><br />
<tex>answer \leftarrow INF</tex><br />
for <tex> j = 0 \dots maxTime </tex><br />
<tex>answer \leftarrow \min (answer, \max(j, dp[n][j]))</tex><br />
<br />
==Время работы==<br />
Время работы <tex>O(n * maxTime)</tex> {{---}} псевдополиномиальный алгоритм. Кроме того, если время выполнения работ, будет вещественные числа, то придется приводить их до целых, либо считать приблежённое значения.<br />
<br />
==Литература==<br />
J.K. Lenstra, A.H.G. Rinnooy Kan, and P. Brucker. Complexity<br />
of machine scheduling problems. Annals of Discrete Mathematics,<br />
1:343–362, 1977.</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=R2Cmax&diff=26208R2Cmax2012-06-20T17:48:04Z<p>Niko: /* Эффективное решение */</p>
<hr />
<div><div style="background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;">Эта статья находится в разработке!</div><br />
<includeonly>[[Категория: В разработке]]</includeonly><br />
<br />
==Постановка задачи==<br />
Дано два разных неоднородных станка, которые работают параллельно. Есть <tex>n</tex> работ, время выполнения которых на первом <br />
и втором станке различное. Нужно минимизировать время завершения всех работ.<br />
<br />
==Сложность задачи==<br />
Задача <tex>R2 \mid \mid C_{max}</tex> является <tex>\mathrm{NP}</tex>-полной задачей.<br />
<br />
==Неэффективное решение==<br />
Переберём все битовые последовательности из <tex>n</tex> элементов. Для каждой перестановки вычислим завершение последней работы. Работы будем выполнять следующим образом, если на <tex>i</tex>&nbsp;-й позиции стоит 0, то <tex>i</tex>&nbsp;-ая работа будет выполняться на первом станке, иначе на втором. Среди всех перестановок выберем ту перестановку, у которой <tex>C_{max}</tex> минимальный.<br />
<br />
Время работы алгоритма <tex>O(n \cdot 2^n)</tex><br />
<br />
==Эффективное решение==<br />
Применим для решения данной задачи динамическое программирование.<br />
<br />
Будем считать <tex>dp[i][j]</tex>, в котором будем хранить минимально время выполнения работ на втором станке, где <tex>i</tex> означает, что мы рассмотрели <tex>i</tex> работ, а <tex>j</tex> с каким временем выполнения работ на первом станке. Тогда <tex>j</tex> не превосходит суммы выполнения работ на первом станке.<br />
<br />
Изначальное значение <tex>dp[0][0] = 0</tex>, а всё остальную таблицу проинициализируем бесконечностью.<br />
<br />
Допустим мы посчитали динамику для <tex>i-1</tex> работ. Теперь надо пересчитать её для <tex>i</tex>-ой работы. Переберём время выполнения работ на первом станке и посчитаем какое минимально время выполнения мы можем получить при на втором станке при фиксированном первом времени. Так как <tex>i</tex>-ю работу мы можем выполнить либо на первом станке, либо на втором, то <tex>dp[i][j]= \min(dp[i-1][j-p_1[i]], dp[i-1][j]+p_2[i])</tex>.<br />
<br />
Тогда ответом на задачу будет минимум среди всех максимумов из <tex>j</tex> и <tex>dp[n][j]</tex>.</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=R2Cmax&diff=24314R2Cmax2012-06-07T11:56:32Z<p>Niko: Новая страница: «<div style="background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1p...»</p>
<hr />
<div><div style="background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;">Эта статья находится в разработке!</div><br />
<includeonly>[[Категория: В разработке]]</includeonly><br />
<br />
==Постановка задачи==<br />
Дано два разных неоднородных станка, которые работают параллельно. Есть <tex>n</tex> работ, время выполнения которых на первом <br />
и втором станке различное. Нужно минимизировать время завершения всех работ.<br />
<br />
==Сложность задачи==<br />
Задача <tex>R2 \mid \mid C_{max}</tex> является <tex>\mathrm{NP}</tex>-полной задачей.<br />
<br />
==Неэффективное решение==<br />
Переберём все битовые последовательности из <tex>n</tex> элементов. Для каждой перестановки вычислим завершение последней работы. Работы будем выполнять следующим образом, если на <tex>i</tex>&nbsp;-й позиции стоит 0, то <tex>i</tex>&nbsp;-ая работа будет выполняться на первом станке, иначе на втором. Среди всех перестановок выберем ту перестановку, у которой <tex>C_{max}</tex> минимальный.<br />
<br />
Время работы алгоритма <tex>O(n \cdot 2^n)</tex><br />
<br />
==Эффективное решение==<br />
Используем для решения данной задачи динамическое программирование.</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dodonovface.jpg&diff=15823Файл:Dodonovface.jpg2012-01-07T22:30:19Z<p>Niko: </p>
<hr />
<div></div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13390Построение компонент рёберной двусвязности2011-11-23T04:52:19Z<p>Niko: /* Однопроходный алгоритм */</p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину и [[Использование обхода в глубину для поиска мостов#Функция | ret(v)]]<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если ret(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
<br />
Однопроходный алгоритм строится на базе алгоритма поиска мостов. Во-первых, создадим глобальный стек, и при спуске по дереву <tex> dfs </tex> добавляем в него вершины. Во-вторых, когда возвращаемся назад, проверяем не является ли ребро мостом (при помощи [[Использование обхода в глубину для поиска мостов#Лемма | леммы]]). Если это так, то то все вершины, находящиеся до текущего сына в стеке, принадлежат одной компоненте, эта компонента будет висячей вершиной в дереве блоков и мостов, так как обходили граф поиском в глубину. Значит, ее можно выкинуть и продолжить поиск в оставшемся графе. Действуя по аналогии в оставшемся графе, найдем оставшиеся компоненты реберной двусвязности.<br />
<br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её <br />
<br />
<br />
<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex> stack.push(v) </tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
<tex>paint(u)</tex> <br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== Визуализатор ==<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13389Построение компонент рёберной двусвязности2011-11-23T04:51:49Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину и [[Использование обхода в глубину для поиска мостов#Функция | ret(v)]]<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если ret(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
<br />
Однопроходный алгоритм строится на базе алгоритма поиска мостов. Во-первых, создадим глобальный стек, и при спуске по дереву dfs добавляем в него вершины. Во-вторых, когда возвращаемся назад, проверяем не является ли ребро мостом (при помощи [[Использование обхода в глубину для поиска мостов#Лемма | леммы]]). Если это так, то то все вершины, находящиеся до текущего сына в стеке, принадлежат одной компоненте, эта компонента будет висячей вершиной в дереве блоков и мостов, так как обходили граф поиском в глубину. Значит, ее можно выкинуть и продолжить поиск в оставшемся графе. Действуя по аналогии в оставшемся графе, найдем оставшиеся компоненты реберной двусвязности.<br />
<br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её <br />
<br />
<br />
<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex> stack.push(v) </tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
<tex>paint(u)</tex> <br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== Визуализатор ==<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=13344Использование обхода в глубину для поиска мостов2011-11-22T05:53:30Z<p>Niko: /* Алгоритм */</p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный [[Основные определения теории графов#Граф| граф]] <tex> G </tex>. Найти все [[Мост, эквивалентные определения | мосты]] в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево [[Обход в глубину, цвета вершин | обхода в глубину графа]] <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex>. Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Докажем этот факт от противного. <br />
Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, так как <tex> x</tex> - предок <tex> u</tex>. Следовательно мы не достигнем предков <tex>v</tex>, а значит количество компонент связности увеличилось, что значит ребро <tex>(u, v)</tex> является мостом.<br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
===Лемма===<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = Рассмотрим вершину <tex>v</tex> или её потомка. Из них есть обратное ребро обратное в в предка <tex>v</tex>, тогда и только тогда, когда найдется такой сын <tex>t</tex>, что <tex>ret[t] \le enter[v]</tex>. Так как, если <tex>ret[t] = enter[v]</tex>, то это означает, что найдётся обратное ребро, приходящее точно в <tex>v</tex>. Если же <tex>ret[t] < enter[v]</tex>, то это означает наличие обратного ребра в какого-либо предка вершины <tex>v</tex>.<br />
<br />
Таким образом, если для текущего ребра <tex>(v, t)</tex> (принадлежащего дереву поиска) выполняется <tex>ret[t] > enter[v]</tex>, то это ребро является мостом; в противном случае оно мостом не является. <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
# [http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13343Обсуждение:Построение компонент рёберной двусвязности2011-11-22T05:40:30Z<p>Niko: </p>
<hr />
<div>"ИТОГО: раньше часть про однопроходный алгоритм выглядела более правдоподобной."<br />
<br />
Хм.. не согласен, если про работоспособность, то это не факт. То что описано здесь, работает и было сдано на Лабораторной по АСД. Могу код привести реальный. Да и с точки зрения асимптотики, это лучше и не скрыто в коде асимптотика СНМ. Кроме того этот алгоритм, в отличие от решения СНМ, реализацию на стеке была рассказана на практике, в качестве домашнего задания.</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13341Построение компонент рёберной двусвязности2011-11-22T05:33:56Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину и [[Использование обхода в глубину для поиска мостов#Функция | ret(v)]]<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если ret(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно найти компоненты реберной двусвязности за один проход, используя стек.<br />
<br />
Рекурсивый алгоритм на основе обхода в глубину.<br />
Если мы посетили вершину, то добавляем её в стек. Теперь определим, когда надо окрасить компоненту.<br />
Если мы возвращаясь (в рекурсии) обратно оказались в вершине, которая является вершиной моста, то все вершины, находящиеся, до текущей в стеке, принадлежат этой компоненте. Это следует из того, что [[Граф компонент реберной двусвязности | граф блоков и мостов, является деревом]]. По свойству обхода в глубину, мы окажемся в висячей вершине, покрасим её, то есть эту компоненту покрасим. Её можно выкинут и рассматривать оставшийся граф. Действуя по аналогии мы всегда выкидываем компоненту реберной двусвязности следовательно, если мы вернулись в вершину, которая была концом нашего моста, то все вершины лежащие до нашей в стеке, принадлежат данной компоненте, либо если моста нет, то окрашиваемся всё, что лежит в стеке. <br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её <br />
<br />
<br />
<br />
'''void dfs(вершина v, предок вершины p):<br />
добавляем вершину в в стек;<br />
state[v] = 1<br />
ret[v] = enter[v] = ++time<br />
для всех вершин u смежных v:<br />
если (u == parent): <br />
переходим к следующей итерации<br />
если (state[u] = 1):<br />
ret[v] = min(ret[v], enter[u])<br />
иначе:<br />
если (state[u] = 0):<br />
dfs(u, v)<br />
ret[v] = min(ret[v], ret[u])<br />
если (enter[v] < ret[u]): <br />
paint(u) <br />
state[v] = 2<br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== Визуализатор ==<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13327Построение компонент рёберной двусвязности2011-11-22T02:44:52Z<p>Niko: /* Двупроходный алгоритм */</p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину и [[Использование обхода в глубину для поиска мостов#Функция | ret(v)]]<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если ret(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно найти компоненты реберной двусвязности за один проход, используя стек.<br />
<br />
Алгоритм, если мы посетили вершину, то добавляем её в стек. Так же как раньше <tex>ret[v]</tex> и <tex>enter[v]</tex>. Теперь определим, когда надо окрасить компоненту.<br />
Если мы возвращаясь обратно оказались в вершине, которая является вершиной моста, то все вершины, находящиеся, до текущей в стеке, принадлежат этой компоненте. Это следует из того, что [[Граф компонент реберной двусвязности | граф блоков и мостов, является деревом]]. По свойству обхода в ширину, мы окажемся в висячей вершине, покрасим её, то есть эту компоненту покрасим. Её можно выкинут и рассматривать оставшийся граф. Действуя по аналогии мы всегда выкидываем компоненту реберной двусвязности следовательно, если мы вернулись в вершину, которая была концом нашего моста, то все вершины лежащие до нашей в стеке, принадлежат данной компоненте. <br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++;<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её; <br />
<br />
<br />
<br />
'''void dfs(вершина v, предок вершины p):<br />
добавляем вершину в в стек;<br />
state[v] = 1;<br />
ret[v] = enter[v] = ++time;<br />
для всех вершин u смежных v:<br />
если (u == parent): <br />
переходим к следующей итерации<br />
если (state[u] = 1):<br />
ret[v] = min(ret[v], enter[u]);<br />
иначе:<br />
если (state[u] = 0):<br />
dfs(u, v);<br />
ret[v] = min(ret[v], ret[u]);<br />
если (enter[v] < ret[u]): <br />
paint(u); <br />
state[v] = 2;<br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=13326Построение компонент рёберной двусвязности2011-11-22T02:43:07Z<p>Niko: /* Двупроходный алгоритм */</p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, [[Использование обхода в глубину для поиска мостов#Функция | <tex>ret(v)</tex>]]<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если ret(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно найти компоненты реберной двусвязности за один проход, используя стек.<br />
<br />
Алгоритм, если мы посетили вершину, то добавляем её в стек. Так же как раньше <tex>ret[v]</tex> и <tex>enter[v]</tex>. Теперь определим, когда надо окрасить компоненту.<br />
Если мы возвращаясь обратно оказались в вершине, которая является вершиной моста, то все вершины, находящиеся, до текущей в стеке, принадлежат этой компоненте. Это следует из того, что [[Граф компонент реберной двусвязности | граф блоков и мостов, является деревом]]. По свойству обхода в ширину, мы окажемся в висячей вершине, покрасим её, то есть эту компоненту покрасим. Её можно выкинут и рассматривать оставшийся граф. Действуя по аналогии мы всегда выкидываем компоненту реберной двусвязности следовательно, если мы вернулись в вершину, которая была концом нашего моста, то все вершины лежащие до нашей в стеке, принадлежат данной компоненте. <br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++;<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её; <br />
<br />
<br />
<br />
'''void dfs(вершина v, предок вершины p):<br />
добавляем вершину в в стек;<br />
state[v] = 1;<br />
ret[v] = enter[v] = ++time;<br />
для всех вершин u смежных v:<br />
если (u == parent): <br />
переходим к следующей итерации<br />
если (state[u] = 1):<br />
ret[v] = min(ret[v], enter[u]);<br />
иначе:<br />
если (state[u] = 0):<br />
dfs(u, v);<br />
ret[v] = min(ret[v], ret[u]);<br />
если (enter[v] < ret[u]): <br />
paint(u); <br />
state[v] = 2;<br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0&diff=13243Циклическое пространство графа2011-11-19T01:29:55Z<p>Niko: </p>
<hr />
<div>__TOC__<br />
== Определение ==<br />
Пусть <tex> m = |E(G)| </tex>, <tex> n = |V(G)| </tex>, <tex> k </tex> {{---}} количество компонент связности <tex> G </tex>.<br />
<br />
<tex> B^t </tex> {{---}} линейное пространство, элементами которого являются <tex> t </tex>{{---}}мерные двоичные вектора и их сложение определено, как сложение по модулю <tex> 2 </tex>. <br />
<br />
{{Определение<br />
|definition = <br />
'''Циклическое пространство графа''' — <tex> C = Ker(I) </tex>, где <tex> I : B^m \rightarrow B^n </tex> - линейный оператор, сопоставленный матрице инциндентности <tex> A </tex> графа <tex> G </tex>.<br />
}}<br />
<br />
{{Определение<br />
|definition = <br />
'''Обобщенный цикл графа G''' - элемент линейного пространства <tex> C </tex><br />
}}<br />
<br />
Определим пространство <tex> T </tex>, как пространство, элементами которого являются наборы ребер, из которых можно составить несколько простых реберно непересекающихся циклов. <br />
<br />
{{Лемма<br />
|statement=<br />
Пространство <tex> C </tex> изоморфно <tex> T </tex>.<br />
|proof=<br />
Рассмотрим <tex> x \in C </tex>. <br />
<br />
Рассмотрим граф <tex> G_1(V_1,E_1) </tex>, где <tex> E_1 </tex> {{---}} множество ребер, таких что на соответствующих местах вектора <tex> x </tex> стоят единицы, а <tex> V_1 = V(G) </tex> .<br />
<br />
В силу определения обобщенного цикла: <tex> \forall v : v \in V_1 ~ deg(v) \equiv 0(mod~2) </tex>.<br />
<br />
Значит, <tex> G </tex> можно декомпозировать на несколько реберно непересекающихся простых циклов. Отсюда следует, что каждому обобщенному циклу соответствуют ребра, которые образуют набор реберно непересекающихся простых циклов. <br />
<br />
Если рассмотреть набор реберно непересекающихся простых циклов и взять все ребра, принадлежащие этим циклам, то им можно сопоставить обобщенный цикл (в соответствующие места поставить <tex> 1 </tex>, во все остальные <tex> 0 </tex>).<br />
}}<br />
<br />
== Размерность линейного пространства обобщенных циклов ==<br />
{{Теорема<br />
|statement=<br />
<tex> dim(C) = m - n + k </tex><br />
|proof=<br />
<tex> dim(C)=dim(Ker(i))=m-Rang(A) </tex>, где <tex> Rang(A) = </tex> максимальное количество ЛНЗ столбцов <tex> A </tex>. Если рассмотреть цикл в <tex> G </tex>, то набор столбцов соответствующий ребрам в этом цикле ЛЗ. Отсюда следует, что если любому множеству ребер, содержащих цикл, в соответствие сопоставить набор столбцов из <tex> A </tex> то он будет ЛЗ. Если же множество ребер не содержит цикл, то набор ЛНЗ (если бы он был ЛЗ, тогда бы существовал <tex> x \in C </tex>, который соответствует некоторому подмножеству данного набора ребер, значит из набора ребер можно выделить цикл, противоречие). Максимальное число ребер, которые мы можем выделить из G и которые не содержат цикл <tex>= n - k </tex> (в каждой компоненте связности выделим цикл). <br />
Итого: <tex> dim(C)=m - n + k </tex><br />
}}<br />
<br />
== Литература(формулировки другие) ==<br />
Харари Ф. Теория графов / пер. с англ. — изд. 4-е — М.: Книжный дом «ЛИБРОКОМ», 2009. — с.54. — ISBN 978-5-397-00622-4.<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Основные определения теории графов]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=13194Использование обхода в глубину для поиска мостов2011-11-18T04:07:25Z<p>Niko: </p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный [[Основные определения теории графов#Граф| граф]] <tex> G </tex>. Найти все [[Мост, эквивалентные определения | мосты]] в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево [[Обход в глубину, цвета вершин | обхода в глубину графа]] <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
===Лемма===<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = Рассмотрим вершину <tex>v</tex> или её потомка. Из них есть обратное ребро обратное в в предка <tex>v</tex>, тогда и только тогда, когда найдется такой сын <tex>t</tex>, что <tex>ret[t] \le enter[v]</tex>. Так как, если <tex>ret[t] = enter[v]</tex>, то это означает, что найдётся обратное ребро, приходящее точно в <tex>v</tex>. Если же <tex>ret[t] < enter[v]</tex>, то это означает наличие обратного ребра в какого-либо предка вершины <tex>v</tex>.<br />
<br />
Таким образом, если для текущего ребра <tex>(v, t)</tex> (принадлежащего дереву поиска) выполняется <tex>ret[t] > enter[v]</tex>, то это ребро является мостом; в противном случае оно мостом не является. <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
# [http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=13193Использование обхода в глубину для поиска мостов2011-11-18T04:06:06Z<p>Niko: /* Лемма */</p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный [[Основные определения теории графов#Граф| граф]] <tex> G </tex>. Найти все [[Мост, эквивалентные определения | мосты]] в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево [[Обход в глубину, цвета вершин | обхода в глубину графа]] <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
===Лемма===<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = Рассмотрим вершину <tex>v</tex> или её потомка. Из них есть обратное ребро обратное в в предка <tex>v</tex>, тогда и только тогда, когда найдется такой сын <tex>t</tex>, что <tex>ret[t] \le enter[v]</tex>. Так как, если <tex>ret[t] = enter[v]</tex>, то это означает, что найдётся обратное ребро, приходящее точно в <tex>v</tex>. Если же <tex>ret[t] < enter[v]</tex>, то это означает наличие обратного ребра в какого-либо предка вершины <tex>v</tex>.<br />
<br />
Таким образом, если для текущего ребра <tex>(v, t)</tex> (принадлежащего дереву поиска) выполняется <tex>ret[t] > enter[v]</tex>, то это ребро является мостом; в противном случае оно мостом не является. <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=12917Построение компонент рёберной двусвязности2011-11-09T04:27:23Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно найти компоненты реберной двусвязности за один проход используя стек.<br />
<br />
Алгоритм, если мы посетили вершину, то добавляем её в стек. Так же как раньше <tex>ret[v]</tex> и <tex>enter[v]</tex>. Теперь определим, когда надо окрасить компоненту.<br />
Если мы возвращаясь обратно оказались в вершине, которая является вершиной моста, то все вершины, находящиеся, до текущей в стеке, принадлежат этой компоненте. Это следует из того, что [[Граф компонент реберной двусвязности | граф блоков и мостов, является деревом]]. По свойству обхода в ширину, мы окажемся в висячей вершине, покрасим её, то есть эту компоненту покрасим. Её можно выкинут и рассматривать оставшийся граф. Действуя по аналогии мы всегда выкидываем компоненту реберной двусвязности следовательно, если мы вернулись в вершину, которая была концом нашего моста, то все вершины лежащие до нашей в стеке, принадлежат данной компоненте. <br />
Псевдокод:<br />
<br />
'''void paint(int v):<br />
maxcolor++;<br />
while (пока вершина стека не вершина <tex>v</tex> и стек не пустой)<br />
извлекаем вершину стека и красим её; <br />
<br />
<br />
<br />
'''void dfs(вершина v, предок вершины p):<br />
добавляем вершину в в стек;<br />
state[v] = 1;<br />
ret[v] = enter[v] = ++time;<br />
для всех вершин u смежных v:<br />
если (u == parent): <br />
переходим к следующей итерации<br />
если (state[u] = 1):<br />
ret[v] = min(ret[v], enter[u]);<br />
иначе:<br />
если (state[u] = 0):<br />
dfs(u, v);<br />
ret[v] = min(ret[v], ret[u]);<br />
если (enter[v] < ret[u]): <br />
paint(u); <br />
state[v] = 2;<br />
<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. Покраска за <tex> O(|V|) </tex>.<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=12158Построение компонент рёберной двусвязности2011-10-27T05:21:15Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
Время работы dfs <tex> O(|V| + |E|)</tex>. А время восстановления <tex> O(|V|)</tex>, так как [[Анализ реализации с ранговой эвристикой | снм]].<br />
Итоговое время работы алгоритма <tex> O(|V| + |E|)</tex>.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=12157Построение компонент рёберной двусвязности2011-10-27T05:08:41Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
Воспользуемся ранее доказанной [[Использование обхода в глубину для поиска мостов#Лемма | леммой]].<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Перешли по мосту, следовательно началась новая компонента. <br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
Время работы алгоритма будет время работы двух запусков dfs, то есть 2 * <tex> O(|V| + |E|)</tex>, что есть <tex> O(|V| + |E|)</tex>.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=12144Использование обхода в глубину для поиска мостов2011-10-27T03:13:43Z<p>Niko: </p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный [[Основные определения теории графов#Граф| граф]] <tex> G </tex>. Найти все [[Мост, эквивалентные определения | мосты]] в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево [[Обход в глубину, цвета вершин | обхода в глубину графа]] <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
===Лемма===<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11764Построение компонент рёберной двусвязности2011-10-22T05:36:27Z<p>Niko: /* Основные понятия */</p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонента реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11763Построение компонент рёберной двусвязности2011-10-22T04:48:28Z<p>Niko: /* Литература */</p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонент реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=11762Использование обхода в глубину для поиска мостов2011-10-22T04:46:59Z<p>Niko: </p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный [[Основные определения теории графов#Граф| граф]] <tex> G </tex>. Найти все [[Мост, эквивалентные определения | мосты]] в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево [[Обход в глубину, цвета вершин | обхода в глубину графа]] <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=11757Использование обхода в глубину для поиска мостов2011-10-22T04:16:05Z<p>Niko: </p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный граф <tex> G </tex>. Найти все мосты в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево обхода в глубину графа <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> [[Использование обхода в глубину для топологической сортировки | время входа в вершину <tex>v </tex> ]] <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|300px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут красные красный]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bridges_nv.png&diff=11754Файл:Bridges nv.png2011-10-22T03:58:47Z<p>Niko: загружена новая версия «Файл:Bridges nv.png»</p>
<hr />
<div>Граф с посчитанными ret и enter у каждой вершины.</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=11753Использование обхода в глубину для поиска мостов2011-10-22T03:39:05Z<p>Niko: /* Источники */</p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный граф <tex> G </tex>. Найти все мосты в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево обхода в глубину графа <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Докажем что из отрицания второго утверждения следует отрицание первого.<br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Лемма<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|150px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут ребра <tex>23, 59, 78</tex>]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=11752Использование обхода в глубину для поиска мостов2011-10-22T03:38:23Z<p>Niko: /* Источники */</p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный граф <tex> G </tex>. Найти все мосты в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево обхода в глубину графа <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Докажем что из отрицания второго утверждения следует отрицание первого.<br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Лемма<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|150px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут ребра <tex>23, 59, 78</tex>]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching | Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory) | Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11602Построение компонент рёберной двусвязности2011-10-21T02:47:58Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонент реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128<br />
<br />
В.А.Кузнецов, А.М.Караваев. "Оптимизация на графах" - Петрозаводск, Издательство ПетрГУ 2007</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11600Построение компонент рёберной двусвязности2011-10-20T22:03:03Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
*[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
*[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонент реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [http://rain.ifmo.ru/cat/view.php/vis/graph-general/bridges-2001| Визуализация построение компонент реберной двусзяности]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11598Построение компонент рёберной двусвязности2011-10-20T21:56:06Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
<br />
[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонент реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%B4%D0%B2%D1%83%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=11597Построение компонент рёберной двусвязности2011-10-20T21:55:22Z<p>Niko: </p>
<hr />
<div>== Основные понятия ==<br />
<br />
[[Отношение реберной двусвязности#Реберная двусвязность|Реберная двусвязность]]<br />
<br />
[[Отношение реберной двусвязности#Компоненты реберной двусвязности|Компонент реберной двусвязности]]<br />
<br />
Построение компонент реберной двусвязности будет осуществляться с помощью [[Обход в глубину, цвета вершин|обхода в глубину]].<br />
<br />
== Двупроходный алгоритм ==<br />
<br />
Первый способ найти искомые компоненты - сначала определить критерий перехода в новую компоненту реберной двусвязности, а затем покрасить вершины графа в нужные цвета.<br />
<br />
Первый проход определяет для каждой вершины <tex>v</tex> две величины: <tex>enter(v)</tex> - время входа поиска в глубину в вершину, <tex>return(v)</tex> - минимальное из времен входа вершин, достижимых из <tex>v</tex> по [[Обход в глубину, цвета вершин|дереву <tex>dfs</tex>]] и не более, чем одному обратному ребру. <tex>return(v)</tex> находится как <tex>min(enter(v), return(u), enter(w))</tex> для всех <tex>u</tex> - сыновей <tex>v</tex> в дереве <tex>dfs</tex>, <tex>w</tex> - соседей <tex>v</tex> по обратным ребрам. Важно, что ребро к родителю дерева <tex>dfs</tex> не является обратным ребром обхода.<br />
<br />
Псевдокод первого прохода:<br />
<br />
'''void dfs(v, родитель):<br />
увеличиваем текущее время<br />
enter(v) := текущее время <br />
return(v) := enter(v)<br />
для всех вершин u, смежных v:<br />
если enter(u) равен нулю (вершина не посещена):<br />
dfs(u, v)<br />
return(v) := min(return(v), return(u))<br />
иначе если u не родитель:<br />
return(v) := min(return(v), enter(u))<br />
...<br />
обнуляем массив enter<br />
текущее время := 0<br />
для всех вершин v графа:<br />
если enter(v) = 0:<br />
dfs(v, null)'''<br />
<br />
Определим критерий перехода к новой компоненте.<br />
{{Теорема<br />
|statement=<br />
Ребро <tex>uv</tex> ведет из одной компоненты реберной двусвязности в другую, если оно является частью дерева <tex>dfs</tex>, и либо <tex>u</tex> - предок <tex>v</tex> и <tex>return(v) = enter(v)</tex>, либо <tex>v</tex> - предок <tex>u</tex> и <tex>return(u) = enter(u)</tex>.<br />
|proof=<br />
Если ребро <tex>uv</tex> - обратное, образуется цикл, содержащий <tex>uv</tex>, поэтому <tex>uv</tex> не может являться мостом.<br />
Последнее равенство означает, что из <tex>v</tex> и ее потомков нельзя подняться выше <tex>v</tex> по дереву обхода, в том числе, и в <tex>u</tex>. Таким образом, между <tex>u</tex> и <tex>v</tex> существует лишь один путь - ребро <tex>uv</tex>, - и они принадлежат разным компонентам реберной двусвязности.<br />
}}<br />
<br />
Основываясь на этом, определим алгоритм окраски вершин графа. Путь по графу будет точно таким же, как и в первом проходе, что гарантирует постоянность дерева <tex>dfs</tex> и определенных параметров вершин: <tex>enter</tex> и <tex>return</tex>.<br />
<br />
Псевдокод второго прохода:<br />
<br />
'''void paint(v, цвет):<br />
colors(v) := цвет<br />
для всех вершин u, смежных v:<br />
если colors(u) равен нулю (вершина не покрашена):<br />
если return(u) = enter(u):<br />
увеличиваем максимальный цвет<br />
paint(u, максимальный цвет)<br />
иначе:<br />
paint(u, цвет)<br />
...<br />
обнуляем массив colors<br />
максимальный цвет := 0<br />
для всех вершин v графа:<br />
если colors(v) = 0:<br />
увеличиваем максимальный цвет<br />
paint(v, максимальный цвет)'''<br />
<br />
Вершины каждой из компонент реберной двусвязности окажутся окрашенными в свой цвет.<br />
<br />
== Однопроходный алгоритм ==<br />
<br />
Можно также искать компоненты реберной двусвязности путем конкатенации циклов. Воспользуемся тем, что реберная двусвязность является отношением эквивалентности на вершинах графа; тогда, если у двух циклов существует хоть одна общая вершина, все вершины, располагающиеся на этих циклах, принадлежат одной компоненте. Более того, две вершины <tex>u</tex> и <tex>v</tex> лежат в одной компоненте реберной двусвязности тогда и только тогда, когда существует последовательность простых циклов <tex>c_1 c_2 ... c_n</tex>, причем <tex>u \in c_1</tex>, <tex>v \in c_n</tex>, и <tex>c_i</tex> имеет с <tex>c_{i + 1}</tex> хотя бы одну общую вершину для всех <tex>i \in {1 ... n - 1}</tex>. Действительно, если зафиксировать один путь от <tex>u</tex> до <tex>v</tex>, а затем искать точки пересечения второго, не имеющего одинаковых ребер с первым, пути с ним, то получится последовательность циклов, точками сочленения между которыми будут как раз точки пересечения путей. И наоборот, последовательность простых циклов легко превратить в два реберно непересекающихся пути.<br />
<br />
Совокупность компонент реберной двусвязности будем хранить как систему непересекающихся множеств вершин.<br />
<br />
Псевдокод:<br />
<br />
'''int dfs(v, родитель): (возвращает 0, если у v и ее потомков нет обратных ребер, и представителя множества, содержащего цикл с v, в обратном случае)<br />
seen(v) = true<br />
value = 0, result = 0<br />
для всех вершин u, смежных v:<br />
если не seen(u):<br />
value = dfs(u, v)<br />
если value > 0:<br />
color(v) = value<br />
result = value<br />
иначе если u не родитель:<br />
color(v) = color(u)<br />
result = color(v)<br />
return result<br />
...<br />
обнуляем массив seen<br />
нумеруем вершины графа натуральными числами от 1 до мощности множества вершин графа<br />
для всех вершин v графа:<br />
color(v) = номер вершины (номер цвета соответствует номеру вершины-представителя в множестве)<br />
для всех вершин v графа:<br />
если не seen(v):<br />
dfs(v, null)'''<br />
<br />
Осталось лишь сопоставить всем вершинам отдельно взятой компоненты единственного представителя.<br />
<br />
Псевдокод:<br />
<br />
'''int relax(v): (возвращает нового представителя)<br />
если color(v) не равен номеру v:<br />
color(v) = relax(color(v))<br />
return color(v)<br />
...<br />
для всех вершин v графа:<br />
relax(v)<br />
<br />
Теперь две вершины имеют одинаковый цвет тогда и только тогда, когда они принадлежат одной компоненте реберной двусвязности.<br />
<br />
== См. также ==<br />
* [[Обход в глубину, цвета вершин|Oбхода в глубину]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. —</div>Nikohttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D0%BC%D0%BE%D1%81%D1%82%D0%BE%D0%B2&diff=11596Использование обхода в глубину для поиска мостов2011-10-20T21:55:01Z<p>Niko: </p>
<hr />
<div>== Постановка задачи == <br />
Дан неориентированный граф <tex> G </tex>. Найти все мосты в <tex> G </tex> за время <tex> O(|V| + |E|)</tex><br />
<br />
== Алгоритм ==<br />
<br />
=== Теория ===<br />
{{Теорема<br />
|statement=<br />
Пусть <tex> T </tex> - дерево обхода в глубину графа <tex> G</tex>. Ребро <tex> (u, v) </tex> является мостом тогда и только тогда, когда <tex> (u, v) \in T</tex> и из вершины <tex> v</tex> и любого ее потомка нет обратного ребра в вершину <tex> u</tex> или предка <tex> u </tex><br />
|proof=<br />
<tex> \Leftarrow</tex> <br><br />
Удалим <tex> (u, v)</tex> из <tex> G</tex> Докажем, что мы не сможем достичь ни одного из предков <tex> v </tex> (в частности <tex> u </tex>). Пусть это не так, и <tex> w</tex> - предпоследняя вершина на пути от <tex> v</tex> до ее предка <tex>x </tex>. Очевидно, <tex> (w, x)</tex> не ребро дерева (в силу единственности пути в дереве). Если <tex> (w, x)</tex> - обратное ребро, то это противоречит условию теоремы, т.к. <tex> x</tex> - предок <tex> u</tex> <br><br />
<tex> \Rightarrow</tex> <br><br />
Докажем что из отрицания второго утверждения следует отрицание первого.<br />
Пусть существует удовлетворяющее условию обратное ребро <tex>(x, w)</tex>. Тогда <tex>(u, v)</tex> лежит на цикле <tex>x \rightsquigarrow v \rightarrow u \rightsquigarrow w \rightarrow x</tex> и не может быть мостом.<br />
}}<br />
==== Функция <tex>ret(v)</tex> ====<br />
Определим функцию <tex>ret(v)</tex>, где <tex>v \in V</tex>, как минимум из следущих величин <br><br />
<br />
* <tex>enter(v)</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>x</tex> - потомок <tex>v</tex> <br><br />
* <tex>enter(x)</tex>, где <tex>(w, x)</tex> - обратное ребро, а <tex>w</tex> - потомок <tex>v</tex> (в нестрогом смысле) <br><br />
<br />
{{Лемма<br />
|statement = Ребро <tex>(u, v)</tex> является мостом тогда и только тогда, когда <tex>(u, v)</tex> принадлежит дереву обхода в глубину и <tex>ret(v) > enter(u)</tex><br />
| proof = <br />
Так как на пути от вершины к корню дерева величины <tex>enter</tex> убывают, то <tex>ret(v)</tex> возвращает величину <tex>enter</tex> для ближайшей к корню вершины, достижимой из <tex>v</tex> или ее потомка, возможно используя одно обратное ребро. Следовательно, из вершины <tex>v</tex> или ее потомков существует обратное ребро потомка <tex>u</tex> или саму <tex>u</tex> тогда и только тогда, когда <tex>ret(v) <= enter(u)</tex>. По доказанной теореме, отсутствие такого ребра эквивалентно тому что <tex>(u, v)</tex> - мост.<br />
}}<br />
<br />
<br />
{{Лемма<br />
|statement =<br />
<tex>ret(v)</tex> = <tex>min(</tex> <br><br />
* <tex>enter(v) </tex> <br><br />
* <tex>enter(p)</tex>, <tex>(v, p),</tex> - обратное ребро <br><br />
* <tex>ret(u)</tex>, <tex>(v, u)</tex> - ребро дерева<br />
<tex>) </tex><br />
|proof =<br />
[[Файл:Bridges_nv.png|150px|thumb|right|В скобах у вершины <tex>u</tex> указаны <tex>enter[u]</tex> и <tex>ret[u]</tex>. Мостами будут ребра <tex>23, 59, 78</tex>]]<br />
1)<tex>enter(v) </tex> <br><br />
По определению функции <tex>ret</tex> <br><br />
2)<tex>enter(p)</tex>, <tex>(v, p)</tex> - обратное ребро <br><br />
<tex>p</tex> достижима из <tex>v</tex> по одному обратному ребру, значит величина <tex>ret(v)</tex> не больше <tex>enter(p)</tex> <br><br />
3)<tex>ret(u)</tex>, <tex>u</tex> - потомок <tex>v</tex> <br><br />
Так как вершина <tex>u</tex> - потомок <tex>v</tex>, то обратное ребро из ее поддерева является обратным ребром из поддерева <tex>v</tex> <br><br />
}}<br />
<br />
=== Псевдокод ===<br />
'''dfs'''(<tex> v </tex>)<br />
<tex> time \leftarrow time + 1</tex><br />
<tex>enter[v] \leftarrow time</tex><br />
<tex>ret[v] \leftarrow time </tex><br />
'''for''' всех <tex>u</tex> смежных с <tex>v</tex><br />
''if'' <tex>(v, u)</tex> - обратное ребро<br />
<tex>ret[v] \leftarrow min(ret[v], enter[u])</tex><br />
'''if''' вершина <tex>u</tex> - белая<br />
'''dfs'''(u)<br />
<tex> ret[v] \leftarrow min(ret[v], ret[u]) </tex><br />
'''if''' <tex>ret[u] > enter[v]</tex> <br />
ребро <tex>(v, u)</tex> - мост<br />
==Смотри также==<br />
*[[Обход в глубину, цвета вершин|Обход в глубину]]<br />
*[[Использование обхода в глубину для поиска точек сочленения]]<br />
*[[Построение компонент вершинной двусвязности]]<br />
*[[Построение компонент реберной двусвязности]]<br />
*[http://rain.ifmo.ru/cat/view.php/vis/graph-general/biconnected-components-2005| Визуализация поиска мостов]<br />
<br />
==Источники==<br />
# [http://e-maxx.ru/algo/bridge_searching| Сайт e-maxx]<br />
# [http://en.wikipedia.org/wiki/Bridge_(graph_theory)| Свободная энциклопедия - Википедия]<br />
<br />
==Литература==<br />
Седжвик Роберт. Фундаментальные алгоритмы на C++. Часть 5: Алгоритмы на графах: Пер. с англ./Роберт Седжвик. — СПб.: ООО «ДиаСофтЮП», 2002. — С. 123-128</div>Niko