Partial Differential Equations
Partial Differential Equations
New methods have been implemented for solving partial differential equations with
boundary condition (PDE and BC) problems.
The PDE & BC project, started five years ago implementing some of the basic
methods found in textbooks to match arbitrary functions and constants to given
PDE boundary conditions of different kinds. One frequent problem is that of a 1st
order PDE that can be solved without boundary conditions in terms of an
arbitrary function, and where a single boundary condition (BC) is given for the
PDE unknown function, and this BC does not depend on the independent
variables of the problem. The problem can be solved making simple, however,
ingenious use of differential invariants to match the boundary condition.
The examples that can now be handled using this new method, although
restricted in generality to "only one 1st order linear or nonlinear PDE and
only one boundary condition for the unknown function itself", illustrate
well how powerful it can be to use more advanced methods.
First consider a linear example, among the simplest one could imagine:
>
(1.1)
>
(1.2)
Now, input a boundary condition (BC) for the unknown such that this
BC does not depend on the independent variables ; this BC can,
however, depend on arbitrary symbolic parameters. For instance:
>
(1.3)
This kind of problem can now be solved in one step:
>
(1.4)
(1.4)
To verify this result for correctness, use the pdetest. This also tests the solution
against the boundary conditions.
>
(1.5)
To obtain the solution (1.4), the PDE was first solved regardless of the boundary
condition:
>
(1.6)
Next, the arbitrary function was determined such that the
boundary condition is matched. Concretely, the
mapping _F1 is what was determined. You can see this mapping reversing the
solving process in two steps. Start by taking the difference between the general
solution (1.6) and solution (1.4) that matches the boundary condition:
>
(1.7)
(1.11)
(1.12)
Although this PDE and BC example looks simple, this solution (1.12) is not
apparent, as is the way to get it just from the boundary condition
and the solution (1.6).
(1.17)
>
(1.20)
Here we have two independent variables, so for illustration purposes use a
boundary condition that depends on only one arbitrary parameter.
>
(1.21)
All looks OK, but we still have another problem: check the arbitrary function _F1
entering the general solution of PDE when tackled without any boundary
condition:
>
(1.22)
Remove this RootOf to see the underlying algebraic expression:
>
(1.23)
So this is a PDE where the general solution is implicit, actually depending on an
arbitrary function of the unknown The code handles this problem in the
same way, just that in cases like this there may be more than one solution. For
this very particular BC (1.21), there are actually three solutions:
>
(1.24)
Verify these three solutions against the PDE and the boundary condition.
>
(1.25)
>
(2.2)
>
(2.3)
Many of the improvements were made when using the Fourier method (with
separation of variables by product and eigenfunction expansion). This method
separates the PDE by product into two ODEs, so that we now need to solve two
ODE boundary problems. One of these ODE boundary problems is a Sturm-
Liouville problem (an eigenvalue problem), whose solution we represent using
an infinite series.
Example: Consider the diffusion PDE and BC problem below, where ,
>
(2.4)
>
(2.5)
>
(2.6)
(2.7)
>
(2.8)
>
(2.9)
such that
The domain is bounded:
>
(2.10)
>
(2.11)
>
(2.12)
Here is an example without sources in the PDE, where now we can have
different types of functions in the initial conditions.
>
(3.1)
>
(3.2)
>
(3.3)
>
(3.5)
>
(3.6)
(3.6)
>
(4.1.1)
Its solution is now found by pdsolve by first converting it into a PDE without a
dependent variable. For this, it uses the command
ToMissingDependentVariable:
>
(4.1.2)
That is, in order to solve pde_with_m, pdsolve creates and solves the above
pde_missing_m, using a new function v(x,y,m), and then changes variables
back to m(x,y) to give the solution:
>
(4.1.3)
In the example below, note the use of the option "simplifyusingpde = false";
this is necessary so that the characteristic strip does not get simplified using
the given PDE, rendering the "reverse" option as nonfunctional.
And here is the family of PDEs that corresponds to that characteristic strip
(note the arbitrary function _F1(x)):
>
(4.2.3)