MATLAB Examples

# Wave Equation Using Command-Line Functions

This example shows how to solve the wave equation using command-line functions. It solves the equation with boundary conditions u = 0 at the left and right sides, and at the top and bottom. The initial conditions are

and

Calculate the solution every 0.05 seconds for five seconds.

The geometry is described in the file squareg.m.

First, create the geometry.

model = createpde(); geometryFromEdges(model,@squareg); 

View the geometry

pdegplot(model,'EdgeLabels','on'); ylim([-1.1,1.1]) axis equal 

Set the boundary conditions to u = 0 on the left and right boundaries (edges 2 and 4). The default boundary conditions are appropriate for edges 1 and 3, so you do not need to set them.

applyBoundaryCondition(model,'dirichlet','Edge',[2,4],'u',0); 

Set the initial conditions.

u0 = @(locations)atan(cos(pi/2*locations.x)); ut0 = @(locations)3*sin(pi*locations.x).*exp(sin(pi/2*locations.y)); setInitialConditions(model,u0,ut0); 

Create the model coefficients. The equation is

where , , and .

m = 1; c = 1; f = 0; specifyCoefficients(model,'m',m,'d',0,'c',c,'a',0,'f',f); 

Set the solution times.

n = 31; % number of frames in eventual animation tlist = linspace(0,5,n); % list of times 

You are now ready to solve the wave equation. Create a mesh and call the solver.

generateMesh(model); results = solvepde(model,tlist); 

Animate the solution.

u = results.NodalSolution; umax = max(max(u)); umin = min(min(u)); figure; M = moviein(n); for i=1:n, pdeplot(model,'XYData',u(:,i),'ZData',u(:,i),... 'XYGrid','on','ColorBar','off'); axis([-1 1 -1 1 umin umax]); caxis([umin umax]); M(:,i) = getframe; end 

You can review the movie by executing movie(M,10). There is a complete solution of this problem, including animation, in docid:pde_examples.example-ex08381761. If you have lots of memory, you can try increasing n, the number of frames in the movie.