pdsolve  find solutions for partial differential equations (PDEs) and systems of PDEs

Calling Sequence


pdsolve(PDE, f, HINT = hint, INTEGRATE, build)
pdsolve(PDE_system, funcs, HINT, other_options)
pdsolve(PDE_or_PDE_system, series, conds, order=n, other_options)
pdsolve(PDE_or_PDE_system, conds, type=numeric, other_options)


Parameters


PDE



a partial differential equation or system of them, possibly including boundary or initial values and/or ODEs and/or algebraic constraints

f



indeterminate function or its name; or a set or list of them, required when there are many differentiated functions

hint



(optional) righthandside in HINT = hint, where hint is one of: `+`, `*`, one of the keywords strip or TWS, the construction TWS(math_function_name), or any algebraic expression involving unknown functions

INTEGRATE



(optional) indicate the automatic integration of the set of ODEs found when a PDE is solved by using separation of variables

build



(optional) try to build an explicit expression for the indeterminate function, no matter what the generality of the solution found

PDE_system



system of partial differential equations; it can contain inequations

funcs



(optional) set or list with indeterminate functions or names

other_options



when exactly solving PDE systems, all the options accepted by the casesplit command are also accepted by pdsolve

PDE_or_PDE_system



partial differential equation or system of partial differential equations; it can contain inequations

conds



initial or boundary conditions

series



to compute series solutions for PDE_or_PDE_system

type=numeric



equation; indicate that a numerical solution is to be found; the keyword numeric can be used instead of the full equation




Note: Optional arguments can be given alone or in conjunction, and in any order.





Description


•

For the first three calling sequences, given a PDE, or a system of PDEs, possibly including ODEs, algebraic constraints, and inequations, the main goal of the pdsolve function is to find an analytical solution. There are no restrictions as to the type, differential order, or number of dependent or independent variables of the PDEs or PDE systems that pdsolve can try to solve.

•

For computing solutions to systems of partial differential equation see pdsolve, system.

•

For computing series solutions to partial differential equation systems subject to initial values see pdsolve[series].

•

For the remaining calling sequence, pdsolve finds a numerical solution for the input PDE or PDE system. A discussion of this usage of pdsolve, the types of PDE that can be numerically solved, and any numericspecific arguments can be found in pdsolve/numeric.

•

The remainder of this page discusses the exact solution of a single PDE. For help on the exact solution of PDE systems, see pdsolve/system.

•

The pdsolve command currently recognizes a certain number of PDE families that can be solved by using standard methods. When the given PDE belongs to an unrecognized family, pdsolve uses a heuristic algorithm that attempts separation of variables based on the specific structure of the PDE. pdsolve also works with anticommutative variables set using the Physics package using the approach explained in PerformOnAnticommutativeSystem.

•

The strategy pdsolve uses is to look for the most general solution to the given PDE or, in the worst case, to look for a complete separation of variables. Thus, when successful, the command returns one of the following:


 A quasigeneral solution (a solution containing arbitrary functions, but not in sufficient number or not having enough variables to constitute a general solution), or


 A set of uncoupled ODEs with all the variables separated, or a complete solution obtained after integrating this set (when the option INTEGRATE is indicated).

•

When an incomplete separation of variables is reached, the function calls itself again (with a smaller problem), possibly using different methods of solution. If the smaller problem cannot be solved, the incomplete separation of variables is returned (with a warning message).

•

The results of pdsolve are returned, by default, in one of three forms.


a) When the general solution to the PDE is obtained, the function returns an explicit result for the indeterminate function.

>

PDE := x*diff(f(x,y),y)y*diff(f(x,y),x) = 0;

 (1) 
>

pdsolve(PDE); # _F1 is an arbitrary function

 (2) 

b) When a solution, but not the most general one, is obtained pdsolve expresses the result using the internal PDESolStruc function, displayed using &where, with the functional form found for the indeterminate function as the first argument. The second argument contains a list with any ODEs found while separating the variables, as well as any arbitrary functions or changes of variables introduced by pdsolve. PDESolStruc enables the user to see how particular the solution obtained is. In these cases, an explicit result for the indeterminate function, a particular solution, can be obtained by calling pdsolve with the extra argument build, or from this PDE solution structure by using the PDEtools[build] command. See the Examples section.


c) When pdsolve fails, it returns NULL.


About the Arguments


•

When the given PDE contains derivatives of more than one function, the function which should be considered the indeterminate function, or its name, must be given as an extra argument.

•

Three other optional arguments are allowed.


1. You can pass the extra argument build to pdsolve, which causes the function to directly build an explicit result, independent of the generality of the solution obtained.


2. You can request the automatic integration of the system of ODEs found by pdsolve when separating the variables, by using the INTEGRATE option.


3. You can give a HINT indicating a method of solution or a form for the indeterminate function. When given, the hint is taken by pdsolve as the departure point in looking for the solution. This option is remarkably useful when a result obtained by pdsolve is not the most general one, and permits a detailed study of the possible solutions for a given PDE.

•

The following arguments can be used with the HINT option.


This option forces pdsolve to begin by trying to separate the variables by sum.


This option forces pdsolve to begin by trying to separate the variables by product.


This option forces pdsolve to only try computing a Traveling Wave Solution as power series in tanh(xi), where xi represents a linear combination of the independent variables.


HINT = 'TWS(math_function_name)'


This option forces pdsolve to only try computing a Traveling Wave Solution as power series in math_function_name(xi), where xi represents a linear combination of the independent variables and math_function_name can be any of the following mathematical function names: exp, ln, sin, cos, tan, their multiplicative inverses csc, sec and cot, the corresponding six hyperbolic functions, arcsinh, the twelve elliptic Jacobi functions, the WeierstrassP function and also the identity function x > x, useful to compute purely polynomial solutions when they exist.


HINT =any algebraic expression


HINT = strip (for first order PDEs only)


This option forces pdsolve to look for a solution by trying to solve the associated characteristic strip. In this case, pdsolve tries to find the differential invariants associated with the given PDE and determine its general solution. This is usually possible when the characteristic strip does not require the extension of the configuration space by introducing the partial derivatives of the indeterminate function as variables. Otherwise, the integrated characteristic strip is returned in terms of a parameter _s.



Conventions


•

The pdsolve routine usually introduces new functions to express the solution for the indeterminate function. For example:


All functions introduced by pdsolve beginning with and followed by a number are assumed to be arbitrary, sufficiently differentiable functions of their arguments.

•

Any arbitrary constants introduced while separating the variables are represented as , ,..., and are global.




Examples


The examples below illustrate the use of pdsolve in solving a single PDE. For examples related to solving PDE systems, see pdsolve/system.
1. General solution of a first order PDE:
>


 (3) 
>


 (4) 
For the integral above, see intat. Results can be tested using pdetest.
>


 (5) 
2. Laplace equation in spherical coordinates:
>


 (6) 
The following is the structure of the solution expressed by using PDESolStruc (displayed using &where).
>


 (7) 
To build an explicit expression for F(r,theta,phi), try using PDEtools[build](ans), or pass the optional argument build to pdsolve. It is sometimes appropriate to also use assuming, for instance to specify that theta, representing the spherical coordinate, ranges from 0 to pi.
>


 (8) 
In the above, we are also using simplify/size; this is frequently useful when building solutions and helps to make evident that some constant factors can be reabsorbed in redefinitions of the arbitrary constants _C1, _C2, ....
3. HamiltonJacobi type PDE (see, for example, Landau, L.D. and Lifshitz, E.M. Translated by Sykes, J.B. and Bell, J.S. Mechanics. Oxford: Pergamon Press, 1969.)
>


 (9) 
The following is the structure of a complete solution obtained by separating the variables by sum.
>


 (10) 
Test these PDE solution structures using pdetest.
>


 (11) 
To build an explicit expression for S(t, xi, eta, phi), try build(ans).
4. A second order PDE and the HINT option:
>


 (12) 
A particular result can be obtained by separating the variables by product.
>


 (13) 
To find an explicit expression for S(x,y), use the optional argument build of pdsolve, or apply the PDEtools[build] command to the solution above.
>


 (14) 
Use the HINT option to obtain a general solution, getting some inspiration from the solution above.
>


 (15) 
General solutions involve N arbitrary functions of K1 variables, where N is the differential order and K the number of independent variables of the PDE.
5. Nonlinear first order PDE solved by using the characteristic strip method:
>


 (16) 
>


 (17) 
pdsolve can solve PDEs that involve anticommutative variables set using the Physics package using the approach explained in PerformOnAnticommutativeSystem.
>


 (18) 
Set first and as suffixes for variables of type/anticommutative (see Setup)
>


 (19) 
Consider this partial differential equation for the anticommutative function of commutative and anticommutative variables
>


 (20) 
Its solution using pdsolve involves an anticommutative constant , analogous to the commutative constants where n is an integer. The arbitrary functions introduced are all commutative, as usual and the Grassmannian parity of the left and righthandsides is preserved
>


 (21) 
>


 (22) 
>


For examples of the solving of PDE systems involving anticommutative variables see pdsolve[system].


See Also


dchange, dsolve, intat, pdetest, PDEtools, PDEtools[build], PDEtools[casesplit], pdsolve[boundaryconditions], pdsolve[numeric], pdsolve[series], pdsolve[system], PerformOnAnticommutativeSystem, Physics, Setup, splitstrip, strip, TWSolutions


References



ChebTerrab, E.S., and von Bulow, K. "A Computational Approach for the Analytical Solving of Partial Differential Equations". Computer Physics Communications. Vol. 90. (1995): 102116.


