Числа с плавающей точкой (ЧПТ) - стандартный способ представления действительных чисел в компьютерах, аппроксимирующий их в форме: ±m * b^e, где:
Стандарт IEEE 754 определяет форматы (single precision float: 32 бита, double precision double: 64 бита), распределяя биты на знак, экспоненту и мантиссу. Ключевые особенности и проблемы:
Конечная точность и погрешность представления: Большинство действительных чисел не могут быть представлены точно из-за ограниченного числа бит мантиссы. Возникает погрешность округления. Величина машинного эпсилон (ε_mach) - это разница между 1.0 и следующим представимым числом >1.0 - характеризует относительную точность округления (ε_mach ≈ 1.1e^(-16) для double).
Диапазон представимых чисел: Ограничен количеством бит экспоненты. Возможны переполнение (overflow, |число| > max_представимое) и исчезновение порядка (underflow, |число| < min_представимое > 0).
Арифметические операции: Результат операции над ЧПТ часто требует округления до ближайшего представимого числа, внося погрешность.
Потеря значимости (Catastrophic Cancellation): Наиболее опасный эффект. Возникает при вычитании двух очень близких по величине чисел. Значимые разряды в мантиссе сокращаются, а погрешности, которые были в каждом из чисел, остаются и становятся относительно огромными в результате.
Пример:
a = 1.2345678901234
b = 1.2345678900000
a - b = 0.0000000001234 = 1.234e^(-10) (теряются многие значащие цифры).
Некоммутативность и неассоциативность: Из-за округления операции могут давать разные результаты при изменении порядка: (a + b) + c != a + (b + c), a + b != b + a в некоторых пограничных случаях (хотя коммутативность обычно сохраняется для + и *).
Особые значения: ±0, ±∞ (Inf), NaN (Not a Number - результат неопределенных операций типа 0/0, ∞ - ∞).
Современные компьютеры используют иерархию памяти для баланса между скоростью доступа, объёмом и стоимостью. Уровни иерархии (от быстрых к медленным):
Ключевые принципы:
Временная: Повторный доступ к одним данным → кэширование.
Пространственная: Доступ к соседним адресам (например, элементам массива) → загрузка блоков в кэш.
Переполнение (overflow) возникает, когда результат вычислений превышает максимальное представимое число для типа данных.
Потеря точности (underflow) возникает, когда результат ближе к нулю, чем минимальное нормализованное число:
Ключевые последствия:
Ошибка округления возникает из-за конечной точности мантиссы (бит): число x представляется как fl(x)=x*(1+δ), где ∣δ∣ ≤ ε_mach (машинное эпсилон, ≈ 10^(−16) для double). Например, 0.1 в двоичной системе хранится с погрешностью.
Накопление ошибок — кумулятивный эффект при последовательных операциях. Погрешность результата n операций может достигать ∼ sqrt(n) * ε_mach (случайное округление) или n * ε_mach (худший случай).
Потеря значимости — вычитание близких чисел a ≈ b, усиливающее относительную погрешность:
fl(a−b) = (a * (1+δ_1) − b * (1+δ_2)) ≈ (a−b) + (a * δ_1− b * δ_2).
Относительная ошибка: ∣a * δ_1 − b * δ_2∣/∣a − b∣ ≫ ε_mach , если ∣a − b∣ ≪ ∣a∣ + ∣b∣.
Пример:
1.000001−1.000000 = 10^(−6), но при погрешностях δ_i ∼ 10^(−16) результат может иметь относительную ошибку до 10^(−10).
Алгоритм Кахана — метод компенсации ошибок округления при суммировании последовательности чисел с плавающей точкой. Он использует дополнительную переменную для отслеживания потерянных младших разрядов.
Алгоритм:
y = x - c (включаем предыдущую ошибку),
t = sum + y (новая промежуточная сумма),
c = (t - sum) - y (вычисляем ошибку округления),
sum = t.
Принцип работы:
Абсолютная погрешность (Δx) — разница между точным значением x∗ и его приближением x:
Δx=∣x−x∗∣.
Эта величина характеризует физический размер ошибки (например, погрешность измерения длины в метрах).
Относительная погрешность (δx) — отношение абсолютной погрешности к модулю точного значения x∗:
δx=Δx/∣x∗∣=∣x − x∗∣/∣x∗∣, (x∗ ≠ 0).
Она выражает качество приближения без привязки к масштабу величины (например, 0.01 при x∗=100 означает 1% ошибки).
Значащими цифрами в записи приближенного числа называются:
• все ненулевые цифры;
• нули, содержащиеся между ненулевыми цифрами;
• нули, являющиеся представителями сохраненных десятичных разрядов при округлении.
СКОЛЬЗКИЙ МОМЕНТ (я сама запуталась): Если в результате округления вы сохранили нули, чтобы показать точность числа, эти нули считаются значащими. 12.300 → 5 значащих цифр (нулевые после "3" показывают, что измерение было сделано с точностью до тысячных)
0.00470 → 3 значащих (4, 7, и последний 0 — он показывает, что число точно до 5-го знака после запятой)
Правила округления чисел:
Чтобы округлить число до n значащих цифр, отбрасывают все цифры, стоящие справа от n-й значащей цифры, или, если это нужно для сохранения разрядов, заменяют их нулями. При этом:
1. если первая отброшенная цифра меньше 5, то оставшиеся десятичные знаки сохраняют без изменения;
2. если первая отброшенная цифра больше 5, то к последней оставшейся цифре прибавляют единицу;
3. если первая отброшенная цифра равна 5 и среди остальных отброшенных цифр есть ненулевые, то к последней оставшейся цифре прибавляют единицу;
4. если первая из отброшенных цифр равна 5 и все отброшенные цифры являются нулями, то последняя оставшаяся цифра оставляется неизменной, если она четная, и увеличивается на единицу, если нет (правило четной цифры). Это правило гарантирует, что сохраненные значащие цифры числа являются верными в узком смысле, т. е. погрешность округления не превосходит половины разряда, соответствующего последней оставленной значащей цифре. Правило четной цифры должно обеспечить компенсацию знаков ошибок.
При округлении числа возникает погрешность округления, равная модулю разности неокругленного и округленного значений:
∆окр = |𝑥 − 𝑥окр| .
Тогда абсолютная погрешность 𝑥окр складывается из абсолютной погрешности числа x, являющегося приближением его точного значения, и погрешности округления
Цифра числа называется верной в строгом смысле (в узком смысле), если абсолютная погрешность этого числа не превосходит половины единицы разряда, в котором стоит эта цифра.
Цифра числа называется верной в широком смысле, если абсолютная погрешность этого числа не превышает единицы разряда, в котором стоит эта цифра.
Цифры в записи числа, о которых неизвестно, верны они или нет, называются сомнительными. В промежуточных вычислениях сохраняют одну-две сомнительные цифры, а в окончательном результате сомнительные цифры отбрасывают (иногда оставляют одну).
Говорят, что приближенное данное записано правильно, если в его записи все цифры верные. Если число записано правильно, то по одной его записи в виде десятичной дроби можно судить о точности этого числа.
Сложность алгоритма — это характеристика того, как быстро (или сколько памяти) алгоритм использует в зависимости от размера входных данных nnn.
Big-O описывает асимптотическое поведение алгоритма — как он себя ведёт при больших входах, игнорируя константы и незначительные слагаемые.
Обозначается как:
T(n)=O(f(n))
Где:
Что влияет на время выполнения алгоритма (программы)?
1. Размер входных данных
2. Качество реализации алгоритма на языке программирования
3. Качество скомпилированного кода
4. Производительность вычислительной машины
Сложность функции – это зависимость между размером входных данных и сложностью выполнения этой функции до завершения. Размер входных данных обычно обозначается как 𝑛. Однако 𝑛 чаще всего представляет собой некую конкретную характеристику, например, длину массива.
Сложность задачи можно измерять разными способами. Один из удобных способов – учитывать базовые операции: сложение, вычитание, умножение, деление, присваивание и вызовы функций. Хотя выполнение каждой из этих операций занимает разное время, общее число базовых операций, необходимых для завершения работы функции, достаточно хорошо коррелирует с фактическим временем выполнения. При этом подсчет базовых операций гораздо проще.
Вычислительная сложность алгоритма (computational complexity) - это оценка количества операций выполняемых алгоритмом в зависимости от размера его входных данных.
При асимптотическом анализе вычислительной сложности алгоритма (asymptotic computational complexity) рассматривается поведение алгоритма при n → ∞.
Причины
1. Точное значение временной сложности зависит от определения элементарных операций исполнителя (например, сложность можно измерять в количестве арифметических операций, битовых операций или операций на машине Тьюринга).
2. При увеличении размера входных данных (n → ∞) вклад постоянных множителей и слагаемых низших порядков становится незначительным.
Big-O описывает, как изменяется количество базовых операций в зависимости от размера входных данных при их росте. Так как различное оборудование выполняет вычисления с разной скоростью, невозможно точно определить время работы алгоритма без учета характеристик конкретного компьютера. Однако нас больше интересует не абсолютное время работы функции, а то, как оно изменяется при увеличении 𝑛, поскольку это позволяет оценить производительность независимо от аппаратного обеспечения. При больших значениях 𝑛 наибольшее влияние оказывает член с наивысшей степенью, поэтому в нотации Big-O оставляют только его. Кроме того, константные коэффициенты “не имеют значения” и также отбрасываются.
O(1) Константная сложность
O(log(n)) Логарифмическая сложность
O(n) Линейная сложность
O(n logn) n-log-n сложность
O(n2) Квадратичная сложность
O(n3) Кубическая сложность
O(2^n) Экспоненциальная сложность
O(n!) Факториальная сложность
Профилирование — это процесс измерения производительности программы:
Цель профилирования — найти узкие места (bottlenecks), чтобы оптимизировать код.
Не буду писать сюда все варианты профилирования, потому что в презе этого нет. Мы использовали вот такие функции (можешь глянуть мой файлик chim1-2 - это все, что мы юзали на первом семинаре, дальше вообще тыкали только timeit):
%time sum(range(2000)) - Однократное измерение времени выполнения выражения. Полезно для быстрого замера, но не очень точно, так как результат может зависеть от фоновой нагрузки.
%timeit sum(range(2000)) - Множественное измерение (по умолчанию: 7 повторов по 1 млн итераций или адаптивно) — средняя и надёжная оценка времени выполнения.
%%time (перед ячейкой кода), %%timeit (перед ячейкой кода) - это и следующую применяли к тем же функциям, но расписанным циклом, поэтому юзали штучку, которая считает всю ячейку
%prun slow_sum(100,10000) - Запускает встроенный профилировщик cProfile на одну строку (или функцию), и выводит статистику по вызовам функций. Полезно для анализа, где тратится больше всего времени. Показывает количество вызовов, время в функции, суммарное время с учётом подфункций
а еще устанавливали такую штуку:
pip install line-profiler
%load_ext line_profiler
%lprun -f slow_sum slow_sum(1000,10000) - Показывает время выполнения каждой строки функции. Очень точный для локального анализа производительности
Формат чисел с плавающей точкой (float):
число = (знак) * мантисса * основание (по умолчанию = 2) ^ показатель
Стандарт IEEE 754 предполагает:
1 бит под знак (0 — положительное, 1 — отрицательное)
11 бит под экспоненту (2048 значений) - Кодированный порядок двойки (с bias = 1023)
52 бита под мантиссу (1<мантисса<2) Дробная часть, без первой (скрытой) единицы
Все, что выше - мой конспект, ниже - пример от жптшки
Шаг за шагом разберем представление 6.75 в float64.
6.75=110.112=1.1011⋅226.75 = 110.11_2 = 1.1011 \cdot 2^26.75=110.112=1.1011⋅22
e=2⇒eкодированная=2+1023=1025=100000000012e = 2 \Rightarrow e_{кодированная} = 2 + 1023 = 1025 = 10000000001_2e=2⇒eкодированная=2+1023=1025=100000000012
📦 Итого 64 бита:
0 10000000001 1011000000000000000000000000000000000000000000000000
Решение уравнения численными методами состоит из двух этапов:
• первый этап – отделение корня, отыскание приближенного значения корня или содержащего его отрезка.
• второй – уточнение приближенных корней - доведение их до заданной степени точности. Отделить корень – значит указать такой отрезок [a, b], на котором содержится ровно один корень уравнения f(x) = 0.
Корень можно отделить аналитически и графически. Не существует алгоритмов отделения корня, пригодных для любых функций f(x) – невозможно для всего многообразия таких уравнений построить прямой метод. Итерационный процесс состоит в последовательном уточнении начального приближения x0 . Каждый такой шаг называется итерацией. В результате итераций находится последовательность приближенных значений корня x1 , x2 ,...,xn . Если 𝑙𝑖𝑚 𝑛→∞ {𝑥𝑛} = 𝑥точное , то говорят, что итерационный процесс сходится.
В целом, задача приближенного определение местоположения и вида интересующего нас корня – этапа отделения корней (нахождение грубых корней) может быть решена:
1. на заданном отрезке [a, b] вычисляется таблица значений функции с некоторым шагом h и определяются интервалы (i , i ) длиной h, на которых функция меняет знак (график функции пересекает ось Х), т.е. где находятся корни;
2. графическим методом: по построенной таблице строится график и аналогично определяются интервалы, на которых находятся корни.
Приближенные значения корней (начальные приближения) могут быть также известны из физического смысла задачи, из решения аналогичной задачи при других исходных данных, или могут быть найдены графическим способом. В инженерной практике распространен графический способ определения приближенных корней.
Про отделение корней это все, дальше идет уже процесс решения. Вот теоремка про решение.
Теорема: Если непрерывная функция f(x) принимает значения разных знаков на концах отрезка [α, β], т.е. f(α)∙f(β) < 0, то внутри этого отрезка содержится по меньшей мере один корень уравнения f(x) = 0, т.е. найдется хотя бы одно число ξ(α, β ) такое, что f(ξ) = 0.
Корень ξ заведомо будет единственным, если производная f'(x) существует и сохраняет постоянный знак внутри интервала (α, β), т.е. если f'(x) > 0 (или f'(x) < 0) при α < x < β. Процесс определения корней начинается с установления знаков функции f(x) в граничных точках x = a и x = b области существования решения.
SUMMARY ПО ВСЕМУ РЕШЕНИЮ УРАВНЕНИЙ (в целом тут весь вопрос без воды)
Обобщим:
Если удастся подобрать такие a и b, что:
1. f(a) ∙ f(b) < 0;
2. f(x) – непрерывная на [a, b] функция;
3. f(x) – монотонная на [a, b] функция;
то можно утверждать, что на отрезке [a, b] корень отделен.
Условия 1–3 – достаточные условия отделения корня, т. е. если эти условия выполняются, то корень отделен, но невыполнение, например, условий 2 или 3 не всегда означает, что корень не отделен.
Предложенный метод поиска отрезка [a, b] – аналитический способ отделения корня. Корень можно отделить и графически.
Второй этап решения уравнения – уточнение корня. Уточнить корень – значит найти его приближенное значение с заданной погрешностью ε.
Отображение f: X → X называется сжимающим, если существует такое число a ∈ [0,1), что для любых x, y ∈ X выполняется следующее неравенство:
d(f(x), f(y)) ≤ a ⋅ d(x, y).
Число a при этом называется коэффициентом сжатия.
Примеры:
(Про погрешности в 6 вопросе (?))
Итерационный процесс xk+1 = ϕ(xk) является сходящимся тогда, когда |ϕ`(x)| < 1.
Константа Липшица — числовая характеристика функции, которая определяет степень её "гладкости" и ограничивает скорость изменения. Она используется в численных методах для оценки устойчивости и сходимости алгоритмов.
Функция f: X → Y называется липшицевой, если существует константа L ≥ 0 такая, что:
||f(x1) - f(x2)||Y ≤ L ⋅ ||x1 - x2||X ∀x1, x2 ∈ X.
Наименьшая такая константа L называется константой Липшица функции f.
Скорость сходимости итерационного алгоритма показывает, как быстро последовательность приближений {xk} стремится к решению x*. В численных методах выделяют несколько типов сходимости, каждый из которых характеризуется своей скоростью.
Алгоритм сходится линейно, если существует константа C ∈ (0, 1) такая, что:
||xk+1 - x*|| ≤ C||xk - x*||.
Ошибка уменьшается в C раз на каждой итерации. Пример: метод простых итераций при |ϕ`(x*)| < 1.
Сходимость сверхлинейная, если:
= 0.
Ошибка уменьшается быстрее, чем линейно, но медленнее, чем квадратично. Пример: метод секущих.
Алгоритм сходится линейно, если существует константа M > 0 такая, что:
||xk+1 - x*|| ≤ M||xk - x*||2.
Пример: метод Ньютона.
Алгоритм сходится кубически, если существует константа K такая, что:
||xk+1 - x*|| ≤ K||xk - x*||3.
Пример: метод Хэлли.
Стабильность метода определяет, насколько он чувствителен к малым возмущениям (например, ошибкам округления или неточному начальному приближению).
Критерии стабильности:
Если малое изменение начального приближения x0 приводит к малому изменению решения x*, метод устойчив. Пример: метод Ньютона устойчив (стабилен), если f `(x*) 0 и x0 достаточно близко к x*.
Ошибки округления не должны накапливаться сильно. Пример: метод простых итераций xk+1 = ϕ(xk) устойчив, если |ϕ`(x*)| < 1.
Распространение ошибок в различных методах численного решения нелинейных уравнений:
xn+1 = ϕ(xn)
Теория сжимающих отображений — инструмент, позволяющий доказывать существование и единственность неподвижных точек отображений в полных метрических пространствах. Основная идея принадлежит Стефану Банаху и формулируется в виде принципа сжимающих отображений (или принципа Банаха):
Если T — сжимающее отображение на полном метрическом пространстве (X, d), то:
(априорная оценка)
(апостериорная оценка)
Аппроксимацией функции f(x) называется нахождение такой функции F(x), которая была бы близка к заданной. Критерии близости функций f(x) и F(x) могут быть различные. Аппроксимирующая функция не обязательно должна проходить через все точки. Происходит замена одних объектов другими, в каком-то смысле близкими к исходным, но более простыми. Пример аппроксимации: регрессия / МНК.
Общая погрешность аппроксимирующей функции может быть выражена как сумма локальных погрешностей в точках с координатами xi.
Если налагается условие строгого совпадения значений функций F(x) и f(x) в заданных точках xi, то данный вид аппроксимации называется интерполяцией. То есть интерполяция - способ нахождения промежуточных значений функции по имеющемуся дискретному набору значений.
В случае, если требуется получить аппроксимацию функции за пределами известного интервала, то данный вид аппроксимации называется экстраполяцией.
При глобальной интерполяции подбирается одна функция F(x), которая проходит через все известные точки заданного интервала . Пример: полином Лагранжа.
При локальной интерполяции функция строится отдельно для каждого интервала между соседними узлами. То есть f(x) интерполируется несколькими функциями . Примеры: кусочно-линейная интерполяция, кубическая сплайн интерполяция
Если использовать глобальную интерполяцию при n>7, то она будет неустойчивой (малые изменения в исходных данных приводят к значительным изменениям интерполирующей функции). Однако локальная интерполяция обладает тем недостатком, что интерполирующая функция в узлах стыковки многочлена имеет непрерывность только нулевого порядка. От этих недостатков свободна сплайн-интерполяция, которая требует непрерывности в узлах стыковки локальных многочленов по производным порядка один, два и т.д.
Ступенчатая интерполяция - за значение функции F(x) берется значение функции f в точке, ближайшей к рассматриваемой.
Линейная интерполяция - f(x) интерполируется по двум соседним точкам. Этот метод предполагает, что каждая пара соседних точек соединяется прямой линией
см. вопрос 19
Алгебраическим интерполяционным многочленом называется многочлен
степени не выше n, принимающий в точках
значения
Полином Лагранжа - многочлен минимальной степени, принимающий данные значения в данном наборе точек. Для n+1 точек существует только один интерполяционный многочлен L(x) степени не более n, для которого
Квадратичная интерполяция — это метод приближения функции с помощью квадратичного многочлена (параболы) по заданным точкам.
Алгоритм квадратичной интерполяции:
1. Определить отрезок [𝑥𝑖−1, 𝑥𝑖+1], содержащий 𝑥∗ (x* - точка, в которой требуется найти приближенное значение функции)
2. Решить систему для определения a, b, c
3. Подставить 𝑥∗ в функцию 𝜙(𝑥) при известных коэффициентах a, b, c .
Даны 3 точки (x0, y0), (x1, y1), (x2, y2). Требуется найти квадратичный многочлен, который проходит через эти точки.
Для этого составляем систему уравнений:
Находим a, b, c и получаем ответ, подставляя x* в
В целом сплайн-интерполяция очень похожа просто на локальную интерполяцию (см. вопрос 19). Отличается она тем, что требует непрерывности в узлах стыковки локальных многочленов по производным порядка один, два и т.д. (т.н. условие гладкости)
График интерполирующей функции при сплайн-интерполяции напоминает гибкую линейку, закрепленную в узловых точках интерполируемой функции. Поэтому сплайн-интерполяцию выгодно применять при небольшом числе узловых точек (до 5 – 7). (для сравнения: обычную многочленную интерполяцию осуществляют максимум по 3-4 узлам)
Сплайном степени m дефекта r называется (m − r) раз непрерывно дифференцируемая функция, которая на каждом отрезке [хi − 1, хi], i = 1, 2,... n, представляет собой многочлен степени m.
Виды сплайнов: линейные, квадратичные, кубические.
Наиболее популярными являются кубические сплайны (см. вопрос 26 (там больше инфы, копипаст из презы))
Полином Лагранжа - многочлен минимальной степени, принимающий данные значения в данном наборе точек (т.е. проходящий через заданные точки). Для n+1 точек существует только один интерполяционный многочлен L(x) степени не более n, для которого
Свойства базисных полиномов :
Рассмотрим интерполяцию кубическими сплайнами 𝜙(IV)(𝑥) = 0 – группу сопряженных кубических многочленов, в местах сопряжения которых первая и вторая производные непрерывны. Чтобы построить кубический сплайн, необходимо задать коэффициенты, которые единственным образом определяют кубический многочлен в промежутке между данными точками. Если в качестве функции (x) выбрать полином, то степень полинома должна быть не выше третьей. Этот полином называют кубическим сплайном, который на каждом интервале записывают в виде: 𝑆𝑖(𝑥) = 𝑎0 + 𝑎1(𝑥 − 𝑥𝑖−1) + 𝑎2(𝑥 − 𝑥𝑖−1)2 + 𝑎3(𝑥 − 𝑥𝑖−1)3 , где ai – коэффициенты сплайна; i = 1,2,..., – номер интервала (номер сплайна).
В отличие от полиномиальной интерполяции, когда вся аппроксимирующая функция описывается одним полиномом, при сплайновой интерполяции на каждом интервале строится отдельный полином (x) третьей степени со своими коэффициентами. Аппроксимирующая функция F(x) представляет собой последовательность сплайнов «сшитых» между собой в точках, соответствующих узловым значениям аппроксимируемой функции f(х). Для определения коэффициентов ai , bi , ci , di на всех n элементарных отрезках необходимо получить 4n уравнений. Эти уравнения получаются из следующих условий “сшивания” соседних сплайнов.
Для определения 4 х n коэффициентов имеются следующие условия в узлах интерполяции:
1. Условие интерполяции 𝑆(𝑥𝑖) = 𝑦𝑖 , 𝑖 от 0 до n;
2. Непрерывность сплайнов 𝑆(𝑥𝑖 − 0) = 𝑆(𝑥𝑖 + 0), 𝑖 от 1 до 𝑛 − 1;
3. Непрерывность производных 1-го порядка 𝑆′(𝑥𝑖 − 0) = 𝑆′(𝑥𝑖 + 0), 𝑖 от 1 до 𝑛 − 1;
4. Непрерывность производных 2-го порядка 𝑆′′(𝑥𝑖 − 0)=𝑆′′(𝑥𝑖 + 0), 𝑖 от 1 до 𝑛 − 1;
5. 𝑆′′(𝑥0) = 0;
6. 𝑆′′(𝑥𝑛) = 0.
Непрерывность первой производной означает, что соседние сплайны в узловых точках имеют общую касательную. Непрерывность второй производной означает, что соседние сплайны в узловых точках имеют одинаковую кривизну. Эта система равенств содержит 2n – 2 уравнений. Кроме перечисленных условий, необходимо задать условия на концах отрезка, то есть в точках x0 и xn . В общем случае эти условия определяются конкретной задачей. Если за пределами интервала интерполяции экстраполирующая функция представляет собой прямую линию, то это линейная экстраполяция. Следовательно, исходя из условий непрерывности второй производной, запишем еще два равенства: 𝜙0′′(𝑥0) = 0 и 𝜙𝑛′′(𝑥𝑛) = 0 Если за пределами интервала интерполяции экстраполирующая функция представляет собой кубический или квадратический полином, то это кубическая или параболическая экстраполяция.
В презе такого нет, так что не очень понятно, что именно здесь требуется. Но вот список от дипсика:
Система вида Ax=b решается через:
L — нижнетреугольная,
U — верхнетреугольная.
A = QR где QTQ = I, R — верхнетреугольная
A=UΣVT
где U,V — ортогональные, Σ — диагональная с сингулярными числами.
Единственное, что я нашел в презе это методы линейной алгебры для плотных матриц.
Вот копипаст слайда:
Методы линейной алгебры для плотных матриц (DLA, Dense Linear Algebra) играют ключевую роль в самых различных научных и инженерных приложениях:
Линейные системы: Решение Ax = b
• Вычислительная электродинамика; материаловедение; приложения, использующие граничные интегральные уравнения; обтекание крыла воздушным потоком; течение жидкости вокруг и т.д.
Метод наименьших квадратов: Найти x для минимизации ||Ax - b||
• Вычислительная статистика (например, линейный метод наименьших квадратов), эконометрика; теория управления; обработка сигналов; подгонка кривых и т.д.
Задачи на собственные значения: Решение Ax = λx
• Вычислительная химия; квантовая механика; материаловедение; распознавание лиц; метод главных компонент (PCA); интеллектуальный анализ данных; маркетинг; алгоритм Google PageRank; спектральная кластеризация; вибрационный анализ; сжатие данных и т.д.
Сингулярное разложение (SVD): A = U Σ V* (Au = σv и A*v = σu)
• Поиск информации; веб-поиск; обработка сигналов; анализ больших данных; аппроксимация матриц низкого ранга; минимизация методом наименьших квадратов; псевдообратная матрица и т.д.
Множество вариаций в зависимости от структуры A
• Матрица A может быть: симметричной, положительно определённой, трёхдиагональной, Гессенберга, ленточной, разрежённой с плотными блоками и т.д.
Важность методов для плотных матриц
• Методы линейной алгебры для плотных матриц имеют решающее значение для разработки решателей для разреженных систем.
Умножение матриц – одна из ключевых операций в линейной алгебре, машинном обучении и научных вычислениях. Для его эффективной реализации создано огромное количество методов.
1. Наивное умножение (стандартный алгоритм).
Пусть есть матрица размера
и матрица
размером
. Матрица
– результат произведения размера
:
Для умножения матриц требуется (при ):
умножений и
суммирований
Сложность наивного алгоритма:
.
2. Блочное умножение.
С целью повышения эффективности использования кэш-памяти CPU существует алгоритм блочного умножения матриц, в котором результирующая матрица формируется поблочно с использованием известной формулы , либо её более быстрых аналогов, а размер обрабатываемых данных на каждой итерации не превышает ёмкость кэш-памяти. Сложность:
.
Размер блока напрямую зависит от архитектуры вычислительной системы и определяет время выполнения умножения. Аналогичный подход применяется при умножении матриц с использованием GPU с оптимизацией использования разделяемой памяти ограниченного объёма.
(по сути то же наивное умножение, но блоками в целях оптимизации затрат памяти и времени)
3. Алгоритм Штрассена (см. вопрос 29).
4. Алгоритм Копперсмита–Винограда.
Алгоритм Копперсмита–Винограда – улучшенная версия Штрассена с вычислительной сложностью . Обладает лучшей асимптотикой среди известных алгоритмов умножения матриц.
На практике алгоритм Копперсмита–Винограда не используется, так как он имеет очень большую константу пропорциональности и начинает выигрывать в быстродействии у других известных алгоритмов только для матриц, размер которых превышает память современных компьютеров.
5. Реализация в numpy.
NumPy использует BLAS (Basic Linear Algebra Subprograms) – высокооптимизированные низкоуровневые библиотеки, предназначенные для выполнения основных операций линейной алгебры.
Сложность: .
Почему NumPy эффективен?
Алгоритм Штрассена – рекурсивный алгоритм, предназначенный для быстрого умножения матриц, соответствует идее разделяй и властвуй (т.е. основан на разбиении задачи на более мелкие подзадачи, решение которых потом объединяется для получения решения исходной задачи).
В отличие от традиционного алгоритма умножения матриц (по формуле ), имеющего сложность
, сложность алгоритма Штрассена:
, что даёт выигрыш на больших плотных матрицах.
Если добавить к матрицам и
одинаковые нулевые строки и столбцы, их произведение станет равно матрице
с теми же добавленными строками и столбцами. Поэтому можно рассматривать только матрицы размера
, а другие случаи сводить к этому добавлением нулей, отчего
может увеличиться лишь вдвое.
Пусть A, B – матрицы размера . Их можно представить как блочные матрицы (матрицы из 4-х блоков) размера (
) из (
)–матриц:
По принципу блочного умножения, матрица выражается через их произведение:
где в правой части происходит восемь умножений матриц размера .
Для получения итоговой матрицы Штрассен предложил следующий вариант с 7 умножениями и 18 сложениями:
где:
Алгоритм Штрассена:
Несмотря на то, что алгоритм Штрассена является асимптотически не самым быстрым из существующих алгоритмов быстрого умножения матриц, он проще программируется и эффективнее при умножении матриц относительно малого размера, поэтому именно он чаще используется на практике. Метод Штрассена становится быстрее наивного алгоритма, если .
Сингулярное разложение (Singular Value Decomposition, SVD) – определённого типа разложение прямоугольной матрицы , которое имеет широкое применение и позволяет вычислять сингулярные числа матрицы (они же корни собственных чисел), а также левые и правые сингулярные векторы матрицы (в том числе работает для прямоугольных и вырожденных матриц).
где – диагональная матрица, элементы главной диагонали которой – сингулярные числа матрицы
;
,
– ортогональные матрицы, элементы которых – левые и правые сингулярные вектора соответственно.
Сингулярное разложение существует для любой матрицы. Его также можно считать способом приведения данной матрицы к диагональному виду с помощью двух унитарных преобразований: .
Теорема. Пусть – матрица полученная из
заменой части диагональных элементов нулями:
. Тогда
.
Последнее равенство можно переписать в ещё более экономичном виде: , где матрица
– та же матрица
с первыми
столбцами,
– та же матрица
с первыми
строками,
– та же диагональная матрица
обрезанная до размера
. Таким образом, при помощи SVD мы можем решать задачу сжатия информации (выделения главной информации, удаление шума).
Алгоритм SVD для матрицы :
(стоит также заметить, что PCA – применение SVD к центрированным данным с последующей аппроксимацией на )
Пусть A – действительная числовая квадратная матрица размера (). Ненулевой вектор
размера (
), удовлетворяющий условию
называется собственным вектором матрицы . Число
в равенстве называется собственным значением. Говорят, что собственный вектор
соответствует (принадлежит) собственному значению
.
Последнее равенство равносильно однородной относительно системе:
Система имеет ненулевое решение для вектора (при известном
) при условии
. Это равенство есть характеристическое уравнение:
.
где – характеристический многочлен
-й степени.
Корни характеристического уравнения являются собственными (характеристическими) значениями матрицы
, а соответствующие каждому собственному значению
, ненулевые векторы
, удовлетворяющие системе
, являются собственными векторами.
Определение в контексте линейных операторов.
Если в линейном пространстве каждому вектору
по некоторому правилу
поставлен в соответствие вектор
этого же пространства, то говорят, что в данном пространстве задан линейный оператор
. Т.о., линейный оператор – функция, трансформирующая объект в пространстве.
Условия линейности оператора: для всех :
Собственный вектор – понятие, определяемое для произвольного линейного оператора как ненулевой вектор, применение к которому оператора дает коллинеарный вектор – тот же вектор, умноженный на некоторое скалярное значение (которое может быть равно 0). Скаляр, на который умножается собственный вектор под действием оператора, называется собственным числом (значением) линейного оператора, соответствующим данному собственному вектору. Одним из представлений линейного оператора является квадратная матрица, поэтому собственные векторы и собственные значения часто определяются в контексте использования таких матриц.
У каждой матрицы размера есть от 0 до
собственных чисел и 0 или
собственных векторов.
Задача линейной алгебры состоит в нахождении собственных значений и собственных векторов заданной матрицы.
Особенности собственных векторов и значений:
Спектральное разложение матрицы (разложение матрицы по собственным векторам, также называемое каноническим разложением) – это представление квадратной матрицы в виде произведения трёх матриц:
где – матрица, столбцы которой являются собственными векторами матрицы
;
– диагональная матрица с соответствующими собственными значениями на главной диагонали;
– матрица, обратная матрице
.
Теорема: – нормальная матрица, тогда и только тогда, когда
, где
унитарна и
диагональна.
Любая нормальная матрица – унитарно диагонализуема. Это означает, что она может быть приведена к диагональному виду с помощью унитарной матрицы . Другими словами, каждая нормальная матрица имеет ортогональный базис из собственных векторов.
Спектральное разложение может использоваться для нахождения собственных значений и собственных векторов матрицы, решения систем линейных уравнений, обращения матрицы, нахождения определителя матрицы и вычисления аналитических функций от матриц. Спектр – множество собственных значений матрицы.
Для динамических систем с матрицей , спектр может много сообщить о поведении системы (например, о её устойчивости). Однако для не нормальных матриц, спектр может быть неустойчивым относительно малых возмущений матрицы. Для измерения подобных возмущений было разработана концепция псевдоспектра. (обобщение спектра для не нормальных матриц). Формально псевдоспектр определяется как:
.
Для малых и нормальных
это круги вокруг собственных значений, для не нормальных матриц, структура может сильно отличаться. Псевдоспектр находится через сингулярное разложение (SVD) матрицы для разных
. Для неквадратных матриц вместо спектрального разложения также используют SVD.
Разрешив матричное уравнение относительно диагональной матрицы, можно получить другое соотношение:
.
Диагональную матрицу также называют матрицей линейного преобразования в базисе из собственных векторов. Одному и тому же линейному преобразованию в разных базисах в общем случае соответствуют разные матрицы (в частности, матрицы
и
в нашем примере). И наиболее удобным из них как раз и является базис из собственных векторов (в случае его существования).
Более того, все матрицы конкретного линейного преобразования в одном и том же векторном пространстве имеют один и то же характеристический многочлен.
Слайды 253-255
Задача Google PageRank состоит в том, чтобы ранжировать веб-страницы в поисковой выдаче Google по степени их “важности” и “авторитетности”.
Веб-страницы можно представить как ориентированный граф , где:
Обозначим:
Тогда базовая формула PageRank выглядит так:
То есть важность страницы определяется как сумма вкладов всех страниц, ссылающихся на неё. Каждая такая страница делится своей “важностью” поровну между всеми своими ссылками.
Можно записать и в матричном виде:
У матрицы собственное значение, равное 1, она левостохастическая, то есть сумма её столбцов равна 1.
Численными методами ищем вектор .
Слайды 244-245
Из определения:
Нулевой вектор нас не интересует, поэтому равенство выполняется, если матрица вырожденная. То есть её определитель равен нулю . Определитель матрицы представляет собой многочлен степени и называется характеристическим многочленом, корни которого, представляют собой собственные значения матрицы . Задача поиска собственных значений матрицы сводится к задаче поиска корней многочлена.
Слайды 258-264
Выжимка из слайдов:
Степенной метод позволяет найти наибольшее по модулю собственное значение, ну и бонусом соответствующий ему собственный вектор.
Сам метод ( - начальное приближение собственного вектора):
Приближение собственного значения выражается так (скалярное произведение):
Это приближение можно использовать для оценки ошибки на каждом шаге:
При этом в методе используется умножение матрицы на вектор, сложность которого .
Слайды 267-269
Теорема Гершгорина:
Все собственные значения матрицы лежат внутри объединения кругов (дисков) Гершгорина .
Круги Гершгорина представляют собой круги в комплексной плоскости с центрами в диагональных элементах и радиусами - сумма модулей внедиагональных элементов в строке :
Слайды 294-297
Теорема Шура:
Любая квадратная матрица над комплексными числами может быть представлена в виде:
где:
A – нормальная матрица, тогда и только тогда, когда A = UΛU* , где U унитарна и Λ диагональна.
Матрица A называется нормальной матрицей, если AA* = A*A.
Любая нормальная матрица – унитарно диагонализуема. Это означает, что она может быть приведена к диагональному виду с помощью унитарной матрицы U. Другими словами, каждая нормальная матрица имеет ортогональный базис из собственных векторов.
Пусть U унитарная матрица, то есть U*U = I
Для Эрмитовых матриц собственные значения всегда действительны.
Любая эрмитова матрица диагонализуема
Если матрица 𝐴 симметричная (эрмитова), то 𝐴=𝐴∗ , тогда 𝐻=𝐻∗ и верхне-гессенбергова форма оказывается трёхдиагональной матрицей.
Любая эрмитова матрица может быть приведена к трёхдиагональной форме с помощью отражений Хаусхолдера.
Пусть 𝑄∗𝐴𝑄 = 𝐻 верхне-гессенбергова форма матрицы. Тогда первый столбец матрицы 𝑄 определяет все остальные её столбцы. Он может быть найден из следующего уравнения: 𝐴𝑄 = 𝑄𝐻
Матрица 𝐴 имеет верхне-гессенбергову форму, если 𝑎_𝑖𝑗 = 0, при 𝑖 ≥ 𝑗 + 2.
С помощью отражений Хаусхолдера можно привести любую матрицу к верхнегессенберговой форме: 𝑈∗𝐴𝑈=𝐻.
Если матрица приведена к верхне-гессенберговой форме, то одна итерация QR алгоритма имеет сложность O(n^2) операций.
Также верхне-гессенбергова форма матрицы сохраняется после выполнения одной итерации QR алгоритма.
Матрица 𝐴 имеет верхне-гессенбергову форму, если 𝑎𝑖𝑗 = 0, при 𝑖 ≥ 𝑗 + 2.
С помощью отражений Хаусхолдера можно привести любую матрицу к верхнегессенберговой форме: 𝑈∗𝐴𝑈=𝐻.
Отношение Рэлея (или коэффициент Рэлея) — это скалярная величина, связанная с матрицей и вектором, которая широко используется в линейной алгебре и численных методах. Оно определяется как отношение двух квадратичных форм, например, для матрицы A и ненулевого вектора x :
где (Ax, x) — скалярное произведение Ax и x, а (x, x) — норма вектора x .
Основные свойства и применение:
1. Собственные значения и теорема минимакс
Отношение Рэлея достигает своего минимума и максимума на собственных векторах матрицы A, соответствующих минимальному и максимальному собственным значениям соответственно. Это положено в основу теоремы Куранта-Фишера, которая связывает отношение Рэлея с собственными числами матрицы.
2. Алгоритмы вычисления собственных значений
Отношение Рэлея используется в итерационных методах, таких как метод Рэлея (метод обратной итерации с отношением Рэлея). Этот метод обладает высокой скоростью сходимости и позволяет находить собственные значения и векторы матриц, особенно в сочетании с другими подходами (например, QR-алгоритмом) .
3. Формализация в математических задачах
Для эрмитовых матриц отношение Рэлея позволяет оценить погрешность приближённых собственных значений. Ошибка в отношении Рэлея напрямую связана с близостью вектора к истинному собственному вектору .
Зазор между собственными значениями матрицы — это разность между двумя соседними собственными значениями (например,\lambda_i - \lambda_j). Он играет ключевую роль в устойчивости и скорости сходимости алгоритмов вычисления собственных значений. Чем больше зазор, тем проще отделить собственные значения друг от друга, что особенно важно для численных методов .
Алгоритмы со сдвигами (shifting) используют модификацию матрицы A на величину \sigma (например, A - \sigma I), чтобы сместить собственные значения на \lambda_i - \sigma, сохраняя собственные векторы неизменными. Этот подход позволяет фокусироваться на определённой части спектра или улучшать сходимость методов. Например, в методе QR со сдвигами выбор \sigma, близкого к \lambda_i, ускоряет вычисление близких собственных значений, особенно при малых зазорах между ними .
Для симметричных матриц алгоритм Ланцоша использует сдвиги для ускорения поиска собственных значений в разреженных матрицах. Здесь эффективность зависит от величины зазора: большие зазоры позволяют быстрее сходиться к точным решениям.
Таким образом, зазоры и сдвиги тесно связаны в задачах анализа матриц, где сдвиги служат инструментом для оптимизации работы с собственными значениями, особенно в сложных случаях с близкими значениями спектра.
Верхнегессенберговая форма:
Аналогично нижняя матрица Хессенберга:
Симметричная матрица:
Единичная матрица I ⇔ Identity Matrix ⇔ матрица с 1 по главной диагонали и нулями в остальных клетках
Эрмитово сопряженная матрица U* ⇔ Транспонированная U с элементами замененными на комплексно сопряженные им (мнимая часть с i умножается на -1)
Унитарная матрица U ⇔
Ортогональная матрица Q ⇔
Общий смысл:
Существует преобразование векторов матрицы, когда зануляются элементы под поддиагональю и собственные значения матрицы не меняются.
Зануление происходит отражением вектора (Hx). Преобразование Хаусхолдера устроено так, что, преобразуя очередной вектор (столбец) матрицы, предыдущие преобразования не портятся. Зануление под диагональю происходит в других алгоритмах (i.e. QR). Почему не занулять сразу под диагональю - QR вычислительно сложный, и эффективнее сначала получить верхнегессенберговую матрицу, потом уже получить треугольную.
При использовании отражения Хаусхолдера на симметричной матрице получается трехдиагональная (на главной диагонали, под и над ней числа, остальное нули).
Отражение Хаусхолдера - матрица H, осуществляющая отражение вектора через гиперплоскость (Hx - отраженный вектор x через гиперплоскость)
- вектор нормали к гиперплоскости
, - подвектор, - первый элемент подвектора, ||x|| - евклидова норма вектора без квадрата, - базисный вектор (единица первый элемент, все остальное нули)
Отражение Хаусхолдера (H) ⇔
Свойства H:
Виды сходимости:
- последовательность, сходящаяся к x*;
Линейная:
Квадратичная:
Кубическая:
Сходимость алгоритма:
Линейная для исходного алгоритм
Квадратная со сдвигами с несимметричной матрицей
Кубическая со сдвигами с симметричной матрицей
Сложность алгоритма:
QR разложение плотной матрицы NxN (итерация): , итоговая сложность , k - количество итераций
QR разложение трёхдиагональной матрицы NxN (итерация): , со сдвигами число итераций O(n), итоговая сложность
Почему:
Трехдиагональная:
При QR разложении для плотной матрицы обнуляются все элементы для столбца под диагональю, для трехдиагональной это всего 1 элемент.
Сдвиги:
Сдвиги увеличивают относительную разницу между собственными значениями
QR алгоритм чувствителен к отношению собственных чисел. Чем ближе к нулю тем быстрее сходимость.
Примеры сдвигов:
Рэлея: вычитаем последний элемент
Уилкинсона: вычисляем собственные значения матрицы 2x2 внизу справа через дискриминант, выбираем значение ближайшее к
Метод главных компонент ⇔ PCA ⇔ Principal Component Analysis - метод понижения размерности данных и удаления линейных зависимостей путем перевода данных в декартову систему координат, где базисные вектора - собственные вектора.
Реализация для собственных чисел:
1. Стандартизируем данные
2. Вычисляем ков. матрицу
3. Находим собственные значения и вектора ков. матрицы
4. Сортируем по невозростанию собственных значений. Собственные значения показывают какая у компоненты (пара собственное значение/вектор) дисперсия. Чем больше дисперсия компоненты, тем она важнее.
5. Выбираем k первых компонент, они называются главными.
6. Проецируем исходные данные в систему, где базисные вектора - главные компоненты - собственные вектора, T - спроецированные данные
Реализация через SVD:
1. Центрируем данные
2. Вычисляем SVD
3. Находим собственные значения ков. матрицы - сингулярное значение, - собственное значение ковариационной матрицы; Вектора для компонент - V из разложения SVD
4. Сортируем по невозростанию собственных значений. Собственные значения показывают какая у компоненты (пара собственное значение/вектор) дисперсия. Чем больше дисперсия компоненты, тем она важнее.
5. Выбираем k первых компонент, они называются главными.
6. Проецируем исходные данные в систему, где базисные вектора - главные компоненты - собственные вектора, T - спроецированные данные
Через SVD устойчивее, потому что не вычисляется - если X имеет малый ранг или содержит маленькие числа значения будут сравнимы с ошибками округления
Выбор k количества компонент:
Обычно выбирают n так, чтобы во включенных компонентах было не меньше 95% дисперсии:
⇔ левые сингулярные векторы
⇔ диагональная матрица сингулярных значений
⇔ правые сингулярные значения
- ортогональные матрицы
Разложение SVD обобщает понятие собственных значений на прямоугольные матрицы, где напрямую собственные значения не найти.
Применения: Поиск информации; веб-поиск; обработка сигналов; анализ больших данных; аппроксимация матриц низкого ранга; минимизация методом наименьших квадратов; псевдообратная матрица и т.д.
Численными методами:
1. Находим
2. Находим собственные значения и вектора у (QR-алг)
3. Находим сингулярные значения , составляем
4. Вычисляем сингулярные векторы:
V = собственные вектора
U =
Пример разложения в презентации слайд 340
47. Плотные и разреженные матрицы, способы хранения разреженных матриц.
Плотные матрицы - матрицы, где бо́льшая часть элементов ненулевая
Разреженные матрицы - матрицы, где бо́льшая часть элементов нулевая
* Нет четкого количества ненулевых элементов, что делает матрицу разреженной
Т.к. бо́льшая часть разреженной матрицы - нули, их можно игнорировать, тем самым сэкономив место и ускорив их последующую обработку.
Форматы хранения:
* Coordinate Format (COO)
Хранит ненулевые элементы в виде трёх массивов:
values — значения ненулевых элементов,
row_indices — номера строк,
col_indices — номера столбцов.
Плюсы: Простота добавления элементов.
Минусы: Неэффективен для арифметических операций.
* Compressed Sparse Row (CSR)
Оптимизирован для строк.
Использует три массива:
values — ненулевые элементы,
col_indices — индексы столбцов,
row_ptr — указатели на начало строк в values и col_indices.
Плюсы: Эффективен для умножения матрицы на вектор.
Минусы: Долго добавлять элементы. (Если добавить новый элемент в строку i, то все indptr[j] для j > i нужно увеличить на 1. Это O(N) операция (где N — число строк).)
* Compressed Sparse Column (CSC)
Аналог CSR, но для столбцов.
Три массива:
values — ненулевые элементы,
row_indices — индексы строк,
col_ptr — указатели на начало столбцов.
Плюсы: Эффективен для операций по столбцам.
Минусы: Долго добавлять элементы (аналогично CSR)
* Diagonal Storage (DIA)
Используется для матриц с диагональной структурой.
Хранит ненулевые элементы вдоль диагоналей.
Плюсы: Эффективен для СЛАУ с диагональным преобладанием.
Минусы: Не подходит для произвольных разреженных матриц.
* ELLPACK (ELL) (LIL в scipy)
Хранит ненулевые элементы в двумерном массиве, дополняя короткие строки.
Плюсы: Хорош для GPU-оптимизаций.
Минусы: Неэффективен при сильном разбросе длины строк.
Обыкновенное дифференциальное уравнение (ОДУ) – это уравнение, связывающее неизвестную функцию 𝑦 = 𝑦(𝑥) с её производными по одной независимой переменной 𝑥. Формально ОДУ записывается как: 𝐹(𝑥, 𝑦, 𝑦′, 𝑦″, … , ) = 0,
где 𝑦′ , 𝑦″ , … , — первая, вторая, ..., 𝑛-ная производные функции 𝑦, а 𝐹 — заданное выражение. Порядок ОДУ определяется наивысшей производной, входящей в уравнение.
Численное дифференцирование – процесс приближённого вычисления производной функции на основе её дискретных значений.
Важность:
– Используется, когда аналитические производные недоступны (например, функция задана сложным выражением или известна только по точкам).
– Применяется в задачах с дискретными данными (например, экспериментальные измерения).
Цель: Вычислить 𝑓′() в точке
с заданной точностью.
Основные понятия:
– Сетка: Набор точек на отрезке [𝑎, 𝑏], где известны 𝑓(
)
– Шаг сетки: =
−
, может быть постоянным или переменным
– Точность: Ошибка приближения ≤ , где 𝐶 – константа, ℎ – шаг, 𝑡 – порядок точности
P.S. Представьте, что у вас есть график функции, но вы знаете её значения только в некоторых точках. Численное дифференцирование помогает найти наклон этого графика (производную) в этих точках, используя разницу между значениями функции. Это как если бы вы измеряли скорость автомобиля по его положению в разные моменты времени.
Типы ОДУ:
- По порядку: первого порядка (𝑦′), второго порядка (𝑦″) и т.д.
- По линейности: линейные (производные входят линейно) и нелинейные.
- По типу: автономные (не зависят явно от 𝑥) и неавтономные.
Примеры ОДУ:
1. Первого порядка: = −𝑘𝑦, описывающее экспоненциальный распад, где 𝑘 > 0.
2. Второго порядка: , уравнение гармонического осциллятора,
моделирующее колебания.
Методы прямой, обратной и центральной разностей используются для численного приближения производных в дифференциальных уравнениях, заменяя их разностными аналогами на сетке, чтобы упростить решение.
Метод прямой разности:
Точки: ,
.
Разложение Тейлора:.
Приближение:.
Остаточный член:
остаток =
Ошибка:, где
Точность: O(h).
Метод обратной разности:
Точки: ,
.
Приближение:.
Остаточный член:
остаток =
Ошибка аналогична прямой разности с подстановкой нового приближения и остатка.
Точность: O(h).
Прямая разность – как будто вы смотрите, насколько функция выросла вперёд от точки, и делите на расстояние. Обратная — то же самое, но назад. Ошибка зависит от того, насколько функция “кривая” (вторая производная), и уменьшается, если шаг маленький. Остаточный член − показывает, что мы отбросили часть информации о кривизне функции. Чем больше вторая производная и шаг h, тем больше ошибка.
Метод центральной разности:
Точки: ,
.
Для равномерной сетки (=h):
.
Вывод:
Разложения Тейлора:.
.
Вычитание:.
Приближение:.
Остаточный член:
остаток =
Ошибка:, где
.
Точность: O().
Центральная разность смотрит на изменение функции сразу с двух сторон точки, что делает её точнее. Ошибка меньше, потому что она зависит от , а не просто ℎ. Остаток
возникает из-за третьей производной, которую мы игнорируем. Если функция почти прямая (маленькая 𝑓‴), ошибка будет очень маленькой.
Требования:
Прямая разность: Вторая производная должна быть непрерывной.
Центральная разность: Третья производная должна быть непрерывной.
Замечание: Гладкость функции критически влияет на точность. Для функций с разрывами или резкими изменениями точность может снижаться. Чем более гладкая функция (меньше резких скачков), тем лучше работают эти методы. Остаточные члены показывают, от чего зависит ошибка: от шага и производных.
Остаточные слагаемые возникают из разложения Тейлора, когда мы отбрасываем высшие члены. Для прямой разности ошибка линейна (ℎ), для центральной — квадратична ().
Локальные погрешности – погрешности, образовавшиеся на каждом шаге,
Глобальная (накопленная) погрешность – погрешность, образовавшаяся за несколько шагов.
Порядок глобальной погрешности относительно шага интегрирования на единицу ниже, чем порядок локальной погрешности. Таким образом, глобальная погрешность метода Эйлера имеет порядок p = 1: = C ∙ h, где C – некоторая постоянная.
Порядок численного метода для решения ОДУ определяется порядком его глобальной погрешности. Он может быть также определен, как количество вычислений значения производной f(x, y) искомой функции на каждом шаге. В соответствии с этим метод Эйлера является методом первого порядка.
Правило Симпсона – это численный метод приближённого вычисления определённых интегралов, основанный на квадратичной интерполяции подынтегральной функции. Его суть заключается в том, что вместо интегрирования исходной функции мы заменяем её на параболу, проведённую через три точки на равномерной сетке, и вычисляем площадь под этой параболой аналитически. Формула Симпсона для отрезка
[a,b] имеет вид:
.
Этот метод особенно эффективен, когда подынтегральная функция гладкая или её можно разбить на такие отрезки, где она ведёт себя почти как квадратичная. Правило Симпсона обеспечивает высокую точность — его погрешность имеет порядок O() для одного отрезка и O(
) для составного правила (где h — шаг разбиения), что значительно лучше методов прямоугольников или трапеций.
Применять его стоит, когда требуется высокая точность при относительно небольшом количестве вычислений, например, при интегрировании аналитических функций или в инженерных расчётах. Однако если функция имеет резкие колебания или разрывы, лучше использовать другие методы или предварительно разбивать интервал на части.
В более широком смысле "правило Симпсона" иногда называют принципом, что использование квадратичной аппроксимации часто даёт оптимальный баланс между точностью и вычислительными затратами. Отсюда возможная связь с анализом ошибок.
Ошибка сокращения (или ошибка усечения) возникает из-за приближённого характера численных методов, когда бесконечные процессы заменяются конечными или сложные функции — более простыми. Например, при вычислении производной с помощью разностной схемы отбрасываются старшие члены ряда Тейлора, что приводит к неточности. Эта ошибка зависит от выбранного метода и шага вычислений: чем точнее алгоритм и мельче шаг, тем она меньше.
Однако уменьшение шага может усилить другой тип погрешности — ошибку округления, связанную с конечной точностью представления чисел в компьютере. При выполнении арифметических операций (особенно при вычитании близких чисел или сложении значений сильно разного масштаба) младшие значащие разряды теряются из-за ограниченной разрядности мантиссы, что искажает результат.
Накопление ошибок – это процесс, при котором малые погрешности на каждом шаге алгоритма суммируются или усиливаются, приводя к значительному отклонению итогового значения. Например, при последовательном сложении тысяч чисел даже очень маленькие округления могут существенно изменить сумму.
Для борьбы с этим используют специальные алгоритмы, такие как алгоритм Кахана. Его идея заключается в отслеживании и компенсации потерянных из-за округления частей чисел. На каждом шаге кроме основного суммирования вычисляется "погрешность" – разница между тем, что должно было добавиться, и тем, что действительно добавилось с учётом ограниченной точности. Эта погрешность затем учитывается на следующей итерации. Таким образом, алгоритм Кахана значительно снижает ошибку накопления, особенно в задачах с большим количеством операций, например, при вычислении скалярных произведений или численном интегрировании.
Полностью устранить ошибки невозможно, но грамотный выбор методов (например, алгоритм Кахана для суммирования) позволяет минимизировать их влияние. Это особенно критично в долгих вычислениях, таких как решение дифференциальных уравнений или моделирование физических процессов, где накопленные погрешности могут привести к качественно неверным результатам.
Сетка дифференцирования – это набор точек на отрезке [𝑎, 𝑏], где для каждой точки известны соответствующие значения функции 𝑓(
.
Пример сетки: сетка на [0, 1] с шагом h = 0.1: = {0, 0.1, 0.2 … 1}, где для каждой точки
известны соответствующие значения функции.
Значения функции могут быть заданы аналитически (формулой), таблично или являться результатами вычислений. Численные методы дифференцирования используют эти значения 𝑓(, чтобы приблизить производные, например:
где
и
- известные значения функции в соседних узлах сетки.
Шаг сетки: =
−
, может быть постоянным или переменным.
Типы сеток:
– Равномерная: = ℎ = const.
– Неравномерная: =
−
варьируется.
Фазовый портрет – это графический способ представления всех возможных траекторий системы дифференциальных уравнений в фазовом пространстве. Он помогает понять поведение системы без необходимости решать уравнения аналитически.
Фазовое пространство – пространство состояний системы. Для системы из двух уравнений это двумерная плоскость, где оси соответствуют переменным системы (например, (x) и (y)).
Траектории – кривые, показывающие, как изменяется состояние системы со временем при разных начальных условиях.
Особые точки – состояния, где производные равны нулю. Они определяют устойчивость и тип поведения системы.
Примеры (в matploblib можно и не вставлять):
Что показывает фазовый портрет?
- Эволюцию системы во времени.
- Устойчивые и неустойчивые состояния.
- Типы поведения: колебания, затухание, рост.
Типы особых точек:
- Узел: траектории сходятся к точке (устойчивый узел) или расходятся от неё (неустойчивый узел).
- Фокус: траектории закручиваются в спираль (если к центру - то в устойчивую спираль, если от центра - то в неустойчивую).
- Седло: траектории приближаются по одним направлениям и удаляются по другим.
Начиная со слайда 375
Для уравнения dy/dt = f(t, y): y_{n+1} = y_n + h * f(t_n, y_n}
Для уравнения dy/dt = f(t, y): y_{n+1} = y_n + h * f(t_{n+1}, y_{n+1})
Начиная со слайда 533
Многошаговые методы — это численные методы, в которых значение y_{n+1} вычисляется не только на основе текущего значения y_n, как в одношаговых методах (например, метод Эйлера), а с использованием нескольких предыдущих значений y_n, y_{n−1}, …
2го порядка: y_{n+1} = y_n + h/2[3f(t_n, y_n) - f(t_{n-1}, y_{n-1}]
2го порядка: y_{n+1} = y_n + h/2[f(t_{n+1}, y_{n+1}) - f(t_n, y_n)]
Также существуют многошаговые методы вида предиктор-корректор. Их суть в следующем: на каждом шаге вычисляются:
Предиктор - с помощью явного метода вычисляется первое приближение в новом узле y_{n+1}^{(0)};
Корректор - с помощью неявного метода вычисляются последующие приближения функции в новом узле y_{n+1}^{(1)}, y_{n+1}^{(2)}, …
В презе не было ВООБЩЕ - инфа от qwen
Адаптивный шаг — это стратегия выбора шага h_n на каждом этапе численного интегрирования, при которой шаг автоматически уменьшается в областях быстрого изменения решения и увеличивается в областях гладкости , чтобы сохранить заданную точность и повысить эффективность вычислений.
Пример — Метод Рунге–Кутты–Фельберга (RKF45):
Формула для вычисления нового шага:
где — допустимая ошибка (задаётся пользователем);
— оценка локальной погрешности;7
— порядок метода (Эйлер - 1, Рунге-Кутты(4) - 4, RKF(45) - 5)
Начиная со слайда 546
Невязка определяется как:
— коэффициенты метода, h — шаг дискретизации, а — точное решение в точке
Если , то метод имеет порядок согласованности s . Число s называется порядком аппроксимации , а — погрешностью дискретизации . Например, метод Эйлера имеет s=1, так как его невязка уменьшается пропорционально .
Схема устойчива, если небольшие ошибки в начальных данных или вычислениях не разрастаются бесконтрольно. Без устойчивости даже точная аппроксимация уравнения может дать неверные результаты из-за накопления ошибок. Формально, для двух решений 𝑢_ℎ^1 и 𝑢_ℎ^2 с возмущениями 𝜀_ℎ^1 и 𝜀_ℎ^2:
∥𝑢_ℎ^1 − 𝑢_ℎ^2∥ ≤ 𝐶_1(∥𝜀_ℎ^1∥ + ∥𝜀_ℎ^2∥)
где:
𝐶_1 - константа, не зависящая от ℎ
Пример:
Для 𝑑𝑢/𝑑𝑡 = −𝑢 метод Эйлера даёт 𝑢_{𝑛+1} = 𝑢_𝑛*(1−ℎ)
Условие устойчивости: |1−ℎ|<1 то есть ℎ<2. Если ℎ>2 решение начнёт расти, хотя точное решение 𝑢(t)=𝑒^{−𝑡} - убывает
Нуль-устойчивость (или нулевая устойчивость) проверяет, как метод ведёт себя в пределе h→0 , когда внешние возмущения отсутствуют. Она связана с характеристическим полиномом разностной схемы, который для линейного многошагового метода вида:
записывается как:
Для того, чтобы определить, какой устойчивостью обладает метод, необходимо проверить его на примере y’ = lambda*y:
Аналитическое решение будет иметь вид:
y(t) = y0 * exp(lambda * t)
Численное решение будет иметь вид:
y_{n+1} = R(h*lambda)*y_n
где y_n - решение, полученное на n-ой итерации;
R(z), z = h*lambda - функция устойчивости метода;
h - шаг метода;
lambda - комплексное число, помогающее определить устойчивость при наличии малых возмущений (ошибки округлений, небольшие погрешности в данных).
То есть получаем, что у нас есть комплексное число z, имеющее Re(z) и Im(z) части. Для каждой конкретной задачи оно будет разным, так как зависит от выбранного шага h и от заданных условий по возмущениям lambda.
Строгая устойчивость необходима, если мы считаем неопределённое количество шагов по времени. Например, при моделировании долгосрочных процессов Здесь требуется, чтобы ||R(z)||<1 - в таком случае ошибки экспоненциально уменьшаются, что хорошо для длительных вычислений.
Нестрогая (слабая) устойчивость применима, если нам нужно сделать лишь несколько шагов по времени. Здесь достаточно, чтобы ||R(z)||=1, что допускает небольшой рост ошибок, но не приводит к их чрезмерному росту на коротких интервалах.
Примеры функций устойчивости некоторых методов:
Детерминированный хаос:
Примечание: Детерминированность (или определенность) - подразумевается, что в алгоритме определен каждый шаг, то есть сколько бы раз мы его не повторили, получим один и тот же результат.
Детерминированный хаос - это явление, когда динамическая система, несмотря на определенность начальных условий и детерминированных законов, является сложной, из-за чего кажется хаотичной и проблемной в предсказании поведения.
Характеристики таких систем:
Бифуркация:
В широком смысле: Бифуркация — это качественное изменение поведения динамической системы при бесконечно малом изменении её параметров, когда её параметры проходят через некоторые бифуркационные (критические) значения. Эти значения еще называют точками бифуркации.
В узком смысле: Бифуркация - это раздвоение.
Простыми словами, бифуркация - это моменты, когда поведение системы резко меняется. Двойной маятник неплохо это отображает: сначала вся тысяча маятников (видео со слайда 566) двигается одинаково, а потом происходит абсолютно разное движение.
Бифуркационная диаграмма - представление любого характеристического свойства решения как функции критического параметра.
Пример:
Бифуркация подразделяется на:
Сценарий - последовательность бифуркаций, качественно меняющих свойства системы.
Странные аттракторы:
Аттрактор (или точка притяжения) - точка бифуркации, из которой все исходящие решения устойчивы (по сути - рисунок выше).
Странный аттрактор — это притягивающее множество целых неустойчивых траекторий в фазовом пространстве динамической системы. Данные аттракторы выглядят как сложные фрактальные узоры. Примеры: аттрактор Лоренца (слайды 580-581), аттрактор Рёсслера (слайд 582).
Амплитуда - разница между максимальным значением и базовой линией.
Период волны - время, за которое волна проходит полный цикл.
Частота - количество волн, проходящих через фиксированное место за определенное время. Измеряется в количестве циклов за 1 секунду. Единицей является Герц.
Период = 1 / Частота
Длина волны - расстояние между двумя последовательными гребнями.
Дискретизация - как часто мы измеряем значения волны во времени.
Частота дискретизации - скорость дискретизации, измеряется в Гц.
Герц - частота колебаний за одну секунду (например если мы дискретизируем волну с частотой 2 Гц, значит, каждую секунду мы фиксируем два значения).
Угловая частота - количество циклов за секунду. Измеряется в радианах в секунду.
Фаза сигнала - это положение волны во времени относительно точки отсчета, отвечает за сдвиги волн вправо-лево. Измеряется в градусах или радианах.
Амплитудный спектр - совокупность амплитуд гармоник ряда Фурье.
Частотный спектр - совокупность частот амплитуд гармоник ряда Фурье.
Большинство фильтров работают не с самим сигналом, а с его спектром. Если вычислить спектр сигнала, удалить из него (или существенно уменьшить) определенные частоты, а затем выполнить обратное преобразование Фурье, то результатом будет фильтрованный сигнал. Эта процедура производится в тех случаях, когда частотный спектр помехи или шума занимают на оси частот интервал, отличный или лишь частично перекрывающийся с частотным диапазоном сигнала.
Математическая абстракция и преобразование Фурье не применимы к реальным сигналам в силу их ограниченности по времени и, следовательно, непериодичности, однако их можно рассматривать как периодические с периодом T → ∞. Тогда ω0=2π/T → 0, а спектры амплитуд и фаз становятся непрерывными (сплошными), сумма в разложении Фурье превращается в интеграл и в результате переходим к интегралу Фурье.
Разложению в ряд Фурье могут подвергаться периодические сигналы. При этом они представляются в виде суммы гармонических функций либо комплексных экспонент (e^(2πνt)) с частотами, образующими арифметическую прогрессию. Чтобы такое разложение существовало, фрагмент сигнала длительностью в один период должен удовлетворять условиям Дирихле, а также сигнал должен быть абсолютно интегрируемым, т.е. интеграл его модуля должен быть конечной величиной.
Условия Дирихле - во фрагменте сигнала длительностью в один период:
В итоге для работы применяются дискретное или быстрое преобразование Фурье.
Прямое преобразование Фурье – это разложение сигнала на гармонические функции (в спектр).
Обратное преобразование Фурье – это синтез сигнала по гармоникам.
Преобразование Фурье ставит в соответствие сигналу, заданному во времени, его спектральную функцию, т.е. осуществляется переход из временной области в частотную. Преобразование Фурье является взаимно-однозначным, поэтому представление сигнала в частотной области (т.е. спектральная функция) содержит столько же информации, сколько и исходный сигнал, заданный во временной области.
Примечание: про само преобразование в вопросе выше.
Применение преобразования Фурье во временных рядах позволяет выявить периодические компоненты, даже если они скрыты шумом или другими колебаниями.
Основная идея применения - разложение ряда на сумму гармонических колебаний разных частот для определения основных частот сезонных колебаний (например, суточных, недельных, годовых циклов) и амплитуд гармоник.
Основные этапы включают: