Как стать автором
Обновить
55
0
Александр Пчелинцев @pchelintsev_an

Математик-вычислитель

Отправить сообщение
Да, сейчас способ написания программ в Блокноте (и т.п.) считается допотопным. Я свои до сих пор пишу в kate под Linux (хотя подсветка в нём есть). Там же и tex-статьи.
В своё время я долго объяснял программисту PL/1, почему индексация в массивах в Си начинается с нуля. Потом были полчища любителей Паскаля.
Подобную прогу когда-то на чистом C писал (под Linux с использованием функций библиотеки curses). Сырцы залил сюда. Отличие от того, что делал автор, — точки графика соединяются отрезками прямых, построенными в консоли по алгоритму Брезенхема. По скорости не знаю — может, у меня не самая эффективная реализация.

Через COM-интерфейс — MATLAB тоже позволяет работать с пакетом таким образом. А как тогда под Linux с ANSYS взаимодействовать?

Дмитрий, можно ли свести полученную систему каким-нибудь преобразованием к динамической системе с квадратичной правой частью по фазовым координатам?
А «пила» на рисунке — это шаг интегрирования большой?
Юрий, не пробовали исследовать устойчивость построенных орбит? Хотя бы численно — взять небольшую ошибку в начальных условиях и посмотреть, как далеко разбегутся траектории, и найти при этом критический момент времени, когда расстояние между ними по Евклиду превысит допустимой величины. В этом же контексте интересно изучить, как влияет на это дело шаг интегрирования. Например, для гелиоцентрической орбиты кометы Галлея.
1. Продолжаемость решений. Есть теоремы, позволяющие установить нелокальную продолжаемость решений (здесь также можно попробовать построить функцию Ляпунова, см. пункт 2). Если проверить это нельзя, значит, могут быть так называемые сингулярности в решении, т.е. наличие асимптот. Тогда нужно использовать численные методы, которые «чувствуют» асимптоты. Есть такие. Примеры — модифицированный метод Эйлера и упоминаемая работа в предыдущем моём комментарии.
2. Ограниченность решений на оси (мы строим приближённое решение на отрезке, однако, такие сведения тоже нужны). Если решение неорганичено, то осложняется работа с ним в плане хранения вещественных чисел для узлов сетки, а также устойчивости.
3. Если решение ограничено (как в случае с аттракторами), посмотреть, есть ли положения равновесия и их устойчивость по первому приближению. Если есть сёдла, то предельные решения будут неустойчивыми, и применение РК-методов на больших отрезках времени будет некорректным.
4. Если с устойчивостью всё в порядке, то исследуем жёсткость системы, чтобы выбрать явный или неявный метод решения СДУ.
5. В случае нежёсткой задачи подходят РК-методы с автоматическим выбором шага. Вообще, при выборе РК-метода для жёсткой и нежёсткой системы рекомендую воспользоваться двумя монографиями Э. Хайрера и др. «Решение обыкновенных дифференциальных уравнений».
6. Также надо обращать внимание на наличие разрывов и модулей (а также разрывов в производных) в правой части системы по фазовым координатам. Вообще, строго говоря, при переходе через них нарушается теорема существования и единственности решения задачи Коши. В плане численных методов может произойти скачок в погрешности численного решения.
Всегда известно почему конкретное нелинейное ДУ не решается аналитическим методом, из этих знаний можно выбрать метод численного решения

Разве? Я то думал, что из анализа устойчивости решений (сделать как можно полный качественный анализ системы) и жёсткости системы.
Простите за вопрос, а зачем тогда численно решать уравнение, когда известно точное решение? Определить погрешность? Для реальных систем точное решение мы можем не знать.
В случае непродолжаемых решений (как в приведённом примере с уравнением x' = 1 + x^2) РК-методы с постоянным шагом ненадёжены — не зная о вертикальных асимптотах, мы можем просто проскочить их (нужно менять шаг при приближении к ним, при этом контролируя погрешность численного решения). Опять же для нелинейных динамических систем, где имеются странные аттракторы, при численном интегрировании на больших отрезках времени может получиться значительная ошибка по фазовым координатам. Выходом здесь является переход, например, к методу степенных рядов (для систем общего вида с квадратичными нелинейностями метод описан здесь; программа на C++). Вот пример, где РК-метод явно проиграет, — возьмите отсюда начальную точку для третьего цикла в системе Лоренца и проинтегрируйте на периоде (сильно мельчить шагом придётся).
Тогда в неравенстве (2) и далее неграмотно написано — множество не может сравниваться с числом, элемент числового множества может. Здесь смысл не потеряется, если писать x вместо E_a, а потом написать, что x принадлежит E_a. Скорее всего, автор написал так, чтобы укоротить запись. Кстати, супремум в определении экспоненты можно заменить/дополнить(написав рядом) пределом при k -> бесконечности — это даёт выход на вычислительную процедуру.
Круто! Неравенство Коши и мы приходим к классике! Но всё равно подход красивый, и как закрепление пройденного материала хорошо пойдёт.
Да, пропущено. И можно супремум заменить на предел при k -> бесконечности, но для дальнейших рассуждений автору удобнее пользоваться всё-таки супремумом, как мне кажется.
Ну, про комплексные и матричные аргументы разговор не идёт. Я думаю, этот материал можно давать на первом курсе в рамках дисциплины «Математический анализ» в дифференциальном исчислении и как закрепление пройденного материала, и как обобщение второго замечательного предела. Можно его разбросать по темам — что-то уже рассматривать после темы «Множества вещественных чисел», что-то в пределах, и самый конец — в дифференциальном исчислении. Уж, очень красиво здесь всё сделано.
Обобщение определения экспоненты.
Думаю, что для вычислений приведённое определение ничего не даст. Если мы вычисляем exp(x) по второму замечательному пределу, то данное определение сводится к нему как a_i = x / k, но в прикладных вычислениях, насколько мне известно, так не делают: либо в лоб — в ряд (благо из-за факториалов быстро сходится), либо алгоритм CORDIC (вот ещё).
Извините, что отвечаю (не ко мне вопрос), но я смотрю по доказательству не важно, какие именно a и a_k, главное — любые положительные числа, дающие в сумме a (и для рациональных a и a_k верно, и для иррациональных тоже).
Здесь, по сути, обобщение второго замечательного предела.
Получилось так (для начальной точки цикла, которую я определил):

A: matrix([-10,10,0], [28-27,-1,-(-2.147375914135)], [2.078143036771,-2.147375914135,-8/3]);
realpart(float(eigenvalues(%)));
[[-3.198123425968013,-10.4239475369641,-0.044595703734554],[1.0,1.0,1.0]]
float(10.4239475369641/0.044595703734554);
233.7433130108301


Если взять другую точку этого цикла (которую Вишванат нашел):

A: matrix([-10,10,0], [28-27,-1,-(-13.763610682134)], [-19.578751942452,-13.763610682134,-8/3]);
realpart(float(eigenvalues(%)));
[[1.59085774810119,1.59085774810119,-16.84838216286904],[1.0,1.0,1.0]]
float(16.84838216286904/1.59085774810119);
10.59075343661548

Информация

В рейтинге
Не участвует
Откуда
Тамбов, Тамбовская обл., Россия
Зарегистрирован
Активность