Рубрика «численные методы»

image

Этот топик продолжает серию моих статей на Хабре, посвященных исследованию аттрактора Лоренца.

Часть 1. Критический взгляд на аттрактор Лоренца
Часть 2. Динамическая система Лоренца и вычислительный эксперимент
Часть 3. О существовании периодических решений в системе Лоренца
Часть 4. Три цикла в аттракторе Лоренца

Итак, рассмотрим нелинейную систему дифференциальных уравнений, введенную Эдвардом Лоренцом в 1963 году:

$ (1)left{ begin{array}{l} dot{x}=sigma(y-x),\ dot{y}=rx-y-xz,\ dot{z}=xy-bz, end{array}right. $

где

$sigma=10,:r=28,:b=8/3:-$

классические значения параметров системы.Читать полностью »

Данная статья посвящена собственной реализации (солвер Joker FEM) метода конечных элементов для систем уравнений диффузии-реакции.

Обычно предпочтительнее использовать готовые решения, однако если в задаче есть специфические особенности, то на основе простой библиотеки задачу решить легче.

Читать полностью »

Многомерная линейная регрессия — один из основополагающих методов машинного обучения. Несмотря на то, что современный мир интеллектуального анализа данных захвачен нейронными сетями и градиентным бустингом, линейные модели до сих пор занимают в нём своё почётное место.

В предыдущих публикациях на эту тему мы познакомились с тем, как получать точные оценки средних и ковариаций методом Уэлфорда, а затем научились применять эти оценки для решения задачи одномерной линейной регрессии. Конечно, эти же методы можно использовать и в задаче многомерной линейной регрессии.

Метод Уэлфорда и многомерная линейная регрессия - 1

Читать полностью »

image

Симуляция физики делает небольшие предсказания на основании законов физики. Эти предсказания на самом деле достаточно просты, что-то вроде «если объект вот здесь и он движется с такой скоростью в этом направлении, то за краткий промежуток времени он окажется вот тут». Мы создаём такие предсказания с помощью математической техники под названием интегрирование.

Темой этой статьи как раз и будет реализация такого интегрирования.

Интегрирование уравнений движения

Вы можете помнить из курса старшей школы или вуза, что сила равна произведению массы на ускорение.

$F=ma$

Преобразуем это уравнение и увидим, что ускорение равно силе, делённой на массу. Это соответствует нашим интуитивным ожиданиям, потому что тяжёлые объекты труднее бросать.

$a=F/ma=F/m$

Ускорение — это темп изменения скорости от времени:

$dv/dt=a=F/m$

Аналогично, скорость — это темп изменения позиции от времени:

$dx/dt=v$

Это значит, что если мы знаем текущие позицию и скорость объекта, а также приложенные к нему силы, то сможем проинтегрировать, чтобы найти его позицию и скорость в определённый момент времени.
Читать полностью »

Симуляция физического мира - 1

Как бы вы подошли к симуляции дождя, ну или любого другого продолжительного физического процесса?

Симуляцию, будь это дождь, поток воздуха над крылом самолёта или же падающий по ступенькам слинки (помните игрушку-пружинку радугу из детства?), можно представить, если знать следующее:

  1. Состояние всего в момент начала симуляции.
  2. Как это состояние меняется из одного момента времени в другой?

Читать полностью »

Метод оптимизации Trust-Region DOGLEG. Пример реализации на Python - 1

Trust-region метод (TRM) является одним из самых важных численных методов оптимизации в решении проблем нелинейного программирования (nonlinear programming problems). Метод базируется на определении региона вокруг лучшего решения, в котором квадратичная модель аппроксимирует целевую функцию.

Методы линейного поиска (line search) и методы trust-region генерируют шаги с помощью аппроксимации целевой функции квадратичной моделью, но использую они эту модель по-разному. Линейный поиск использует её для получения направления поиска и дальнейшего нахождения оптимального шага вдоль направления. Trust-region метод определяет область (регион) вокруг текущей итерации, в котором модель достаточно аппроксимирует целевую функцию. В целях повышения эффективности направление и длина шага выбираются одновременно.

Trust-region методы надежны и устойчивы, могут быть применены к плохо обусловленным задачам и имеют очень хорошие свойства сходимости. Хорошая сходимость обусловлена тем, что размер области TR (обычно определяется модулем радиус-вектора) на каждой итерации зависит от улучшений сделанных на предыдущих итерациях.
Читать полностью »

Метод Уэлфорда — простой и эффективный способ для вычисления средних, дисперсий, ковариаций и других статистик. Этот метод обладает целым рядом прекрасных свойств:

  • достигает отличных показателей по точности решений;
  • его чрезвычайно просто запомнить и реализовать;
  • это однопроходный онлайн-алгоритм, что крайне полезно в некоторых ситуациях.

Оригинальная статья Уэлфорда была опубликована в 1962 году. Тем не менее, нельзя сказать, что алгоритм сколь-нибудь широко известен в настоящее время. А уж найти математическое доказательство его корректности или экспериментальные сравнения с другими методами и вовсе нетривиально.

Настоящая статья пытается заполнить эти пробелы.

Точное вычисление средних и ковариаций методом Уэлфорда - 1

Читать полностью »

image

Изучая иностранную литературу, на днях наткнулся на работы [1, 2] профессора Мичиганского университета Дивакара Вишваната (Divakar Viswanath) об итерационном алгоритме вычисления периодических орбит динамических систем, основанном на методе Линдштедта-Пуанкаре (ЛП) (для ознакомления с ним рекомендую книгу [3, с. 408-411]). Преимуществом данного метода является то, что он не требует численного интегрирования дифференциального уравнения, поэтому может быть применён к построению и неустойчивых циклов. Читать полностью »

Привет! Некоторое время назад увлекся глубоким обучением и стал потихоньку изучать tensorflow. Пока копался в tensorflow вспомнил про свою курсовую по параллельному программированию, которую делал в том году на 4 курсе университета. Задание там формулировалось так:

Линейная начально-краевая задача для двумерного уравнения теплопроводности:

frac{partial u}{partial t}=sum limits_{alpha=1}^{2} frac{partial}{partial x_alpha} left (k_alpha frac{partial u}{partial x_alpha} right ) -u, quad x_alpha in [0,1] quad (alpha=1,2),  t>0;

k_alpha=begin{cases}    50, (x_1, x_2) in Delta ABC\    1, (x_1, x_2) notin Delta ABCend{cases}

(alpha=1,2),  A(0.2,0.5),  B(0.7,0.2),  C(0.5,0.8);

u(x_1, x_2, 0)=0, u(0,x_2,t)=1 - e^{-omega t},  u(1, x_2, t)=0,

u(x_1,0,t)=1 - e^{-omega t}, u(0, x_2, t)=0,  omega=20.

Хотя правильнее было бы назвать это уравнением диффузии.

Задачу тогда требовалось решить методом конечных разностей по неявной схеме, используя MPI для распараллеливания и метод сопряженных градиентов.

Я не специалист в численных методах, пока не специалист в tensorflow, но опыт у меня уже появился. И я загорелся желанием попробовать вычислять урматы на фреймворке для глубокого обучения. Метод сопряженных градиентов реализовывать второй раз уже не интересно, зато интересно посмотреть как с вычислением справится tensorflow и какие сложности при этом возникнут. Этот пост про то, что из этого вышло.

Численный алгоритм

Читать полностью »

Вручную выписывать коэффициенты СЛАУ и вводить их в программу — не самый эффективный способ программирования метода конечных разностей, потому что для каждой новой вариации постановки задачи потребуется писать новую программу. Логичнее разработать общий солвер для более широкого класса задач, что упростит программирование и тестирование. Тестирование алгоритмов МКР затруднено, так как точное решение неизвестно, но общий солвер можно протестировать на задачах с заданным точным решением.

Автором разработан солвер Joker FDM для решения 1- и 2-мерных задач сопряжения для эллиптических уравнений методом конечных разностей.

Читать полностью »