Осциллятор с затухающей возвращающей силой

Предположим, что система описывается уравнением движения:

Икс ¨ "=" к Икс опыт ( т 2 2 о 2 ) .

(Например, пружина с затухающей жесткостью.)

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

Икс ( т ) "=" [ Икс 0 потому что ( π к о эрф ( т / 2 о ) ) + в 0 к грех ( π к о эрф ( т / 2 о ) ) ] опыт ( т 2 8 о 2 )

Это кажется неверным, поскольку для т восстанавливающая сила приближается к нулю, и, следовательно, я ожидаю линейного т -зависимость в этом пределе.

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

Редактировать

Поскольку вопрос был отложен, я поясню свои намерения ниже. Они включают в себя неявный и явный вопрос:

  • (неявный) - Почему подход WKB дает неверный результат для этого случая? Включение более высоких порядков, похоже, не помогает, поскольку первый порядок уже содержит экспоненциальную зависимость. Существуют ли какие-либо критерии явной временной зависимости, которые необходимо выполнить, чтобы сделать WKB подходящим подходом?
  • (явно) - Если WKB не работает, какой другой подход можно использовать для решения такого дифференциального уравнения? Здесь я привел пример конкретной явной временной зависимости, однако меня также интересуют общие решения для произвольных явных временных зависимостей, если это возможно.

Примечание. Это не домашнее задание, а чистое личное любопытство.

Ответы (3)

Я не вижу ничего плохого в вашем решении, и действительно, быстрая программа Matlab подтверждает это (я использовал ode45 с к "=" 1 , о "=" 1 , Икс 0 "=" 1 и в 0 "=" 0 ). Ваша проблема в том, что вы слишком многого ожидаете от своего приближения. Это нормально, но только в короткие сроки.

введите описание изображения здесь

Спасибо за Ваш ответ. В общем, я хотел бы получить решение для т 0 . Почему вы утверждаете, что WKB действителен только для небольших т ? Также на графике, который вы показываете, видно, что ode45 увеличивается даже сильнее, чем WKB, то есть даже более сильная зависимость, чем экспоненциальная (в то время как она должна быть линейной для т ). Для меня неясно, как этот график поддерживает правильность результатов ode45 и как он показывает, что WKB действителен только в небольших временных масштабах (кстати, текст читается Икс 0 "=" 1 однако сюжет показывает Икс 0 "=" 1 ). Не могли бы вы предоставить более подробную информацию об этом? Спасибо.

Эту проблему можно решить, просто используя степенные ряды. Чтобы упростить запись, скажите к т "=" к * е т 2 2 о 2 . Тогда предположим, что решение может быть записано как:

Икс ( т ) "=" н "=" 0 с н т н

Затем, вводя это в данное дифференциальное уравнение:

р . час . с . :     Икс ¨ ( т ) "=" н "=" 2 ( н ) ( н 1 ) с н т н л . час . с . :     к т Икс ( т ) "=" н "=" 0 к т с н т н "=" н "=" 2 к т с н 2 т н 2
Оба равны, вы получаете рекурсивное отношение:
с н "=" к т с н 2 ( н ) ( н 1 )

Итак, как и ожидалось, вы получаете две бесплатные константы, с 0 и с 1 , и вы можете разделить ряд на четные и нечетные члены. Делая это, вы получаете:

с 2 "=" к т ( 2 ) ( 1 ) с 0 ,     с 4 "=" ( к т ) ( 4 ) ( 3 ) ( к т ) ( 2 ) ( 1 ) с 0 , . . . с 2 н "=" с 0 ( к т ) н ( 2 н ) !
с 3 "=" ( к т ) ( 3 ) ( 2 ) с 1 ,     с 5 "=" ( к т ) ( 5 ) ( 4 ) ( к т ) ( 3 ) ( 2 ) с 1 , . . . с 2 н + 1 "=" с 1 ( к т ) н ( 2 н + 1 ) !

Выстраивая как четные, так и нечетные ряды, вы получаете:

Икс ( т ) "=" с 0 н "=" 0 ( 1 ) н [ к т 1 / 2 т ] 2 н ( 2 н ) ! + с 1 к т 1 / 2 н "=" 0 ( 1 ) н [ к т 1 / 2 т ] 2 н + 1 ( 2 н + 1 ) !

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

Икс ( т ) "=" с 0 с о с ( к * е т 2 4 о 2 т ) + с 1 к * е т 2 4 о 2 с я н ( к * е т 2 4 о 2 т )

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

Спасибо за Ваш ответ. Однако некоторые вещи остаются неясными. Сначала вы предполагаете, что решение может быть записано в виде степенного ряда в т с коэффициентами с н . Выразив временную зависимость как т н подразумевает с н "=" константа (особенно при применении производной), однако позже вы получите с н ( к т ) н которая не является постоянной, а зависит от т . Это противоречит первоначальному предположению. Также из вашего окончательного представления Икс ( т ) Следовательно с 0 "=" Икс 0 , с 1 "=" в 0 и для в 0 "=" 0 линейная зависимость от времени для т исчезает, что не имеет смысла.

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

Это означает, что мы строим решения Икс н ( т ) которые действительны на [ т н , т н + 1 ] для опыт ( т н 2 / 2 о 2 ) константа . Решения имеют вид

Икс н ( т ) "=" а н потому что ( ю н т ) + б н грех ( ю н т ) Икс ˙ н ( т ) "=" а н ю н грех ( ю н т ) + б н ю н потому что ( ю н т ) с ю н "=" к опыт ( т н 2 / 2 о 2 )

Чтобы соединить решения на границах т н мы используем непрерывность Икс ( т ) , Икс ˙ ( т ) :

Икс н ( т н ) "=" ! Икс н 1 ( т н ) и Икс ˙ н ( т н ) "=" ! Икс ˙ н 1 ( т н )

Отсюда следует рекуррентное соотношение для коэффициентов а н , б н для н 1 :

( потому что ( ю н т н ) грех ( ю н т н ) ю н грех ( ю н т н ) ю н потому что ( ю н т н ) ) ( а н б н ) "=" ( а н 1 потому что ( ю н 1 т н ) + б н 1 грех ( ю н 1 т н ) а н 1 ю н 1 грех ( ю н 1 т н ) + б н 1 ю н 1 потому что ( ю н 1 т н ) )

Эта система уравнений имеет определитель ю н 0 и, следовательно, имеет единственное решение. Для н "=" 0 у нас есть а 0 "=" Икс 0 и б 0 "=" в 0 / ю 0 .

Теперь осталось выбрать значения для т н т 0 "=" 0 зафиксированный). Поскольку обязательным условием была временная зависимость Вопрос ( т ) опыт ( т 2 / 2 о 2 ) быть приблизительно постоянной на соответствующих интервалах, мы можем сделать оценку через производную Вопрос ˙ ( т ) :

| Вопрос ˙ ( т н ) ( т н + 1 т н ) Вопрос ( т н ) | ϵ

с выбранным лимитом ϵ . Отсюда получаем:

т н + 1 "=" | Вопрос ( т н ) Вопрос ˙ ( т н ) | ϵ + т н

Однако это работает только для Вопрос ˙ ( т ) 0 . В случае, если это не выполнено, мы можем просто выбрать постоянное значение обновления вместо этого.

т н + 1 "=" т н + дельта

за небольшую стоимость дельта ; например:

дельта "=" | Вопрос ( т Макс ) Вопрос ˙ ( т Макс ) | ϵ

где т Макс "=" а р г м а Икс | Вопрос ˙ ( т ) | .

Пример

С использованием Икс 0 "=" 1 мм , в 0 "=" 0 , к "=" 1 с 2 , о "=" 2 π с и схема постоянного обновления с дельта "=" 0,001 о мы получаем:

Пример траектории

Код:

import matplotlib.pyplot as plt
from numpy import cos, sin, sqrt, exp, pi
import numpy as np


def xns(x0, v0, k, s, delta=0.001):
    a = x0
    w = sqrt(k)
    b = v0 / w

    def func(t):
        return a*cos(w*t) + b*sin(w*t)

    t = delta * s

    yield t, func

    while True:
        v = w
        w = sqrt(k) * exp(-t**2 / (2 * s**2))
        a, b = np.linalg.solve([
            [cos(w*t), sin(w*t)],
            [-w*sin(w*t), w*cos(w*t)]],

            [a*cos(v*t) + b*sin(v*t),
            -a*v*sin(v*t) + b*v*cos(v*t)]
        )
        t += delta*s
        yield t, func


x0, v0, k, s = 0.001, 0, 1, 2*pi
ts = np.linspace(0, 7*pi*sqrt(k), 1000)
xns = xns(x0, v0, k, s)

xs = []
tn, xn = next(xns)
for t in ts:
    while t >= tn:
        tn, xn = next(xns)
    xs.append(xn(t))
xs = np.asarray(xs)

plt.figure()
plt.title(r'$\rm x_0 = {:.2f}\,[mm],\;'
      r'     v_0 = {:.2f}\,[mm\,s^{{-1}}],\;'
      r'     k   = {:.2f}\,[s^{{-2}}],\;'
      r'\sigma   = {:.2f}\,[s]$'
          .format(x0*1e3, v0*1e3, k, s))
plt.xlabel('t [s]')
plt.ylabel('x [mm]')
plt.plot(ts, xs * 1e3, '-', lw=3)
plt.grid(lw=1.5)
plt.twinx()
plt.ylabel(r'$\rm\sqrt{k}\cdot\exp\left(-t^2/2\sigma^2\right)$', color='#ff7f0e')
plt.tick_params('y', colors='#ff7f0e')
plt.plot(ts, sqrt(k) * exp(-ts**2 / (2 * s**2)), '--', color='#ff7f0e', lw=2)
plt.savefig('example.png', bbox_inches='tight', pad_zeros=0)
plt.show()