Jednowymiarowe (jedna współrzędna przestrzenna x) równanie falowe

ClearAll["Global`*"]

$Assumptions=c>0;

eq3={D[u[x,t],{x,2}]-(1/c^2)*D[u[x,t],{t,2}]==0}

s31=Simplify[DSolve[eq3,u[x,t],{x,t}]]

W równaniu powyższym nie występowały ani warunki początkowe, ani warunki brzegowe. Dlatego rozwiązaniem jest suma dwóch DOWOLNYCH FUNKCJI jednej zmiennej, C[1] i C[2], z argumentami równymi odpowiednio t-x/c oraz t+x/c. Te dwie części rozwiązania odpowiadają fali biegnącej zgodnie ze zwrotem osi x (argument t-x/c) oraz przeciwnie do zwrotu osi x (t+x/c). 

Teraz wprowadzamy warunki początkowe i brzegowe.
Warunki początkowe dla równania drugiego rzędu w czasie oznaczają, że musimy podać postać funkcji u i jej pierwszej pochodnej w chwili t=0.

Dla fali na strunie o skończonej długości, x ∈ [-L,10*L], odpowiada to podaniu kształtu struny w chwili t=0 oraz rozkładu prędkości punktów struny w chwili t=0.

wp3={u[x,0]==Exp[-(x^2)],Derivative[0,1][u][x,0]==0}

Warunki brzegowe: zakładamy, że fala występuje na strunie, która jest sztywno umocowana dla x=-L i swobodna na drugim końcu.

L=1;

wb3={u[-L,t]==E^(-1),Derivative[1,0][u][L,t]==0}

c=1;tmax=15;

s32=NDSolve[{eq3,wp3,wb3},u,{x,-L,L},{t,0,tmax}]

Plot3D[Evaluate[u[x,t]/.s32[[1]]],{t,0,tmax},{x,-L,L},AxesLabel->{"t","x","u(x,t)"}]

Animate[Plot[Evaluate[u[x,t]/.s32[[1]]],{x,-L,L},PlotRange->{-3,1.1},AxesLabel->{"x","u(x,t)"}],{t,0,8}]

(*  ClearAll["Global`*"]  *)