Сравнение методов интегрирования уравнения гармонического осциллятора на python

Материал из Department of Theoretical and Applied Mechanics
Версия от 13:32, 22 апреля 2019; Анастасия Бальцер (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Курсовые работы 2018-2019 учебного года > Сравнение методов решения уравнения гармонического осциллятора на python

Курсовой проект по Механике дискретных сред

Исполнитель: Бальцер Анастасия

Группа: 43604/1

Семестр: осень 2018

Постановка задачи

Дано простейшее уравнение движения грузика на пружине: [math] \ddot{x} = -{c}{x} [/math]. Необходимо интегрировать его с помощью метода конечных разностей и средствами библиотеки scipy. Сравнить результаты интегрирования с аналитическим решением.

Решение

Рассмотрим уравнение модели гармонического осциллятора [math]\ddot{x} + \omega_0^2 x = 0[/math], где [math] \omega_0^2 = \frac{c}{m} [/math]. Начальные условия [math]x(t=0)=x_0[/math], [math]\dot{x}(t=0) = \dot{x}_0[/math].

Аналитическое решение:

[math]x{\left (t \right )} = C_{1} e^{- t \sqrt{- \omega_{0}}} + C_{2} e^{t \sqrt{- \omega_{0}}}[/math] Найдем константы [math]C_{1} : - \frac{v_{0}}{2 \sqrt{- \omega_{0}}} + \frac{x_{0}}{2}, \quad C_{2} : \frac{v_{0}}{2 \sqrt{- \omega_{0}}} + \frac{x_{0}}{2}[/math]

Полное решение: [math]x{\left (t \right )} = \left(- \frac{v_{0}}{2 \sqrt{- \omega_{0}}} + \frac{x_{0}}{2}\right) e^{- t \sqrt{- \omega_{0}}} + \left(\frac{v_{0}}{2 \sqrt{- \omega_{0}}} + \frac{x_{0}}{2}\right) e^{t \sqrt{- \omega_{0}}}[/math]

Построим график аналитического решения:

Sympy 111.png

Численное решение методом конечных разностей:

[math] \begin{align} x^{n+1} = && (2 - \omega_0^2dt^2)x^n - x^{n-1} \\ x^0 = && x_0 \\ x^1 = && x_0 + \dot{x}_0 dt \end{align} [/math]

То есть зная значения [math]x^n[/math] и [math]x^{n+1}[/math] находим значение на следующем шаге. [math]x^1[/math] находим из начальных условий.

Получаем решение (шаг по времени 0.001):

Ode sympy1.png

Численное решение с помощью библиотеки Scipy:

Будем решать систему ОДУ

[math]\frac{d}{dt} \begin{pmatrix} \dot{x} \\ x \end{pmatrix} = \begin{pmatrix} -\omega_0^2 x \\ \dot{x} \end{pmatrix}[/math]

Сравним полученное решение с аналитическим:

Scipy symp.png


Выводы

Таким образом, в ходе реализации данной работы можно сделать следующие выводы:

1. Если известно аналитическое решение, то лучше использовать его;

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

3. Использование средств библиотеки scipy - быстрый и удобный способ решения задач, так как там уже реализовано множество численных методов. Для данной задачи оба численных решения показали высокую точность.

См. также