<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>alchemmist — Math</title><link>https://alchemmist.xyz/ru/tags/math/</link><description>Последние записи в блоге alchemmist</description><generator>Hugo 0.163.3</generator><language>ru</language><atom:link href="https://alchemmist.xyz/ru/tags/math/index.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Wed, 10 Sep 2025 17:31:00 +0300</lastBuildDate><item><title>Алгоритм Уэлфорда</title><link>https://alchemmist.xyz/ru/articles/welford-algorithm/</link><pubDate>Wed, 10 Sep 2025 17:31:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/welford-algorithm/</guid><description>Представьте, что к вам потоком поступают данные: миллионы транзакций, цены акций, показания датчиков. Вам нужно вычислить среднее значение, дисперсию и корреляции. Классический способ — сохранить все данные и затем вычислить. Но это занимает много памяти, вычисления становятся тяжелыми, на больших числах возникают ошибки округления. Недавно я столкнулся с алгоритмом Уэлфорда, который позволяет проводить онлайн-вычисления за одну итерацию без сохранения больших данных. Это очень элегантный, стабильный и точный алгоритм.
Постановка задачи довольно проста: мы хотим вычислять статистики (среднее, дисперсию, ковариацию, корреляцию) шаг за шагом, когда мы получаем $n$ данных в потоке, без сохранения всех данных и дополнительных итераций. Напомним формулы базовым способом. Среднее:</description><content:encoded><![CDATA[<p>Представьте, что к вам потоком поступают данные: миллионы транзакций, цены акций, показания датчиков. Вам нужно вычислить среднее значение, дисперсию и корреляции. Классический способ — сохранить все данные и затем вычислить. Но это занимает много памяти, вычисления становятся тяжелыми, на больших числах возникают ошибки округления. Недавно я столкнулся с алгоритмом Уэлфорда, который позволяет проводить онлайн-вычисления за одну итерацию без сохранения больших данных. Это очень элегантный, стабильный и точный алгоритм.</p>
<p>Постановка задачи довольно проста: мы хотим вычислять статистики (среднее, дисперсию, ковариацию, корреляцию) шаг за шагом, когда мы получаем $n$ данных в потоке, без сохранения всех данных и дополнительных итераций. Напомним формулы базовым способом. Среднее:
</p>
$$
\overline{x} = \frac{1}{n}\sum\limits_{i = 1}^{n}x_i
$$<p>
Дисперсия:
</p>
$$
s^2 = \frac{1}{n - 1}\sum\limits_{i = 1}^{n}(x_i - \overline{x})^2
$$<p>
Как видите, для среднего нужна сумма: первая проблема — как получить сумму без всех чисел? А для дисперсии нужно среднее: вторая проблема — как узнать среднее без всех данных?</p>

<h2 id="интуиция-метода">
  <a class="link" href="#%d0%b8%d0%bd%d1%82%d1%83%d0%b8%d1%86%d0%b8%d1%8f-%d0%bc%d0%b5%d1%82%d0%be%d0%b4%d0%b0">
    #
  </a>
  Интуиция метода
</h2>

<p>Попробуем прочувствовать интуицию метода Уэлфорда. Представьте, у нас есть набор данных: $A = \{1, 2, 3\}$, среднее этого набора $\overline{x}_A = \frac{1 + 2 +3}{3} = 2$, и затем мы получили еще одно число: $6$. Чувствуете, что оно сдвинет наше среднее в сторону больших значений? Но насколько? Представьте похожий набор, но с большим количеством данных: $B = \{1, 1, 2, 2, 3, 3\}$, среднее также равно $2$, и мы также добавляем число $6$. Снова чувствуем, что сдвиг будет в сторону больших значений, но не такой сильный. Проверим нашу интуицию:
</p>
$$
\begin{align*}
&A' = \{1, 2, 3, 6\}, \quad \overline{x}_{A'} = \frac{1 + 2 + 3 + 6}{4} = 3, \quad \Delta_A = |\overline{x}_A - \overline{x}_{A'}| = 1 \\
&B' = \{1, 1, 2, 2, 3, 3, 6\},  \quad \overline{x}_{B'} = \frac{2(1 + 2 + 3) + 6}{7} \approx 2.57, \quad \Delta_{B} = \overline{x}_B - \overline{x}_{B'} \approx 0.57
\end{align*}
$$<p>
Наша интуиция была права! Осталось понять, как мы можем вычислить эту дельту, если у нас есть только предыдущее среднее $\overline{x}_{i - 1}$, новое число $x_i$ и количество наших чисел. Метод Уэлфорда гласит: каждое новое значение сдвигает среднее в свою сторону с весом $1/i$:
</p>
$$
\overline{x}_i = \overline{x}_{i - 1} + \frac{1}{i}(x_i - \overline{x}_{i - 1})
$$<p>
Проверим это для набора $B$. У нас есть среднее без нового числа $\overline{x}_{i - 1} = 2$ и новое число $x_i = 6$, и это седьмое число, $i = 7$. Цель — найти среднее $\overline{x}_i$ по формуле Уэлфорда:
</p>
$$
\overline{x}_i = 2 + \frac{1}{7}(6 - 2) = 2 + 0.57\ldotp\!\ldotp\!\ldotp \ \approx 2.57
$$<p>
Как видите, это абсолютно точное значение. Отлично!</p>

<h2 id="дисперсия-корреляция-ковариация">
  <a class="link" href="#%d0%b4%d0%b8%d1%81%d0%bf%d0%b5%d1%80%d1%81%d0%b8%d1%8f-%d0%ba%d0%be%d1%80%d1%80%d0%b5%d0%bb%d1%8f%d1%86%d0%b8%d1%8f-%d0%ba%d0%be%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d1%86%d0%b8%d1%8f">
    #
  </a>
  Дисперсия, корреляция, ковариация
</h2>

<p>Истинная сила алгоритма Уэлфорда раскрывается при вычислении дисперсии. Наивный подход требует хранения всех точек данных и пересчета среднего перед вычислением дисперсии, что вычислительно дорого. Метод Уэлфорда изящно решает это, поддерживая текущую оценку дисперсии с использованием следующего рекуррентного соотношения:</p>
<p>Для дисперсии мы поддерживаем текущее среднее $\overline{x}$ и сумму квадратов разностей $S$. Для каждой новой точки данных $x_n$ на шаге $n$:
</p>
$$
\begin{gather*}
\overline{x}_n = \overline{x}_{n-1} + \frac{1}{n}(x_n - \overline{x}_{n-1}) \\
S_n = S_{n-1} + (x_n - \overline{x}_{n-1})(x_n - \overline{x}_n)
\end{gather*}
$$<p>
Дисперсию генеральной совокупности можно затем вычислить как $\sigma^2 = S_n/n$, а выборочную дисперсию как $s^2 = S_n/(n-1)$.</p>
<p>Этот подход красиво расширяется на ковариацию и корреляцию. Для двух переменных $X$ и $Y$ мы поддерживаем счетчики $n$, средние $\overline{x}$ и $\overline{y}$, и накопленные произведения $C_{xy}$:
</p>
$$
\begin{gather*}
\delta_x = x_n - \overline{x}_{n-1}, \quad
\delta_y = y_n - \overline{y}_{n-1} \\
\overline{x}_n = \overline{x}_{n-1} + \frac{\delta_x}{n}, \quad
\overline{y}_n = \overline{y}_{n-1} + \frac{\delta_y}{n} \\
C_{xy_n} = C_{xy_{n-1}} + \delta_x (y_n - \overline{y}_n) \\
\end{gather*}
$$<p>
Ковариация тогда равна $\text{cov}(X,Y) = \frac{C_{xy_n}}{(n-1)}$, а корреляция $\text{corr}(X,Y) = \frac{C_{xy_n}}{\sqrt{S_{x_n} S_{y_n}}}$.</p>

<h2 id="реализация-на-c">
  <a class="link" href="#%d1%80%d0%b5%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%bd%d0%b0-c">
    #
  </a>
  Реализация на C
</h2>

<p>Вот полная реализация алгоритма Уэлфорда на C для вычисления среднего и дисперсии:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;math.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">n</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">mean</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">M2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="n">welford_state</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">welford_update</span><span class="p">(</span><span class="n">welford_state</span> <span class="o">*</span><span class="n">state</span><span class="p">,</span> <span class="kt">double</span> <span class="n">x</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span><span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">delta</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean</span> <span class="o">+=</span> <span class="n">delta</span> <span class="o">/</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">M2</span> <span class="o">+=</span> <span class="n">delta</span> <span class="o">*</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="nf">welford_mean</span><span class="p">(</span><span class="k">const</span> <span class="n">welford_state</span> <span class="o">*</span><span class="n">state</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="nf">welford_variance</span><span class="p">(</span><span class="k">const</span> <span class="n">welford_state</span> <span class="o">*</span><span class="n">state</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">(</span><span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">?</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">M2</span> <span class="o">/</span> <span class="p">(</span><span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">:</span> <span class="mf">0.0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="nf">welford_stddev</span><span class="p">(</span><span class="k">const</span> <span class="n">welford_state</span> <span class="o">*</span><span class="n">state</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nf">sqrt</span><span class="p">(</span><span class="nf">welford_variance</span><span class="p">(</span><span class="n">state</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">welford_state</span> <span class="n">state</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">test_data</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">,</span> <span class="mf">6.0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="kt">size_t</span> <span class="n">data_size</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">test_data</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">test_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">data_size</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nf">welford_update</span><span class="p">(</span><span class="o">&amp;</span><span class="n">state</span><span class="p">,</span> <span class="n">test_data</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">        <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;Added %.1f: mean=%.3f, variance=%.3f, stddev=%.3f</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">               <span class="n">test_data</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nf">welford_mean</span><span class="p">(</span><span class="o">&amp;</span><span class="n">state</span><span class="p">),</span> 
</span></span><span class="line"><span class="cl">               <span class="nf">welford_variance</span><span class="p">(</span><span class="o">&amp;</span><span class="n">state</span><span class="p">),</span> <span class="nf">welford_stddev</span><span class="p">(</span><span class="o">&amp;</span><span class="n">state</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Для ковариации и корреляции мы можем расширить этот подход:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">n</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">mean_x</span><span class="p">,</span> <span class="n">mean_y</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">C2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="n">welford_cov_state</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">welford_cov_update</span><span class="p">(</span><span class="n">welford_cov_state</span> <span class="o">*</span><span class="n">state</span><span class="p">,</span> <span class="kt">double</span> <span class="n">x</span><span class="p">,</span> <span class="kt">double</span> <span class="n">y</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span><span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">delta_x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean_x</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">delta_y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">-</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean_y</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean_x</span> <span class="o">+=</span> <span class="n">delta_x</span> <span class="o">/</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean_y</span> <span class="o">+=</span> <span class="n">delta_y</span> <span class="o">/</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">state</span><span class="o">-&gt;</span><span class="n">C2</span> <span class="o">+=</span> <span class="n">delta_x</span> <span class="o">*</span> <span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">mean_y</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="nf">welford_covariance</span><span class="p">(</span><span class="k">const</span> <span class="n">welford_cov_state</span> <span class="o">*</span><span class="n">state</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">(</span><span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">?</span> <span class="n">state</span><span class="o">-&gt;</span><span class="n">C2</span> <span class="o">/</span> <span class="p">(</span><span class="n">state</span><span class="o">-&gt;</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">:</span> <span class="mf">0.0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>]]></content:encoded><category>algorithms</category><category>C</category><category>math</category></item><item><title>Ортогонализация Грама-Шмидта</title><link>https://alchemmist.xyz/ru/articles/gram-schmidt/</link><pubDate>Sun, 06 Jul 2025 07:16:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/gram-schmidt/</guid><description>В большинстве практических задач нам требуется проекция вектора на подпространство. Если подпространство задано ортогональным или ортонормированным базисом, это можно сделать легко. Для ортогонализации векторов используется метод Грама-Шмидта.
Имеем исходные векторы $v_1, v_2, \dots, v_n$, и нам нужно получить ортогональные векторы $u_1, u_2, \dots, u_n$. Общая схема метода: 0. Удаляем все нулевые векторы.
Берём первый вектор без изменений: $u_1 = v_1$. Следующий вектор находим из $v_2$ и проекций на предыдущие векторы: $u_2 = v_2 - \text{Proj}_{u_1}{v_2}$. Повторяем: $u_3 = v_3 - \text{Proj}_{u_1}{v_3} - \text{Proj}_{u_2}{v_3}$. Продолжаем до вектора $u_n$: $u_n = v_n - \sum_{i=1}^{n-1}\text{Proj}_{u_i}{v_n}$. Напомним формулу проекции: $\text{Proj}_{u}{v} = \frac{\langle u, v\rangle}{||u||^2}u$. Для получения ортонормированного базиса нормируем векторы: $e_i = \frac{u_i}{||u_i||}$. Рассмотрим пример: $v_1 = \begin{pmatrix}1 \\ 1\end{pmatrix}, \ v_2 = \begin{pmatrix}1 \\ 0\end{pmatrix}$. Сначала задаём $u_1 = v_1$, затем: $u_2 = v_2 - \text{Proj}_{u_1}{v_2} = \begin{pmatrix}1 \\ 0\end{pmatrix} - \begin{pmatrix}0.5 \\ 0.5\end{pmatrix} = \begin{pmatrix}0.5 \\ -0.5\end{pmatrix}$. В итоге получаем ортогональные векторы: $u_1 = \begin{pmatrix}1 \\ 0\end{pmatrix}$, $u_2 = \begin{pmatrix}0.5 \\ -0.5\end{pmatrix}$.</description><content:encoded><![CDATA[<p>В большинстве практических задач нам требуется проекция вектора на подпространство. Если подпространство задано ортогональным или ортонормированным базисом, это можно сделать легко. Для ортогонализации векторов используется метод Грама-Шмидта.</p>
<p>Имеем исходные векторы $v_1, v_2, \dots, v_n$, и нам нужно получить ортогональные векторы $u_1, u_2, \dots, u_n$. Общая схема метода:
0. Удаляем все нулевые векторы.</p>
<ol>
<li>Берём первый вектор без изменений: $u_1 = v_1$.</li>
<li>Следующий вектор находим из $v_2$ и проекций на предыдущие векторы: $u_2 = v_2 - \text{Proj}_{u_1}{v_2}$.</li>
<li>Повторяем: $u_3 = v_3 - \text{Proj}_{u_1}{v_3} - \text{Proj}_{u_2}{v_3}$.</li>
<li>Продолжаем до вектора $u_n$: $u_n = v_n - \sum_{i=1}^{n-1}\text{Proj}_{u_i}{v_n}$.
Напомним формулу проекции: $\text{Proj}_{u}{v} = \frac{\langle u, v\rangle}{||u||^2}u$. Для получения ортонормированного базиса нормируем векторы: $e_i = \frac{u_i}{||u_i||}$.</li>
</ol>
<p>Рассмотрим пример: $v_1 = \begin{pmatrix}1 \\ 1\end{pmatrix}, \ v_2 = \begin{pmatrix}1 \\ 0\end{pmatrix}$.
Сначала задаём $u_1 = v_1$, затем: $u_2 = v_2 - \text{Proj}_{u_1}{v_2} = \begin{pmatrix}1 \\ 0\end{pmatrix} - \begin{pmatrix}0.5 \\ 0.5\end{pmatrix} = \begin{pmatrix}0.5 \\ -0.5\end{pmatrix}$.
В итоге получаем ортогональные векторы: $u_1 = \begin{pmatrix}1 \\ 0\end{pmatrix}$, $u_2 = \begin{pmatrix}0.5 \\ -0.5\end{pmatrix}$.</p>
]]></content:encoded><category>math</category></item><item><title>Стационарные точки и метод Лагранжа</title><link>https://alchemmist.xyz/ru/articles/stationary-points-and-lagrange/</link><pubDate>Sun, 06 Jul 2025 05:19:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/stationary-points-and-lagrange/</guid><description>При анализе функции мы ищем стационарные точки. Без ограничений используем градиент — вектор частных производных: $$ \nabla f = \begin{pmatrix} \displaystyle \frac{\partial f}{\partial x_1} \\ \displaystyle \frac{\partial f}{\partial x_2} \\ \dots \\ \displaystyle \frac{\partial f}{\partial x_n} \end{pmatrix} $$ Пример: $f(x, y, z) = x^2 + y^2 - 4x - 4y + z^4 - 4z^2$. Градиент: $$ \nabla f = \begin{pmatrix} \displaystyle \frac{\partial f}{\partial x} \\ \displaystyle \frac{\partial f}{\partial y} \\ \displaystyle \frac{\partial f}{\partial z} \end{pmatrix} = \begin{pmatrix} 2x - 4 \\ 2y - 4 \\ 4z^3 - 8z \end{pmatrix} $$ Приравниваем к нулю: $\nabla f = 0$, получаем систему:</description><content:encoded><![CDATA[<p>При анализе функции мы ищем стационарные точки. Без ограничений используем градиент — вектор частных производных:
</p>
$$
\nabla f = \begin{pmatrix}
\displaystyle \frac{\partial f}{\partial x_1} \\
\displaystyle \frac{\partial f}{\partial x_2} \\
\dots \\
\displaystyle \frac{\partial f}{\partial x_n}
\end{pmatrix}
$$<p>
Пример: $f(x, y, z) = x^2 + y^2 - 4x - 4y + z^4 - 4z^2$. Градиент:
</p>
$$
\nabla f = \begin{pmatrix}
\displaystyle \frac{\partial f}{\partial x} \\
\displaystyle \frac{\partial f}{\partial y} \\
\displaystyle \frac{\partial f}{\partial z}
\end{pmatrix} =  \begin{pmatrix}
2x - 4 \\
2y - 4 \\
4z^3 - 8z
\end{pmatrix}
$$<p>
Приравниваем к нулю: $\nabla f = 0$, получаем систему:
</p>
$$
\begin{cases}2x - 4 = 0 \\ 2y - 4 = 0 \\ 4z^3 - 8z = 0 \end{cases} \quad \Rightarrow \quad \begin{cases}x = 2\\ y = 2 \\ \left[
\begin{array}{l}
z = 0 \\
z = \sqrt{2} \\
z = -\sqrt{2}
\end{array}
\right.\end{cases}
$$<p>
Стационарные точки: $(2, 2, 0), \ (2, 2, \sqrt{2}), \ (2, 2, -\sqrt{2})$.</p>
<blockquote class="markdown-blockquote">
  <p>Для дальнейшего анализа используйте <a href="/ru/articles/hessian-matrix/">матрицу Гессе</a>.</p>

</blockquote>
<p>Для задач с <strong>ограничениями</strong> применяем <strong>метод множителей Лагранжа</strong>. Пример: $f(x, y) = x^2 + y^2$ при условии $x + y = 1$. Перепишем ограничение как $g(x, y) = x + y - 1 = 0$. Градиенты:
</p>
$$
\nabla f = \begin{pmatrix}2x \\ 2y\end{pmatrix}, \quad \nabla g = \begin{pmatrix}1 \\ 1\end{pmatrix}
$$<p>
Уравнения Лагранжа в общем виде:
</p>
$$
\begin{cases}
\displaystyle \frac{\partial f}{\partial x_1} = \lambda \frac{\partial g}{\partial x_1} \\
\displaystyle \frac{\partial f}{\partial x_2} = \lambda \frac{\partial g}{\partial x_2} \\
\quad \dots \\
\displaystyle \frac{\partial f}{\partial x_n} = \lambda \frac{\partial g}{\partial x_n} \\
g(x_1, x_2, \dots x_n) = 0
\end{cases}
$$<p>
Для нашего случая:
</p>
$$
\begin{cases}2x = \lambda \cdot 1\\2y = \lambda \cdot 1\\x + y = 1\end{cases} \quad \Rightarrow \quad \begin{cases}\lambda = 2x\\\lambda = 2y\\x + y = 1\end{cases} \quad \Rightarrow \quad \begin{cases}x = y\\2x = 1\end{cases}\quad \Rightarrow \quad x = y = \frac{1}{2}
$$<p>
Стационарная точка: $\left(\frac{1}{2}, \frac{1}{2} \right)$. Итог: без ограничений решаем $\nabla f = 0$, с ограничениями — метод Лагранжа.```</p>
]]></content:encoded><category>math</category></item><item><title>Матрица Гессе</title><link>https://alchemmist.xyz/ru/articles/hessian-matrix/</link><pubDate>Sat, 05 Jul 2025 12:48:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/hessian-matrix/</guid><description>Предположим, у нас есть функция и несколько её стационарных точек, которые нужно классифицировать (максимум, минимум, седловая точка). Для функции без ограничений используем матрицу Гессе.
Как найти стационарные точки, читайте в статье: “Стационарные точки и метод Лагранжа”
Разберём на примере. Функция и стационарные точки: $$ f(x, y) = x^3 + y^3 - 3xy; \quad A = (0; 0), \ B = (1; 1) $$ Сначала построим матрицу Гессе. В общем виде она выглядит так:</description><content:encoded><![CDATA[<p>Предположим, у нас есть функция и несколько её стационарных точек, которые нужно классифицировать (максимум, минимум, седловая точка). Для функции без ограничений используем матрицу Гессе.</p>
<blockquote class="markdown-blockquote">
  <p>Как найти стационарные точки, читайте в статье: &ldquo;<a href="/ru/articles/stationary-points-and-lagrange/">Стационарные точки и метод Лагранжа</a>&rdquo;</p>

</blockquote>
<p>Разберём на примере. Функция и стационарные точки:
</p>
$$
f(x, y) = x^3 + y^3 - 3xy; \quad A = (0; 0), \ B = (1; 1)
$$<p>
Сначала построим матрицу Гессе. В общем виде она выглядит так:
</p>
$$
H_f(x) =
\begin{bmatrix}
\displaystyle \frac{\partial^2 f}{\partial x_1^2} & \displaystyle \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \displaystyle \frac{\partial^2 f}{\partial x_1 \partial x_n} \\
\displaystyle \frac{\partial^2 f}{\partial x_2 \partial x_1} & \displaystyle \frac{\partial^2 f}{\partial x_2^2} & \cdots & \displaystyle \frac{\partial^2 f}{\partial x_2 \partial x_n} \\
\vdots & \vdots & \ddots & \vdots \\
\displaystyle \frac{\partial^2 f}{\partial x_n \partial x_1} & \displaystyle \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \displaystyle \frac{\partial^2 f}{\partial x_n^2}
\end{bmatrix}
$$<p>
Для нашей функции: $H = \begin{bmatrix}6x & -3 \\-3 & 6y\end{bmatrix}$. Подставим точки в матрицу и найдём собственные значения:
</p>
$$
\begin{align}
&H_A = \begin{bmatrix}0 & -3 \\ -3 & 0\end{bmatrix} 
&&H_B = \begin{bmatrix}6 & -3 \\ -3 & 6\end{bmatrix} 
\\[1em]
&\det(H_A - \lambda I) = 
\det \begin{bmatrix}
0 - \lambda & -3 \\
-3 & 0 - \lambda
\end{bmatrix} =
&&\det(H_B - \lambda I) = \det \begin{bmatrix}
6 - \lambda & -3 \\
-3 & 6 - \lambda
\end{bmatrix} =
\\
&= (-\lambda)(-\lambda) - (-3)(-3) = \lambda^2 - 9 = 0 \ \Rightarrow \quad \quad \quad \quad
&&= (6-\lambda)^2 - 9 = 0 \ \Rightarrow
\\[1em]
&\Rightarrow \ \lambda^2 = 9 \ \Rightarrow \  \lambda = \pm 3 \ \Rightarrow
&&\Rightarrow \ (6-\lambda)^2 = 9 \ \Rightarrow \ 6 - \lambda = \pm 3 \ \Rightarrow
\\[1em]
&\Rightarrow \lambda_1 = 3, \quad \lambda_2 = -3
&&\Rightarrow \lambda_1 = 6 - 3 = 3, \quad \lambda_2 = 6 + 3 = 9
\end{align}
$$<p>
Применяем правила:</p>
<ul>
<li>Если все собственные значения положительны — локальный минимум</li>
<li>Если все отрицательны — локальный максимум</li>
<li>Если знаки разные — седловая точка</li>
</ul>
<p>Результат: точка $A$ — седловая, точка $B$ — локальный минимум.```</p>
]]></content:encoded><category>math</category></item><item><title>Подпространства</title><link>https://alchemmist.xyz/ru/articles/subspaces/</link><pubDate>Thu, 03 Jul 2025 10:42:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/subspaces/</guid><description>Начнём с полезного определения: Ненулевые векторы $u, v \in \mathbb{R}$ называются коллинеарными векторами, если они пропорциональны друг другу, то есть существует $\lambda \in \mathbb{R}$ такое, что $u = \lambda v$. Коллинеарные векторы обозначаются как $u || v$. Нулевой вектор коллинеарен любому вектору. Геометрически векторы коллинеарны, если они имеют одинаковое или противоположное направление.
Рассмотрим плоскость $\pi$ в пространстве $\mathbb{R}^3$, проходящую через начало координат. Возьмём два неколлинеарных вектора $u$ и $v$ из этой плоскости. Тогда любую точку $x \in \pi$ можно представить как: $x = \alpha u + \beta v$.</description><content:encoded><![CDATA[<p>Начнём с полезного определения: Ненулевые векторы $u, v \in \mathbb{R}$ называются <strong>коллинеарными векторами</strong>, если они пропорциональны друг другу, то есть существует $\lambda \in \mathbb{R}$ такое, что $u = \lambda v$. Коллинеарные векторы обозначаются как $u || v$. Нулевой вектор коллинеарен любому вектору. Геометрически векторы коллинеарны, если они имеют одинаковое или противоположное направление.</p>
<p>Рассмотрим плоскость $\pi$ в пространстве $\mathbb{R}^3$, проходящую через начало координат. Возьмём два неколлинеарных вектора $u$ и $v$ из этой плоскости. Тогда любую точку $x \in \pi$ можно представить как: $x = \alpha u + \beta v$.</p>
<p><img
    src="/images/two-vectors-on-plane_hu_f81c1a3af72a6417.webp"
    width="1600"
    height="883"
    class="content-img" style="width:400px"
    alt=""
    loading="lazy"
    decoding="async"
  />
Хорошо, это означает, что мы можем определить плоскость $\pi$ как:
</p>
$$
\pi = \{\text{all vectors }\  x \ \text { represented as }\ x = \alpha u + \beta v\}
$$<p>
Обобщим понятие плоскости, проходящей через начало координат, на пространство произвольной размерности:
<strong>Линейной оболочкой</strong> векторов $v_1, v_2, \dots, v_k \ \in \ \mathbb{R}^n$ называется множество векторов, представимых в виде суммы векторов $v_1, v_2, \dots, v_k$ с произвольными коэффициентами:
</p>
$$
P = \text{span}{(v_1, v_2, \dots, v_k)} = \{ x: \ x = \alpha_1 v_1 + \alpha_2 v_2 + \dots + \alpha_k v_k, \ \alpha_i \in \mathbb{R} \}.
$$<p>
Выражение $\alpha_1 v_1 + \alpha_2 v_2 + \dots + \alpha_k v_k$ будем называть линейной комбинацией векторов $v_1, v_2, \dots, v_k$.</p>
<p>Сформулируем ключевое определение: <strong>линейным подпространством</strong> $\mathbb{R}^n$ называется линейная оболочка конечного числа векторов $v_1, v_2, \dots v_k \ \in \mathbb{R}^n$:
</p>
$$
V = \text{span}(v_1, v_2, \dots, v_k)
$$<p>
Понятия линейной оболочки и линейного подпространства эквивалентны. Любая линейная оболочка и любое подпространство содержат $0$, поскольку мы можем положить все коэффициенты $\alpha_1, \alpha_2, \dots, \alpha_k$ равными нулю.</p>
<p>Почему линейные подпространства важны? Вот пример:</p>
<blockquote class="markdown-blockquote">
  <p>Возьмём чёрно-белое цифровое фото размером 512 на 512 пикселей. В памяти компьютера это фото может быть представлено как $512 \times 512 = 262144$ чисел — каждое представляет интенсивность соответствующего пикселя от 0 (полностью чёрный) до 1 (полностью белый). Таким образом, фото может быть представлено вектором $x$ в пространстве размерности $d=262144$.</p>
<p>Теперь рассмотрим важную практическую задачу — сжатие фото без значительных потерь. Оказывается, эту проблему можно решить, найдя специальное низкоразмерное подпространство и спроецировав вектор $x$ на это подпространство.</p>

</blockquote>
<p>Мы говорили, что подпространство должно содержать ноль. Это означает, что прямая $y = 2x$ является подпространством, а прямая $y = x + 2$ — нет. Но многие свойства подпространств сохраняются, даже когда они не содержат ноль. Такие подпространства называются аффинными подпространствами. <strong>Аффинным подпространством</strong> $\mathbb{R}^n$ называется множество векторов $A$ вида $a + v$, где $a \in \mathbb{R}^n$ — фиксированный вектор, а вектор $v$ принадлежит линейному подпространству $V$. Пусть линейное подпространство $V$ — это линейная оболочка векторов $v_1, v_2, \dots, v_k$. Тогда аффинное подпространство — это множество:
</p>
$$
A = \{ x: \ x = a + \alpha_1 v_1 + \alpha_2 v_2 + \dots + \alpha_k v_k, \ \alpha_i \in \mathbb{R}\}
$$<p>
Пусть $V$ — подпространство в $\mathbb{R}^n$. <strong>Размерностью</strong> этого подпространства называется минимальное количество векторов $v_1, v_2, \dots, v_k \in \mathbb{R}^n$, необходимых для определения подпространства $V$:
</p>
$$
V = \text{span}(v_1, v_2, \dots, v_k).
$$<p>
Размерность обозначается как: $\dim{(V)}$.
Подумаем об этом. Например, у нас есть два неколлинеарных вектора $u, v \in \mathbb{R}^{100}$ и подпространство $V = \text{span}(u, v)$. Мы знаем, что каждый вектор $x \in V$ имеет 100 координат, но по определению подпространства: $x = \alpha u + \beta v$. Это означает, что любой вектор $x$ определяется всего двумя параметрами $\alpha$ и $\beta$, следовательно $\dim{(V)} = 2$. Для определения точки в $\mathbb{R}^n$ нам нужно $n$ параметров, для определения точки в $V$ нам нужно $\dim{(V)}$ параметров.</p>
<p><img
    src="/images/define-subspace_hu_d2ba0211e5bef597.webp"
    width="1600"
    height="497"
    class="content-img" style="width:800px"
    alt=""
    loading="lazy"
    decoding="async"
  /></p>
<p>Существует подпространство, определяемое только одним вектором $0$: $V = \text{span}(0)$. Мы называем это подпространство тривиальным и считаем $\dim{(V)} = 0$.</p>
<p>Если у нас есть подпространство $V = \text{span}(v_1, v_2, \dots, v_k)$, может ли $\dim{(V)}$ быть меньше $k$? Да, если и только если один из векторов может быть выражен как линейная комбинация остальных векторов, например: $v_1 = \gamma_2v_2 + \gamma_3v_3 + \dots + \gamma_kv_k$.</p>
<p>Набор векторов называется <strong>линейно независимым</strong>, если равенство:
</p>
$$
\alpha_1 v_1 + \alpha_2 v_2 + \dots + \alpha_k v_k = 0
$$<p>
выполняется только при $\alpha_1 = \alpha_2 = \dots = \alpha_k = 0$. Если равенство может выполняться при ненулевых коэффициентах, векторы <strong>линейно зависимы</strong>.</p>
<p>Рассмотрим пространство $\mathbb{R}^n$ и заданный ненулевой вектор $w \in \mathbb{R}^n$. Тогда множество векторов $P$, перпендикулярных $w$:
</p>
$$
P = \{ \ x: \langle x;w \rangle = 0\ \}
$$<p>
является линейным подпространством с $\dim{(P)} = n - 1$</p>
]]></content:encoded><category>math</category></item><item><title>Прямая и плоскость</title><link>https://alchemmist.xyz/ru/articles/line-and-plane/</link><pubDate>Sat, 28 Jun 2025 17:18:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/line-and-plane/</guid><description>Линейная алгебра начинается с базовой геометрической интуиции, которая распространяется на многомерные пространства. Сейчас мы поговорим о прямой, плоскости и пространстве.
# Прямая на плоскости и в пространстве Как задать прямую на плоскости? Конечно, через две точки. Но это не всё. Существуют ещё три метода:
Параметрическое уравнение
Пусть прямая $l$ задана двумя точками $r_0 = (x_0; y_0)$ и $r_1 = (x_1;y_1)$. Заметим, что вектор $a = r_0 - r_1$ направлен вдоль $l$. Следовательно, любая точка на $l$ может быть определена как $r = r_0 + ta$, где $t \in \mathbb{R}$, а вся прямая $l$ задаётся при $-\infty &amp;lt; t &amp;lt; \infty$. Это выражение мы называем параметрическим уравнением:</description><content:encoded><![CDATA[<p>Линейная алгебра начинается с базовой геометрической интуиции, которая распространяется на многомерные пространства. Сейчас мы поговорим о прямой, плоскости и пространстве.</p>

<h2 id="прямая-на-плоскости-и-в-пространстве">
  <a class="link" href="#%d0%bf%d1%80%d1%8f%d0%bc%d0%b0%d1%8f-%d0%bd%d0%b0-%d0%bf%d0%bb%d0%be%d1%81%d0%ba%d0%be%d1%81%d1%82%d0%b8-%d0%b8-%d0%b2-%d0%bf%d1%80%d0%be%d1%81%d1%82%d1%80%d0%b0%d0%bd%d1%81%d1%82%d0%b2%d0%b5">
    #
  </a>
  Прямая на плоскости и в пространстве
</h2>

<p>Как задать прямую на плоскости? Конечно, через две точки. Но это не всё. Существуют ещё три метода:</p>
<ol>
<li>
<p><strong>Параметрическое уравнение</strong><br>
Пусть прямая $l$ задана двумя точками $r_0 = (x_0; y_0)$ и $r_1 = (x_1;y_1)$. Заметим, что вектор $a = r_0 - r_1$ направлен вдоль $l$. Следовательно, любая точка на $l$ может быть определена как $r = r_0 + ta$, где $t \in \mathbb{R}$, а вся прямая $l$ задаётся при $-\infty < t < \infty$. Это выражение мы называем <em>параметрическим уравнением</em>:<br>
</p>
$$
l = \{r: r = r_o + at, \ t \in \mathbb{R} \}
$$</li>
<li>
<p><strong>Линейное уравнение</strong><br>
Запишем параметрическое уравнение через координаты:<br>
</p>
$$
\begin{bmatrix}x \\ y\end{bmatrix} = \begin{bmatrix}x_0\\y_0\end{bmatrix} + \begin{bmatrix}t \cdot a_1 \\ t \cdot a_2\end{bmatrix} \Rightarrow \begin{cases}x = x_0 + ta_1 \\ y = y_0 + ta_2\end{cases}
$$<p>
Предположим, что $a_1 \neq 0$ и $a_2 \neq 0$, и выразим $t$ из каждого уравнения: $\frac{x - x_0}{a_1} = \frac{y - y_0}{a_2} \Rightarrow a_2x - a_1y + (a_1y_0 - a_2x_0) = 0$. Поскольку $a_1, a_2, x_0, x_1$ — числа, это означает, что мы можем определить его как линейное уравнение:<br>
</p>
$$
Ax + By + C = 0
$$<p>
где $A = a_2$, $B = -a_1$, $C = (a_1y_0 - a_2x_0)$</p>
</li>
<li>
<p><strong>Нормаль и точка</strong><br>
Последний метод. Выберем произвольную точку на прямой $l$ с радиус-вектором $r_0$. Проведём вектор $n$ из точки $r_0$, перпендикулярный прямой $l$. Тогда для любой точки $r$ на прямой $l$ векторы $r - r_0$ и $n$ будут перпендикулярны. Перепишем это через скалярное произведение:<br>
</p>
$$
l = \{ r: \langle r - r_0;n\rangle = 0\}
$$<p>
Разумеется, $r_0$ может быть любой точкой на прямой $l$, а нормальный вектор $n$ — любым вектором, перпендикулярным прямой $l$. Чтобы найти нормаль к прямой, нам нужен направляющий вектор $a = \begin{pmatrix}a_1 \\ a_2\end{pmatrix}$ из <em>параметрического уравнения</em>, тогда нормальный вектор будет: $n = \begin{bmatrix}-a_2\\ a_1\end{bmatrix}$ или $n’ = -n = \begin{bmatrix} a_2 \\ -a_1\end{bmatrix}$</p>
</li>
</ol>
<p>Подведём итог и посмотрим на взаимосвязь между этими методами. Если прямая проходит через две точки $r_0 = (x_0; y_0)$ и $r_1 = (x_1; y_1)$, то её можно определить любым из трёх методов:</p>
<ul>
<li>Параметрическое уравнение:<br>

$$
r = r_0 + ta = \begin{bmatrix}x_0\\y_0\end{bmatrix} + t \cdot \begin{bmatrix}x_1 - x_0 \\ y_1 - y_0\end{bmatrix} = \begin{bmatrix}x_0\\y_0\end{bmatrix} + \begin{bmatrix}t \cdot a_1 \\ t \cdot a_2\end{bmatrix}
$$</li>
<li>Линейное уравнение:<br>

$$
Ax + By + C = 
\underbrace{a_2}_{A} x + 
\underbrace{(-a_1)}_{B} y + 
\underbrace{(a_1 y_0 - a_2 x_0)}_{C} = 0;
$$</li>
<li>Нормаль и точка:<br>

$$
\langle r - r_0; n\rangle = \left\langle \begin{bmatrix}x - x_0\\y - y_0\end{bmatrix}; \begin{bmatrix}a_1 \\ -a_1\end{bmatrix}\right\rangle = \left\langle\begin{bmatrix}x - x_0 \\ y - y_0\end{bmatrix}; \begin{bmatrix}A \\ B\end{bmatrix} \right\rangle
$$</li>
</ul>
<p>Как насчёт прямой в пространстве? Параметрическое уравнение не меняется, векторы становятся длиннее. Линейное уравнение изменится: теперь это не одно уравнение, а система двух уравнений:<br>
</p>
$$
\begin{cases}
a_2x - a_1y + (a_1y_0 - a_2x_0) = 0 \\
a_3y - a_2z + (a_2z_0 - a_3y_0) = 0
\end{cases}
$$<p>
Метод с нормалью и точкой <strong>не работает в пространстве</strong>!</p>
<p>Дополнение: рассмотрим <strong>расстояние от точки до прямой</strong>:<br>
</p>
$$
d(P, l) = \frac{|Ax_0 + By_0 + C|}{\sqrt{A^2 + B^2}}
$$<p>
Мы можем определить, где находится точка относительно прямой: группа точек с одной стороны, для которых верно $Ax +By + C > 0$; группа с другой стороны, для которых верно $Ax +By + C < 0$.</p>

<h2 id="плоскость-в-пространстве">
  <a class="link" href="#%d0%bf%d0%bb%d0%be%d1%81%d0%ba%d0%be%d1%81%d1%82%d1%8c-%d0%b2-%d0%bf%d1%80%d0%be%d1%81%d1%82%d1%80%d0%b0%d0%bd%d1%81%d1%82%d0%b2%d0%b5">
    #
  </a>
  Плоскость в пространстве
</h2>

<p>Снова этот вопрос. Как задать плоскость в пространстве? Конечно, через три неколлинеарные точки, не лежащие на одной прямой. <strong>Коллинеарные точки</strong> лежат на одной прямой. И снова рассмотрим три метода:</p>
<ol>
<li><strong>Параметрическое уравнение</strong>:<br>

$$
\pi = \{r: r = r_0 + t_1v_1 + t_2v_2, \quad t_1, t_2 \in \mathbb{R}\}
$$</li>
<li><strong>Нормаль и точка</strong>: такой же, как для прямой: $\langle r - r_0; n\rangle = 0$</li>
<li><strong>Линейное уравнение</strong>: начнём от нормали и точки и развернём его:<br>

$$
\langle r - r_0; n\rangle = 0 \quad \Rightarrow \quad 
\underbrace{n_1}_{A} x\  + \ 
\underbrace{n_2}_{B} y\  + \
\underbrace{n_3}_{C} z \ 
\underbrace{- \langle r_0 ;n\rangle}_{D} = 0. \ \Rightarrow \ Ax + By + Cz + D = 0
$$</li>
</ol>
<p>Посмотрим на взаимосвязь между этими методами:</p>
<ul>
<li>Чтобы переписать параметрическое уравнение в нормаль и точку, нужно найти нормальный вектор из системы уравнений:  $\begin{cases}\langle n; v_1\rangle = 0 \\ \langle n; v_2\rangle = 0\end{cases}$</li>
<li>Чтобы переписать форму нормали и точки в линейное уравнение, мы можем использовать: $A = n_1$, $B = n_2$, $C = n_3$, $D = -\langle n ;r_0\rangle$</li>
<li>Если у нас есть три точки, определяющие плоскость, мы можем перейти к параметрическому уравнению: $\begin{array}a v_1 = r_1 - r_0\\ v_2 = r_2 - r_0\end{array}$</li>
</ul>
<p>Проекцией точки $P$ на плоскость $\pi$ называется точка $P_\pi \in \pi$, ближайшая к точке $P$: $P_\pi = \arg{\min{||P - X||}}, \ X \in \pi$. Тогда расстояние от точки $P$ до плоскости $\pi$ будет $d(P, \pi)$ — расстояние между точкой $P$ и её проекцией $P_\pi$:<br>
</p>
$$
d(P, \pi) = \frac{|Ax_0 + By_0 + Cz_0 + D|}{\sqrt{A^2 + B^2 + C^2}}
$$<p>
Определение расположения точки относительно плоскости такое же, как для прямой.</p>
]]></content:encoded><category>math</category></item><item><title>Основы многомерных векторов</title><link>https://alchemmist.xyz/ru/articles/multivariate-vectors/</link><pubDate>Thu, 26 Jun 2025 14:18:00 +0300</pubDate><dc:creator>alchemmist</dc:creator><guid>https://alchemmist.xyz/ru/articles/multivariate-vectors/</guid><description>Что такое вектор? Для натурального числа $n$ назовём вектором упорядоченный список из $n$ действительных чисел $v = \begin{pmatrix}v_1&amp;amp;v_2&amp;amp;v_3&amp;amp;\ldots&amp;amp;v_n\end{pmatrix}$. Число $n$ называется размерностью вектора: $\dim{v} = n$. Множество всех возможных векторов размерности $n$ обозначается $R^n$. Обычные числа называются “скалярами”. Например, $5$ — скаляр, а $\begin{pmatrix}1&amp;amp;3\end{pmatrix}$ — вектор.
# Базовые операции с векторами Сумма векторов — сумма соответствующих координат: $$ v + w = \begin{pmatrix}v_1 \\ v_2 \\ \ldots \\ v_n \end{pmatrix} + \begin{pmatrix}w_1 \\ w_2 \\ \ldots \\ w_n \end{pmatrix} = \begin{pmatrix}v_1 + w_1 \\ v_2 + w_2 \\ \ldots \\ v_n + w_n \end{pmatrix} $$ Складывать можно только векторы одинаковой размерности. Умножение вектора на скаляр: $$ \lambda v = \lambda \cdot \begin{pmatrix}v_1 \\ v_2 \\ \ldots \\ v_n \end{pmatrix} = \begin{pmatrix}\lambda v_1 \\ \lambda v_2 \\ \ldots \\ \lambda v_n \end{pmatrix} $$ Разность векторов — сумма векторов, где один умножен на скаляр $-1$. Скалярное произведение векторов: $$ x \cdot y = \langle x;y\rangle = x_1 y_1 + x_2 y_2 + \ldots + x_n y_n = \sum \limits_{i = 1}^{n}x_i y_i $$ Свойства скалярного произведения: Коммутативность: $\langle v; w\rangle = \langle w; v\rangle$ Дистрибутивность: $\langle x; (v + w)\rangle = \langle x; v\rangle + \langle x; w \rangle$ Совместимость со скалярным умножением: $\langle v; \lambda w\rangle = \lambda \langle v;w\rangle$ Если скалярное произведение равно нулю, векторы называются ортогональными # Геометрическая интерпретация В геометрии вектор — направленный отрезок.</description><content:encoded><![CDATA[<p>Что такое вектор? Для натурального числа $n$ назовём <strong>вектором</strong> упорядоченный список из $n$ действительных чисел $v = \begin{pmatrix}v_1&v_2&v_3&\ldots&v_n\end{pmatrix}$. Число $n$ называется размерностью вектора: $\dim{v} = n$. Множество всех возможных векторов размерности $n$ обозначается $R^n$.
Обычные числа называются &ldquo;скалярами&rdquo;. Например, $5$ — скаляр, а $\begin{pmatrix}1&3\end{pmatrix}$ — вектор.</p>

<h2 id="базовые-операции-с-векторами">
  <a class="link" href="#%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d1%8b%d0%b5-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8-%d1%81-%d0%b2%d0%b5%d0%ba%d1%82%d0%be%d1%80%d0%b0%d0%bc%d0%b8">
    #
  </a>
  Базовые операции с векторами
</h2>

<ol>
<li>Сумма векторов — сумма соответствующих координат:

$$
v + w = \begin{pmatrix}v_1 \\ v_2 \\ \ldots \\ v_n \end{pmatrix} + \begin{pmatrix}w_1 \\ w_2 \\ \ldots \\ w_n \end{pmatrix} = \begin{pmatrix}v_1 + w_1 \\ v_2 + w_2 \\ \ldots \\ v_n + w_n \end{pmatrix}
$$
Складывать можно только векторы одинаковой размерности.</li>
<li>Умножение вектора на скаляр:

$$
\lambda v = \lambda \cdot \begin{pmatrix}v_1 \\ v_2 \\ \ldots \\ v_n \end{pmatrix} = \begin{pmatrix}\lambda v_1 \\ \lambda v_2 \\ \ldots \\ \lambda v_n \end{pmatrix}
$$</li>
<li>Разность векторов — сумма векторов, где один умножен на скаляр $-1$.</li>
<li>Скалярное произведение векторов:

$$
x \cdot y = \langle x;y\rangle = x_1 y_1 + x_2 y_2 + \ldots + x_n y_n = \sum \limits_{i = 1}^{n}x_i y_i
$$
Свойства скалярного произведения:</li>
</ol>
<ul>
<li>Коммутативность: $\langle v; w\rangle = \langle w; v\rangle$</li>
<li>Дистрибутивность: $\langle x; (v + w)\rangle = \langle x; v\rangle + \langle x; w \rangle$</li>
<li>Совместимость со скалярным умножением: $\langle v; \lambda w\rangle = \lambda \langle v;w\rangle$</li>
<li>Если скалярное произведение равно нулю, векторы называются <strong>ортогональными</strong></li>
</ul>

<h2 id="геометрическая-интерпретация">
  <a class="link" href="#%d0%b3%d0%b5%d0%be%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b0%d1%8f-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bf%d1%80%d0%b5%d1%82%d0%b0%d1%86%d0%b8%d1%8f">
    #
  </a>
  Геометрическая интерпретация
</h2>

<p>В геометрии вектор — направленный отрезок.
<img
    src="/images/the-vector_hu_3dba13051fbe9e9b.webp"
    width="984"
    height="628"
    class="content-img" style="width:400px"
    alt=""
    loading="lazy"
    decoding="async"
  /></p>
<p><strong>Длина</strong> вектора вычисляется по теореме Пифагора: ФОРМУЛА_4. Вектор единичной длины называется <strong>единичным вектором</strong>. Ненормированный вектор можно нормировать умножением на $\lambda = \frac{1}{||v||}$.
<strong>Расстояние</strong> между векторами: $d = ||v - w|| = \sqrt{\sum\limits_{i = 1}^{n}{(v_i - w_i)^2}}$
<strong>Угол</strong> между векторами:
</p>
$$
\cos{\theta} = \frac{\langle u;b \rangle}{||u||\ ||v||}
$$<p>
<strong>Проекция</strong> вектора $u$ на $w$:
</p>
$$
Proj_w(u) = \frac{\langle u;w\rangle}{||w||^2}w
$$<p><strong>Неравенство Коши-Буняковского</strong>:
</p>
$$
-||v||\ ||w|| \leqslant \langle v;w\rangle \leqslant ||v||\ ||w||
$$<p>
<strong>Неравенство треугольника</strong>: $||v + w|| \leqslant ||v|| + ||w||$<br>
Для ортогональных векторов выполняется теорема Пифагора: $||a + b||^2 = ||a||^2 + ||b||^2$.```</p>
]]></content:encoded><category>math</category></item></channel></rss>