Импульс давления на одном конце, волновое уравнение

Я пытаюсь решить указанную задачу численно с помощью Mathematica, но безрезультатно. Представьте себе стержень длины L. Скорость звука в стержне равна c. На одном конце прикладывается импульс давления гауссовой формы, ширина которого сравнима с L/c. Я хотел бы найти функцию смещения частиц u(t,x) внутри стержня. Коды Mathematica приведены ниже:

c = 1.0 (*speed of wave*)
L = 1.0 (*length of medium*)
Subscript[P, 0] = 0.0 (*pressure of reservoir at one end*)
Subscript[t, 0] = 5.0*c/L; (*mean time of pressure impulse*)
\[Delta]t = 2.0*c/L; (*Std of pressure impulse*)
K = 1.0; (* proportionality constant, stress-strain *)
Subscript[P, max ] = 1.0; (*max. magnitude of pressure impulse*)
Subscript[P, 1][t_] := 
 Subscript[P, max ]
   PDF[NormalDistribution[Subscript[t, 0], \[Delta]t], t];

PDE = D[func[t, x], t, t] == c^2 D[func[t, x], x, x]
BC1 = -K func[t, 0] == Subscript[P, 1][t]
BC2 = -K func[t, L] == Subscript[P, 0]
IC1 = func[0, 
   x] == (-Subscript[P, 1][0]/K) (x/L) + (-Subscript[P, 0]/K) (1 - x/L)
IC2 = Derivative[1, 0][func][0, x] == 0.0

sol = NDSolve[{PDE, BC1, BC2, IC1, IC2}, 
  func, {t, 0, 2 Subscript[t, 0]}, {x, 0, L}]

Проблема в том, что программа продолжает работать в течение нескольких минут, не выдавая никаких результатов. Учитывая простоту задачи (т. е. существование аналитического решения), я думаю, что должен быть более быстрый способ получить численное решение. Кто-нибудь, пожалуйста, дайте мне несколько предложений?


person Jamie    schedule 23.10.2014    source источник
comment
Я настоятельно рекомендую вам не использовать Subscript, а вместо этого использовать, например, p0 и т. д. Также не начинайте собственные символы с заглавных букв, чтобы избежать конфликта со встроенными символами.   -  person agentp    schedule 23.10.2014
comment
... после внесения этих изменений я немедленно получаю решение с предупреждением о несовместимых граничных условиях. Я думаю, что у вас есть какая-то ошибка в знаках в bc, но вы можете разобраться с этим, посмотрев на полученные решения.   -  person agentp    schedule 23.10.2014
comment
Спасибо, Джордж. Последовал вашему совету и решил проблему.   -  person Jamie    schedule 23.10.2014


Ответы (1)


Следуя совету Джорджа, уравнение было решено.

BC1 и BC2, указанные в вопросе, следует изменить следующим образом.

BC1 = -kk Derivative[0, 1][func][t, 0] == p1[t]
BC2 = -kk Derivative[0, 1][func][t, ll] == p0

Также были изменены t0 и [Delta]t,

t0 = 2.0*c/ll (*mean time of pressure impulse*)
\[Delta]t = 0.5*c/ll (*Std of pressure impulse*)

Задача решается с точностью до интервала времени 0 ‹ t ‹ 2 t0. Решил задачу на более длительный интервал времени 0 ‹ t ‹ 4 t0, чтобы поискать что-нибудь интересное.

Вот график трехмерного графика давления (в зависимости от x и t)

давление в зависимости от времени t и пространственной координаты x

Вот график давления на одном конце стержня, где приложен импульс. Давление является гауссовым, как и ожидалось.

давление на конце стержня, к которому приложено давление, в зависимости от времени

Вот график давления в середине бара. Обратите внимание, что хотя приложенное давление является гауссовым, а давление на другом конце поддерживается равным P0=0, давление становится отрицательным на некоторое время tc.

давление в середине полосы в зависимости от времени

person Jamie    schedule 23.10.2014