Символьное дифференцирование

Top  Previous  Next

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

При ненулевом начальном состоянии и отсутствии внешней силы материальная точка будет совершать затухающие гармонические колебания.

Пусть нам теперь нужно решить «обратную» задачу: найти закон изменения внешней силы , при котором компенсировалось бы сопротивление среды и материальная точка совершала незатухающие колебания с определенной частотой. Для решения этой задачи получаем систему уравнений (рис.1).

                 Рис.1

Особенность этой системы уравнений в том, что траектория уже известна, и первое уравнение, бывшее дифференциальным относительно x в «прямой» задаче, становится алгебраическим относительно F в «обратной». При этом надо знать первую и вторую производные по времени для заданной функции x(t).

Запустив такую модель, мы получим правильное решение с небольшим «всплеском» в начальной точке  и сообщение о необходимости численного дифференцирования, которое и является источником этого «всплеска». Однако, хотя мы и добились искомого результата, для более сложных моделей лучше бы численного дифференцирования не использовать – оно отрицательно сказывается на скорости и точности моделирования. Альтернативой численному дифференцированию является символьное дифференцирование нужных уравнений.

Откроем окно установок проекта и на странице «Общие» установим флажок «Использовать символьное дифференцирование» после чего снова запустим модель.

Получим верную зависимость уже без «всплеска». Откроем окно текущей совокупной системы уравнений. Мы видим, что анализатор уравнений автоматически преобразовал исходную систему в чисто алгебраическую, использовав формулы для первой и второй производных , полученные символьным дифференцированием последнего уравнения исходной системы (рис.2).

                                 Рис.2

В отличие от инструментов на базе языка Modelica в AnyDynamics анализ и формирование текущей совокупной системы уравнений происходит не во время генерации кода выполняемой модели, а во время выполнения модели. Это является «расплатой» за возможность использовать карты состояний UML и полноценно моделировать гибридные системы и системы с переменной структурой. Поэтому в AnyDynamics на этапе генерации кода модели происходит формирование только своего рода «заготовок» для анализатора уравнений. В связи с этим не всегда удается во время выполнения модели найти подходящее символьное решение. В этом случае анализатор уравнений сообщает о невозможности использовать символьное дифференцирование и переходит к использованию численного дифференцирования.

При установленном флаге «Использовать символьное дифференцирование» программный код модели несколько больше, поэтому по умолчанию этот флаг сброшен.