Mathematica не решает волновое уравнение при заданных граничных условиях - PullRequest
4 голосов
/ 22 сентября 2011

Еще не знаком с синтаксисом Mathematica. Когда я делаю:

DSolve[{
  D[u[x, t], {x, 2}] == (1/(v*v))*D[u[x, t], {t, 2}],
  u[0, t] == 0,
  u[l, 0] == 0
  }, u, {x, t}]

он просто возвращает то, что я ввел

DSolve[{(u^(2,0))[x,t]==(u^(0,2))[x,t]/v^2,u[0,t]==0,u[l,0]==0},u,{x,t}]

Однако, когда я удаляю граничные условия, я получаю

{{u->Function[{x,t},C[1][t-(Sqrt[v^2] x)/v^2]+C[2][t+(Sqrt[v^2] x)/v^2]]}}

с C [1] и C [2], представляющими функции для граничных условий.

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

2 вещи:

  1. Разве вам не нужно больше граничных и начальных условий, чем просто 2? У вас есть производные второго порядка слева и справа, для каждого требуется 2 условия. Следовательно, всего 4. см. http://mathworld.wolfram.com/WaveEquation1-Dimensional.html

  2. Я не думаю, что DSolve или NDSolve могут решить начальные и краевые задачи? Кажется, я где-то читал это где-то назад. Сейчас нет времени проверять.

2 голосов
/ 22 сентября 2011

Я думаю, что Mathematica не знает, как справиться с этими граничными условиями для PDE 2-го порядка . Как бы вы хотели получить ответ? Как вообще ряд Фурье?

Это , упомянутое в Поваренной книге Mathematica (и, вероятно, в других местах) ...

Разбивая задачу для Mathematica (с размерным фактором v->1), вы найдете

In[1]:= genSoln = DSolve[D[u[x, t], {x, 2}] == D[u[x, t], {t, 2}], u, {x, t}] // First
Out[1]= {u -> Function[{x, t}, C[1][t - x] + C[2][t + x]]}

In[2]:= Solve[u[0, t] == 0 /. genSoln]
Out[2]= {{C[1][t] -> -C[2][t]}}

In[3]:= u[l, 0] == 0 /. genSoln /. C[1][x_] :> -C[2][x] // Simplify
Out[3]= C[2][-l] == C[2][l]

что решение записывается как f(t-x)-f(t+x), где f является периодическим по [-l,l] ...

Вы не можете больше ничего делать, не делая предположений о гладкости решения.

Вы можете проверить, будет ли работать стандартный подход ряда Фурье, например,

In[4]:= f[x_, t_] := Sin[n Pi (t + x)/l] - Sin[n Pi (t - x)/l]

In[5]:= And[D[u[x, t], {x, 2}] == D[u[x, t], {t, 2}], 
              u[0, t] == 0, u[l, 0] == 0] /. u -> f // Reduce[#, n] & // Simplify

Out[5]= C[1] \[Element] Integers && (n == 2 C[1] || n == 1 + 2 C[1])
...