restart;
with(PDEtools);
with(plots);
pde := diff(psi(t,x),t,t) - c^2*diff(psi(t,x),x,x)=0;
dsolve(pde);
sol := pdsolve(pde);
dsubs(sol,pde);
pde := diff(psi(t,x),t) - d*diff(psi(t,x),x,x)=0;
pdsolve(pde,build);
c := 1;
f := x -> exp(-x^2);
pde := diff(psi(t,x),t,t) - c^2*diff(psi(t,x),x,x)=0;
IBC1 := psi(0,x) = exp(-x^2),D[1](psi)(0,x)=0,psi(t,-10)=0,psi(t,10)=0;
IBC2 := psi(0,x) = f(x),D[1](psi)(0,x)=D(f)(x),psi(t,-10)=0,D[2](psi)(t,10)=0;
sol1 := pdsolve(pde,[IBC1],numeric,timestep=0.1,spacestep=0.1);
sol2 := pdsolve(pde,[IBC2],numeric,timestep=0.05,spacestep=0.05);
p1 := sol1:-animate(t=0..40,axes=boxed,color=red):
p2 := sol2:-animate(t=0..40,axes=boxed,color=blue):
p2;
display([p1,p2]);
p3 := sol2:-plot3d(x=-10..10,t=0..50,axes=boxed,shading=zhue,orientation=[270,0]):
p3;