Partial Differential Equations with Boundary Conditions - New Features in Maple 2019 - Maplesoft

What's New in Maple 2019

Partial Differential Equations with Boundary Conditions



 

Significant developments happened for Maple 2019 in its ability for the exact solving of PDE with Boundary / Initial conditions. The new functionality is described below, in 11 brief Sections, with 30 selected examples and a few comments. 

1. PDE and BC problems solved using linear change of variables 

PDE and BC problems often require that the boundary and initial conditions be given at certain evaluation points (usually in which one of the variables is equal to zero). Using linear changes of variables, however, it is possible to change the evaluation points of BC, obtaining the solution for the new variables, and then changing back to the original variables. This is now automatically done by the pdsolve command. 

 

Example 1: A heat PDE & BC problem in a semi-infinite domain: 

> pde__1 := diff(u(x, t), t) = `+`(`*`(`/`(1, 4), `*`(diff(u(x, t), x, x)))); -1
 

> iv__1 := u(`+`(`-`(A)), t) = 0, u(x, B) = 10; -1
 

 

Note the evaluation points A and B. The method typically described in textbooks requires the evaluation points to be A = 0, B = 0. The change of variables automatically used in this case is: 

> transformation := {t = `+`(tau, B), x = `+`(xi, `-`(A)), u(x, t) = upsilon(xi, tau)}
 

Typesetting:-mprintslash([transformation := {t = `+`(tau, B), x = `+`(xi, `-`(A)), u(x, t) = upsilon(xi, tau)}], [{t = `+`(tau, B), x = `+`(xi, `-`(A)), u(x, t) = upsilon(xi, tau)}])
 

so that pdsolve's task becomes solving this other problem, now with the appropriate evaluation points 

> PDEtools:-dchange(transformation, [pde__1, iv__1], {tau, upsilon, xi}); 1
 

Typesetting:-mprintslash([[diff(upsilon(xi, tau), tau) = `+`(`*`(`/`(1, 4), `*`(diff(upsilon(xi, tau), `$`(xi, 2))))), upsilon(0, tau) = 0, upsilon(xi, 0) = 10]], [[diff(upsilon(xi, tau), tau) = `+`(`...
 

and then changing the variables back to the original {x, t, u} and giving the solution. The process all in one go: 

> `assuming`([pdsolve([pde__1, iv__1])], [`<`(abs(A), x), `<`(abs(B), t)])
 

u(x, t) = `+`(`*`(10, `*`(erf(`/`(`*`(`+`(x, A)), `*`(`^`(`+`(t, `-`(B)), `/`(1, 2))))))))
 

 

Example 2: A heat PDE with a source and a piecewise initial condition 

> pde__2 := `+`(diff(u(x, t), t), 1) = `*`(mu, `*`(diff(u(x, t), x, x))); -1
 

> iv__2 := u(x, 1) = piecewise(`<=`(0, x), 0, `<`(x, 0), 1); -1
 

> `assuming`([pdsolve([pde__2, iv__2])], [`<`(0, mu), `<`(0, t)])
 

u(x, t) = `+`(`/`(3, 2), `-`(`*`(`/`(1, 2), `*`(erf(`+`(`/`(`*`(`/`(1, 2), `*`(x)), `*`(`^`(mu, `/`(1, 2)), `*`(`^`(`+`(t, `-`(1)), `/`(1, 2)))))))))), `-`(t))
 

 

Example 3: A wave PDE & BC problem in a semi-infinite domain: 

> pde__3 := diff(u(x, t), t, t) = diff(u(x, t), x, x); -1
 

> iv__3 := u(x, 1) = `+`(exp(`+`(`-`(`*`(`^`(`+`(x, `-`(6)), 2))))), exp(`+`(`-`(`*`(`^`(`+`(x, 6), 2)))))), (D[2](u))(x, 1) = `/`(1, 2); -1
 

> `assuming`([pdsolve([pde__3, iv__3])], [`<`(0, t)])
 

u(x, t) = `+`(`*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(`^`(`+`(`-`(x), t, 5), 2))))))), `*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(`^`(`+`(`-`(x), t, `-`(7)), 2))))))), `*`(`/`(1, 2), `*`(exp(`+`(`-`(`*`(`^`(`+`(x,...
 

 

Example 4: A wave PDE & BC problem in a semi-infinite domain: 

> pde__4 := `+`(diff(u(x, t), t, t), `-`(`*`(`/`(1, 4), `*`(diff(u(x, t), x, x))))) = 0; -1
 

> iv__4 := (D[1](u))(1, t) = 0, u(x, 0) = exp(`+`(`-`(`*`(`^`(x, 2))))), (D[2](u))(x, 0) = 0; -1
 

> `assuming`([pdsolve([pde__4, iv__4])], [`<`(1, x), `<`(0, t)])
 

Typesetting:-mprintslash([u(x, t) = `+`(`*`(`/`(1, 2), `*`(PIECEWISE([`+`(exp(`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(t, `*`(2, `*`(x))), 2)))))), exp(`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(t, `-`(`*`(2, `*`(x...
 

 

Example 5: A wave PDE with a source: 

> pde__5 := `+`(diff(u(x, t), t, t), `-`(`*`(`^`(c, 2), `*`(diff(u(x, t), x, x))))) = f(x, t); -1
 

> iv__5 := u(x, 1) = g(x), (D[2](u))(x, 1) = h(x); -1
 

> pdsolve([pde__5, iv__5])
 

Typesetting:-mprintslash([u(x, t) = `+`(`/`(`*`(`/`(1, 2), `*`(`+`(Int(Int(`+`(`*`(diff(h(zeta), `$`(zeta, 2)), `*`(`^`(c, 2), `*`(tau))), `*`(diff(g(zeta), `$`(zeta, 2)), `*`(`^`(c, 2))), f(zeta, `+`...
 

> pdetest(u(x, t) = `+`(`/`(`*`(`/`(1, 2), `*`(`+`(Int(Int(`+`(`*`(diff(diff(h(zeta), zeta), zeta), `*`(`^`(c, 2), `*`(tau))), `*`(diff(diff(g(zeta), zeta), zeta), `*`(`^`(c, 2))), f(zeta, `+`(tau, 1)))...
 

[0, 0, 0]
 

2. It is now possible to specify or exclude method(s) for solving 

Staring with Maple 2019, the pdsolve/BC solving methods can be indicated, either to be used for solving, as in methods = [method__1, method__2, () .. ()] to be tried in the order indicated, or to be excluded, as in exclude = [method__1, method__2, () .. ()]. The methods and sub-methods available are organized in a table, `pdsolve/BC/methods`; -1 

 

> indices(`pdsolve/BC/methods`)
 

[1], [2], [3], [2,
 

So, for example, the methods for PDEs of first order and second order are, respectively, 

> `pdsolve/BC/methods`[1]
 

[
 

> `pdsolve/BC/methods`[2]
 

[
[
 

 

Some methods have sub-methods (their existence is visible in indices(`pdsolve/BC/methods`)): 

> `pdsolve/BC/methods`[2,
 

[
 

> `pdsolve/BC/methods`[2,
 

[
 

 

Example 6: 

> pde__6 := `+`(diff(u(r, theta), r, r), diff(u(r, theta), theta, theta)) = 0; -1
 

> iv__6 := u(2, theta) = `+`(`*`(3, `*`(sin(`+`(`*`(2, `*`(theta)))))), 1); -1
 

> pdsolve([pde__6, iv__6])
 

u(r, theta) = `+`(`-`(_F2(`+`(`-`(`*`(`+`(I), `*`(r))), `*`(2, `*`(I)), theta))), 1, `-`(`*`(3, `*`(sin(`+`(`*`(`*`(2, `*`(I)), `*`(r)), `-`(`*`(4, `*`(I))), `-`(`*`(2, `*`(theta)))))))), _F2(`+`(`*`(...
 

> pdsolve([pde__6, iv__6], method = Fourier)
 

u(r, theta) = `+`(`*`(`*`(`/`(3, 2), `*`(I)), `*`(exp(`+`(`*`(2, `*`(r)), `-`(4), `-`(`*`(`+`(`*`(2, `*`(I))), `*`(theta))))))), `-`(`*`(`+`(`*`(`/`(3, 2), `*`(I))), `*`(exp(`+`(`-`(`*`(2, `*`(r))), 4...
 

Example 7: 

> pde__7 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y)) = 0; -1
 

> iv__7 := u(x, 0) = Dirac(x); -1
 

> pdsolve([pde__7, iv__7])
 

u(x, y) = `+`(Dirac(x), `-`(`*`(`/`(1, 2), `*`(Dirac(2, x), `*`(`^`(y, 2))))), `*`(_C3, `*`(y)))
 

> pdsolve([pde__7, iv__7], method = Fourier)
 

u(x, y) = invfourier(exp(`+`(`-`(`*`(s, `*`(y))))), s, x)
 

> convert(u(x, y) = invfourier(exp(`+`(`-`(`*`(s, `*`(y))))), s, x), Int); 1
 

Typesetting:-mprintslash([u(x, y) = `+`(`/`(`*`(`/`(1, 2), `*`(Int(exp(`+`(`-`(`*`(s, `*`(y))), `*`(I, `*`(s, `*`(x))))), s = `+`(`-`(infinity)) .. infinity))), `*`(Pi)))], [u(x, y) = `+`(`/`(`*`(`/`(...
 

> pdsolve([pde__7, iv__7], method = Generic)
 

u(x, y) = `+`(`-`(_F2(`+`(`-`(y), `*`(I, `*`(x))))), Dirac(`+`(x, `*`(I, `*`(y)))), _F2(`+`(y, `*`(I, `*`(x)))))
 

3. Series solutions for linear PDE and BC problems solved via product separation with eigenvalues that are the roots of algebraic expressions which cannot be inverted 

Linear problems for which the PDE can be separated by product, giving rise to Sturm-Liouville problems for the separation constants (eigenvalues) and separated functions (eigenfunctions), do not always result in solvable equations for the eigenvalues. Below are examples where the eigenvalues are respectively roots of a sum of Bessel functions and of a trigonometric equation `+`(tan(lambda[n]), lambda[n]) = 0.  

 

Example 8: This problem represents the temperature distribution in a thin circular plate whose lateral surfaces are insulated (Articolo example 6.9.2): 

> pde__8 := diff(u(r, theta, t), t) = `+`(`/`(`*`(`/`(1, 25), `*`(`+`(diff(u(r, theta, t), r), `*`(r, `*`(diff(u(r, theta, t), r, r))), `/`(`*`(diff(u(r, theta, t), theta, theta)), `*`(r))))), `*`(r)));...
 

> iv__8 := (D[1](u))(1, theta, t) = 0, u(r, 0, t) = 0, u(r, Pi, t) = 0, u(r, theta, 0) = `*`(`+`(r, `-`(`*`(`/`(1, 3), `*`(`^`(r, 3))))), `*`(sin(theta))); -1
 

> pdsolve([pde__8, iv__8])
 

Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
 

In the above we see that the eigenvalue lambda__n satisfies `+`(BesselJ(1, lambda[n]), `*`(BesselJ(2, lambda[n]), `*`(lambda[n]))) = 0. When lambda__n is the root of one single BesselJ or BesselY function of integer order, the Maple functions BesselJZeros and BesselYZeros are used instead. That is the case, for instance, if we slightly modify this problem changing the first boundary condition to be u(1, theta, t) = 0 instead of (D[1](u))(1, theta, t) = 0 

> `iv__8.1` := u(1, theta, t) = 0, u(r, 0, t) = 0, u(r, Pi, t) = 0, u(r, theta, 0) = `*`(`+`(r, `-`(`*`(`/`(1, 3), `*`(`^`(r, 3))))), `*`(sin(theta))); -1
 

> pdsolve([pde__8, `iv__8.1`])
 

Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
 

 

 

Example 9: This problem represents the temperature distribution in a thin rod whose left end is held at a fixed temperature of 5 and whose right end loses heat by convection into a medium whose temperature is 10. There is also an internal heat source term in the PDE (Articolo example 8.4.3): 

> pde__9 := diff(u(x, t), t) = `+`(`*`(`/`(1, 20), `*`(diff(u(x, t), x, x))), t); -1
 

> iv__9 := u(0, t) = 5, `+`(u(1, t), (D[1](u))(1, t)) = 10, u(x, 0) = `+`(`-`(`*`(`/`(40, 3), `*`(`^`(x, 2)))), `*`(`/`(45, 2), `*`(x)), 5); -1
 

> pdsolve([pde__9, iv__9])
 

Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
 

For information on how to verify or plot a solution like the one above, see the section "Sturm-Liouville problem with eigenvalues that are the roots of algebraic expressions which cannot be inverted" in the pdsolve with boundary conditions help page. 

 

4. Superposition method for linear PDE with more than one non-homogeneous BC 

Previously, for linear homogeneous PDE problems with non-periodic initial and boundary conditions, pdsolve was only consistently able to solve the problem as long as at most one of those conditions was non-homogeneous. The superposition method works by taking advantage of the linearity of the problem and the fact that the solution to such a problem in which two or more of the BC are non-homogeneous can be given as 

u = `+`(u__1, u__2) + ...,  where each u__i is a solution of the PDE with all but one of the BC homogenized. 

 

Example 10: A Laplace PDE with one homogeneous and three non-homogeneous conditions: 

> pde__10 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y)) = 0; -1
 

> iv__10 := u(0, y) = 0, u(Pi, y) = `*`(sinh(Pi), `*`(cos(y))), u(x, 0) = sin(x), u(x, Pi) = `+`(`-`(sinh(x))); -1
 

> pdsolve([pde__10, iv__10])
 

u(x, y) = `/`(`*`(`+`(`*`(`+`(exp(`+`(`*`(2, `*`(Pi)))), `-`(1)), `*`(Sum(`/`(`*`(`^`(-1, n), `*`(n, `*`(`+`(exp(`+`(`*`(2, `*`(Pi)))), `-`(1)), `*`(exp(`+`(`*`(n, `*`(`+`(Pi, `-`(y)))), `-`(Pi))), `*...
u(x, y) = `/`(`*`(`+`(`*`(`+`(exp(`+`(`*`(2, `*`(Pi)))), `-`(1)), `*`(Sum(`/`(`*`(`^`(-1, n), `*`(n, `*`(`+`(exp(`+`(`*`(2, `*`(Pi)))), `-`(1)), `*`(exp(`+`(`*`(n, `*`(`+`(Pi, `-`(y)))), `-`(Pi))), `*...
 

 

5. Polynomial solutions method: 

This new method gives pdsolve better performance when the PDE & BC problems admit polynomial solutions. 

 

Example 11: 

> pde__11 := `+`(diff(u(x, y), x, x), `*`(y, `*`(diff(u(x, y), y, y)))) = 0; -1
 

> iv__11 := u(x, 0) = 0, (D[2](u))(x, 0) = `*`(`^`(x, 2)); -1
 

> pdsolve([pde__11, iv__11])
 

u(x, y) = `*`(y, `*`(`+`(`*`(`^`(x, 2)), `-`(y))))
 

 

6. Solving more problems using the Laplace transform or the Fourier transform 

These methods now solve more problems and are no longer restricted to PDE of first or second order. 

 

Example 12: A third order PDE & BC problem: 

> pde__12 := diff(u(x, t), t) = `+`(`-`(diff(u(x, t), x, x, x))); -1
 

> iv__12 := u(x, 0) = f(x); -1
 

> pdsolve([pde__12, iv__12]); 1
 

Typesetting:-mprintslash([u(x, t) = `+`(`/`(`*`(`/`(1, 4), `*`(Int(`+`(`/`(`*`(`/`(4, 3), `*`(Pi, `*`(f(`+`(`-`(zeta))), `*`(`^`(`+`(`-`(`/`(`*`(`+`(x, zeta)), `*`(`^`(`+`(`-`(t)), `/`(1, 3)))))), `/`...
 

 

Example 13: A PDE & BC problem that is solved using Laplace transform: 

> pde__13 := diff(u(x, y), y, x) = `*`(sin(x), `*`(sin(y))); -1
 

> iv__13 := u(x, 0) = `+`(1, cos(x)), (D[2](u))(0, y) = `+`(`-`(`*`(2, `*`(sin(y))))); -1
 

> pdsolve([pde__13, iv__13]); 1
 

u(x, y) = `*`(cos(y), `*`(`+`(1, cos(x))))
 

To see the computational flow, the solving methods used, and in which order they are tried, use 

> infolevel[pdsolve] := 2; 1
 

Typesetting:-mprintslash([infolevel[pdsolve] := 2], [2])
 

Example 14:  

> pde__14 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y)) = 0; -1
 

> iv__14 := u(x, 0) = 0, u(x, b) = h(x); -1
 

> pdsolve([pde__14, iv__14]); 1
 

 

* trying method "SpecializeArbitraryFunctions" for 2nd order PDEs
  -> trying "LinearInXT"
  -> trying "HomogeneousBC"
* trying method "SpecializeArbitraryConstants" for 2nd order PDEs
* trying method "Wave" for 2nd order PDEs
  -> trying "Cauchy"
  -> trying "SemiInfiniteDomain"
  -> trying "WithSourceTerm"
* trying method "Heat" for 2nd order PDEs
  -> trying "SemiInfiniteDomain"
  -> trying "WithSourceTerm"
* trying method "Series" for 2nd order PDEs
  -> trying "TwoBC"
  -> trying "ThreeBCsincos"
  -> trying "FourBC"
  -> trying "ThreeBC"
  -> trying "ThreeBCPeriodic"
  -> trying "WithSourceTerm"
     * trying method "SpecializeArbitraryFunctions" for 2nd order PDEs
        -> trying "LinearInXT"
        -> trying "HomogeneousBC"
           Trying travelling wave solutions as power series in tanh ...
              Trying travelling wave solutions as power series in ln ...
     * trying method "SpecializeArbitraryConstants" for 2nd order PDEs
        Trying travelling wave solutions as power series in tanh ...
           Trying travelling wave solutions as power series in ln ...
     * trying method "Wave" for 2nd order PDEs
        -> trying "Cauchy"
        -> trying "SemiInfiniteDomain"
        -> trying "WithSourceTerm"
     * trying method "Heat" for 2nd order PDEs
        -> trying "SemiInfiniteDomain"
        -> trying "WithSourceTerm"
     * trying method "Series" for 2nd order PDEs
        -> trying "TwoBC"
           Trying travelling wave solutions as power series in tanh ...
              Trying travelling wave solutions as power series in ln ...
        -> trying "ThreeBCsincos"
        -> trying "FourBC"
        -> trying "ThreeBC"
        -> trying "ThreeBCPeriodic"
        -> trying "WithSourceTerm"
        -> trying "ThreeVariables"
 

     * trying method "Laplace" for 2nd order PDEs
        -> trying a Laplace transformation
     * trying method "Fourier" for 2nd order PDEs
        -> trying a fourier transformation
 

     * trying method "Generic" for 2nd order PDEs
        -> trying a solution in terms of arbitrary constants and functions to be adjusted to the given initial conditions
     * trying method "PolynomialSolutions" for 2nd order PDEs
     * trying method "LinearDifferentialOperator" for 2nd order PDEs
     * trying method "Superposition" for 2nd order PDEs
  -> trying "ThreeVariables"
* trying method "Laplace" for 2nd order PDEs
  -> trying a Laplace transformation
* trying method "Fourier" for 2nd order PDEs
  -> trying a fourier transformation
 

  <- fourier transformation successful
<- method "Fourier" for 2nd order PDEs successful
u(x, y) = `+`(`-`(invfourier(`/`(`*`(exp(`*`(s, `*`(`+`(b, `-`(y))))), `*`(fourier(h(x), x, s))), `*`(`+`(exp(`+`(`*`(2, `*`(s, `*`(b))))), `-`(1)))), s, x)), invfourier(`/`(`*`(exp(`*`(s, `*`(`+`(b, ...
 

> convert(u(x, y) = `+`(`-`(invfourier(`/`(`*`(exp(`*`(s, `*`(`+`(b, `-`(y))))), `*`(fourier(h(x), x, s))), `*`(`+`(exp(`+`(`*`(2, `*`(s, `*`(b))))), `-`(1)))), s, x)), invfourier(`/`(`*`(exp(`*`(s, `*`...
 

Typesetting:-mprintslash([u(x, y) = `+`(`-`(`/`(`*`(`/`(1, 2), `*`(Int(`/`(`*`(Int(`*`(h(x), `*`(exp(`+`(`-`(`*`(`+`(I), `*`(x, `*`(s)))))))), x = `+`(`-`(infinity)) .. infinity), `*`(exp(`+`(`*`(s, `...
 

Reset the infolevel to avoid displaying the computational flow: 

> infolevel[pdsolve] := 1; -1
 

7. Improvements to solving heat and wave PDE, with or without a source: 

Example 15: A heat PDE: 

> pde__15 := diff(u(x, t), t) = `+`(`*`(13, `*`(diff(u(x, t), x, x)))); -1
 

> iv__15 := (D[1](u))(0, t) = 0, (D[1](u))(1, t) = 1, u(x, 0) = `+`(`*`(`/`(1, 2), `*`(`^`(x, 2))), x); -1
 

> pdsolve([pde__15, iv__15])
 

u(x, t) = `+`(`/`(1, 2), Sum(`+`(`/`(`*`(2, `*`(cos(`*`(n, `*`(Pi, `*`(x)))), `*`(exp(`+`(`-`(`*`(13, `*`(`^`(Pi, 2), `*`(`^`(n, 2), `*`(t))))))), `*`(`+`(`-`(1), `^`(-1, n)))))), `*`(`^`(Pi, 2), `*`(...
 

To verify an infinite series solution such as this one you can first use pdetest  

> pdetest(u(x, t) = `+`(`/`(1, 2), Sum(`+`(`/`(`*`(2, `*`(cos(`*`(n, `*`(Pi, `*`(x)))), `*`(exp(`+`(`-`(`*`(13, `*`(`^`(Pi, 2), `*`(`^`(n, 2), `*`(t))))))), `*`(`+`(`-`(1), `^`(-1, n)))))), `*`(`^`(Pi, ...
 

[0, 0, 0, `+`(`/`(1, 2), Sum(`+`(`/`(`*`(2, `*`(cos(`*`(n, `*`(Pi, `*`(x)))), `*`(`+`(`-`(1), `^`(-1, n))))), `*`(`^`(Pi, 2), `*`(`^`(n, 2))))), n = 1 .. infinity), `-`(x))]
 

To verify that the last condition, for u(x, 0) is satisfied, we plot the first 1000 terms of the series solution with t = 0 and make sure that it coincides with the plot of the right-hand side of the initial condition u(x, 0) = `+`(`*`(`/`(1, 2), `*`(`^`(x, 2))), x). Expected: the two plots superimposed on each other 

> plot([value(subs(t = 0, infinity = 1000, rhs(u(x, t) = `+`(`/`(1, 2), Sum(`+`(`/`(`*`(2, `*`(cos(`*`(n, `*`(Pi, `*`(x)))), `*`(exp(`+`(`-`(`*`(13, `*`(`^`(Pi, 2), `*`(`^`(n, 2), `*`(t))))))), `*`(`+`(...
 

Plot_2d
 

Example 16: A heat PDE in a semi-bounded domain: 

> pde__16 := diff(u(x, t), t) = `+`(`*`(`/`(1, 4), `*`(diff(u(x, t), x, x)))); -1
 

> iv__16 := (D[1](u))(alpha, t) = 0, u(x, beta) = `+`(`*`(10, `*`(exp(`+`(`-`(`*`(`^`(x, 2)))))))); -1
 

> `assuming`([pdsolve([pde__16, iv__16], u(x, t))], [`<`(0, x), `<`(0, t)])
 

u(x, t) = `+`(`-`(`/`(`*`(5, `*`(`+`(`*`(`+`(erf(`/`(`*`(`+`(`*`(`+`(t, `-`(beta), `-`(1)), `*`(alpha)), x)), `*`(`^`(`+`(t, `-`(beta), 1), `/`(1, 2)), `*`(`^`(`+`(t, `-`(beta)), `/`(1, 2)))))), `-`(1...
 

 

Example 17: A wave PDE in a semi-bounded domain: 

> pde__17 := `+`(diff(u(x, t), t, t), `-`(`*`(9, `*`(diff(u(x, t), x, x))))) = 0; -1
 

> iv__17 := (D[1](u))(0, t) = 0, u(x, 0) = 0, (D[2](u))(x, 0) = `*`(`^`(x, 3)); -1
 

> `assuming`([pdsolve([pde__17, iv__17])], [`<`(0, x), `<`(0, t)])
 

Typesetting:-mprintslash([u(x, t) = PIECEWISE([`+`(`*`(9, `*`(`^`(t, 3), `*`(x))), `*`(t, `*`(`^`(x, 3)))), `<`(`+`(`*`(3, `*`(t))), x)], [`+`(`*`(`/`(27, 4), `*`(`^`(t, 4))), `*`(`/`(9, 2), `*`(`^`(t...
 

 

Example 18: A wave PDE with a source 

> pde__18 := diff(u(x, t), t, t) = `+`(diff(u(x, t), x, x), `*`(x, `*`(exp(`+`(`-`(t)))))); -1
 

> iv__18 := u(0, t) = 0, u(1, t) = 0, u(x, 0) = 0, (D[2](u))(x, 0) = 1; -1
 

> pdsolve([pde__18, iv__18])
 

u(x, t) = Sum(`+`(`-`(`/`(`*`(2, `*`(`+`(`*`(`+`(`*`(`^`(Pi, 2), `*`(`^`(n, 2), `*`(`^`(-1, n)))), `-`(`*`(`^`(Pi, 2), `*`(`^`(n, 2)))), `*`(2, `*`(`^`(-1, n))), `-`(1)), `*`(sin(`*`(n, `*`(Pi, `*`(t)...
 

 

Example 19: Another wave PDE with a source 

> pde__19 := diff(u(x, t), t, t) = `+`(`*`(4, `*`(diff(u(x, t), x, x))), `*`(`+`(1, t), `*`(x))); -1
 

> iv__19 := u(0, t) = 0, u(Pi, t) = sin(t), u(x, 0) = 0, (D[2](u))(x, 0) = 0; -1
 

> pdsolve([pde__19, iv__19])
 

u(x, t) = `/`(`*`(`+`(`*`(Sum(`+`(`-`(`/`(`*`(2, `*`(`+`(`*`(`+`(`-`(`*`(2, `*`(`^`(n, 4)))), `-`(`*`(`/`(1, 2), `*`(Pi, `*`(`^`(n, 2))))), `*`(`/`(1, 8), `*`(Pi))), `*`(sin(`+`(`*`(2, `*`(n, `*`(t)))...
u(x, t) = `/`(`*`(`+`(`*`(Sum(`+`(`-`(`/`(`*`(2, `*`(`+`(`*`(`+`(`-`(`*`(2, `*`(`^`(n, 4)))), `-`(`*`(`/`(1, 2), `*`(Pi, `*`(`^`(n, 2))))), `*`(`/`(1, 8), `*`(Pi))), `*`(sin(`+`(`*`(2, `*`(n, `*`(t)))...
u(x, t) = `/`(`*`(`+`(`*`(Sum(`+`(`-`(`/`(`*`(2, `*`(`+`(`*`(`+`(`-`(`*`(2, `*`(`^`(n, 4)))), `-`(`*`(`/`(1, 2), `*`(Pi, `*`(`^`(n, 2))))), `*`(`/`(1, 8), `*`(Pi))), `*`(sin(`+`(`*`(2, `*`(n, `*`(t)))...
 

8. Improvements in series methods for Laplace PDE problems 

Example 20: A Laplace PDE with BC representing the inside of a quarter circle of radius 1. The solution we seek is bounded as r approaches 0: 

> pde__20 := `+`(diff(u(r, theta), r, r), `/`(`*`(diff(u(r, theta), r)), `*`(r)), `/`(`*`(diff(u(r, theta), theta, theta)), `*`(`^`(r, 2)))) = 0; -1
 

> iv__20 := u(r, 0) = 0, u(r, `+`(`*`(`/`(1, 2), `*`(Pi)))) = 0, (D[1](u))(1, theta) = f(theta); -1
 

> `assuming`([pdsolve([pde__20, iv__20], HINT = boundedseries(r = [0]))], [`<=`(0, theta), `<=`(theta, `+`(`*`(`/`(1, 2), `*`(Pi)))), `<=`(0, r), `<=`(r, 1)])
 

Typesetting:-mprintslash([u(r, theta) = Sum(`+`(`/`(`*`(2, `*`(Int(`*`(f(theta), `*`(sin(`+`(`*`(2, `*`(n, `*`(theta))))))), theta = 0 .. `+`(`*`(`/`(1, 2), `*`(Pi)))), `*`(`^`(r, `+`(`*`(2, `*`(n))))...
 

 

Example 21: A Laplace PDE for which we seek a solution that remains bounded as y approaches infinity: 

> pde__21 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y)) = 0; -1
 

> iv__21 := u(0, y) = A, u(a, y) = 0, u(x, 0) = 0; -1
 

> `assuming`([pdsolve([pde__21, iv__21], HINT = boundedseries(y = infinity))], [`>`(a, 0)])
 

u(x, y) = `/`(`*`(`+`(`*`(Sum(`+`(`-`(`/`(`*`(2, `*`(A, `*`(sin(`/`(`*`(n, `*`(Pi, `*`(x))), `*`(a))), `*`(exp(`+`(`-`(`/`(`*`(n, `*`(Pi, `*`(y))), `*`(a))))))))), `*`(n, `*`(Pi))))), n = 1 .. infinit...
 

 

9. Better simplification of answers: 

 

Example 22: For this wave PDE with a source term, pdsolve used to return a solution with uncomputed integrals: 

> pde__22 := diff(u(x, t), t, t) = `+`(`*`(A, `*`(x)), diff(u(x, t), x, x)); -1
 

> iv__22 := u(0, t) = 0, u(1, t) = 0, u(x, 0) = 0, (D[2](u))(x, 0) = 0; -1
 

> pdsolve([pde__22, iv__22])
 

u(x, t) = `+`(Sum(`+`(`/`(`*`(2, `*`(`^`(-1, n), `*`(A, `*`(sin(`*`(n, `*`(Pi, `*`(x)))), `*`(cos(`*`(n, `*`(Pi, `*`(t))))))))), `*`(`^`(n, 3), `*`(`^`(Pi, 3))))), n = 1 .. infinity), `*`(`/`(1, 6), `...
 

 

Example 23: A BC at x = infinityis now handled by pdsolve: 

> pde__23 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y)) = 0; -1
 

> iv__23 := u(0, y) = sin(y), u(x, 0) = 0, u(x, a) = 0, u(infinity, y) = 0; -1
 

> `assuming`([pdsolve([pde__23, iv__23])], [`<`(0, a)])
 

Typesetting:-mprintslash([u(x, y) = Sum(`+`(`-`(`/`(`*`(2, `*`(Pi, `*`(n, `*`(PIECEWISE([-1, a = `*`(Pi, `*`(n))], [`/`(`*`(sin(a), `*`(`^`(-1, n))), `*`(`+`(`*`(Pi, `*`(n)), `-`(a)))), otherwise]), `...
 

 

Example 24: A reduced Helmholtz PDE in a square of side Previously, pdsolve returned a series starting at n = 0, when the limit of the n = 0 term is 0. 

> pde__24 := `+`(diff(u(x, y), x, x), diff(u(x, y), y, y), `-`(`*`(k, `*`(u(x, y))))) = 0; -1
 

> iv__24 := u(0, y) = 1, u(Pi, y) = 0, u(x, 0) = 0, u(x, Pi) = 0; -1
 

> `assuming`([pdsolve([pde__24, iv__24])], [`<`(0, k)])
 

u(x, y) = Sum(`+`(`/`(`*`(2, `*`(sin(`*`(n, `*`(y))), `*`(`+`(`-`(1), `^`(-1, n)), `*`(`+`(`-`(exp(`+`(`-`(`*`(`+`(`-`(`*`(2, `*`(Pi))), x), `*`(`^`(`+`(`*`(`^`(n, 2)), k), `/`(1, 2)))))))), exp(`*`(`...
 

 

10. Linear differential operator: more solutions are now successfully computed 

 

Example 25: 

> pde__25 := diff(w(x1, x2, x3, t), t) = `+`(diff(w(x1, x2, x3, t), x1, x1), diff(w(x1, x2, x3, t), x2, x2), diff(w(x1, x2, x3, t), x3, x3)); -1
 

> iv__25 := w(x1, x2, x3, 1) = `+`(`*`(exp(a), `*`(`^`(x1, 2))), `*`(x2, `*`(x3))); -1
 

> pdsolve([pde__25, iv__25])
 

w(x1, x2, x3, t) = `+`(`*`(`+`(`*`(`^`(x1, 2)), `*`(2, `*`(t)), `-`(2)), `*`(exp(a))), `*`(x2, `*`(x3)))
 

 

Example 26: 

> pde__26 := `+`(diff(w(x1, x2, x3, t), t), `-`((D[1, 2](w))(x1, x2, x3, t)), `-`((D[1, 3](w))(x1, x2, x3, t)), `-`((D[3, 3](w))(x1, x2, x3, t)), (D[2, 3](w))(x1, x2, x3, t)) = 0; -1
 

> iv__26 := w(x1, x2, x3, a) = `+`(exp(x1), x2, `-`(`*`(3, `*`(x3)))); -1
 

> pdsolve([pde__26, iv__26])
 

w(x1, x2, x3, t) = `+`(exp(x1), x2, `-`(`*`(3, `*`(x3))))
 

 

Example 27: 

> pde__27 := diff(w(x1, x2, x3, t), t, t) = `+`((D[1, 2](w))(x1, x2, x3, t), (D[1, 3](w))(x1, x2, x3, t), (D[3, 3](w))(x1, x2, x3, t), `-`((D[2, 3](w))(x1, x2, x3, t))); -1
 

> iv__27 := w(x1, x2, x3, a) = `+`(`*`(`^`(x1, 3), `*`(`^`(x2, 2))), x3), (D[4](w))(x1, x2, x3, a) = `+`(`-`(`*`(x2, `*`(x3))), x1); -1
 

> pdsolve([pde__27, iv__27], w(x1, x2, x3, t))
 

w(x1, x2, x3, t) = `+`(`*`(`^`(x1, 3), `*`(`^`(x2, 2))), `*`(3, `*`(x2, `*`(`^`(`+`(`-`(t), a), 2), `*`(`^`(x1, 2))))), `*`(`/`(1, 2), `*`(`+`(`-`(t), a), `*`(`+`(`*`(`^`(a, 3)), `-`(`*`(3, `*`(`^`(a,...
w(x1, x2, x3, t) = `+`(`*`(`^`(x1, 3), `*`(`^`(x2, 2))), `*`(3, `*`(x2, `*`(`^`(`+`(`-`(t), a), 2), `*`(`^`(x1, 2))))), `*`(`/`(1, 2), `*`(`+`(`-`(t), a), `*`(`+`(`*`(`^`(a, 3)), `-`(`*`(3, `*`(`^`(a,...
 

 

 

11. More problems in 3 variables are now solved 

 

Example 28: A Schrödinger type PDE in two space dimensions, where ℏ is Planck's constant. 

> pde__28 := `*`(I, `*`(`ℏ`, `*`(diff(f(x, y, t), t)))) = `+`(`-`(`/`(`*`(`/`(1, 2), `*`(`^`(`ℏ`, 2), `*`(`+`(diff(f(x, y, t), x, x), diff(f(x, y, t), y, y))))), `*`(m)))); -1
 

> iv__28 := f(x, y, 0) = `*`(sqrt(2), `*`(`+`(`*`(sin(`+`(`*`(2, `*`(Pi, `*`(x))))), `*`(sin(`*`(Pi, `*`(y))))), `*`(sin(`*`(Pi, `*`(x))), `*`(sin(`+`(`*`(3, `*`(Pi, `*`(y)))))))))), f(0, y, t) = 0, f(1...
 

> pdsolve([pde__28, iv__28])
 

f(x, y, t) = `*`(`^`(2, `/`(1, 2)), `*`(sin(`*`(Pi, `*`(x))), `*`(`+`(`*`(2, `*`(sin(`*`(Pi, `*`(y))), `*`(cos(`*`(Pi, `*`(x))), `*`(exp(`+`(`-`(`/`(`*`(`+`(`*`(`/`(5, 2), `*`(I))), `*`(`ℏ`, `*`(...
 

 

Example 29: This problem represents the temperature distribution in a thin rectangular plate whose lateral surfaces are insulated yet is losing heat by convection along the boundary x = 1, into a surrounding medium at temperature 0 (Articolo example 6.6.3): 

> pde__29 := diff(u(x, y, t), t) = `+`(`*`(`/`(1, 50), `*`(diff(u(x, y, t), x, x))), `*`(`/`(1, 50), `*`(diff(u(x, y, t), y, y)))); -1
 

> iv__29 := (D[1](u))(0, y, t) = 0, `+`((D[1](u))(1, y, t), u(1, y, t)) = 0, u(x, 0, t) = 0, u(x, 1, t) = 0, u(x, y, 0) = `*`(`+`(1, `-`(`*`(`/`(1, 3), `*`(`^`(x, 2))))), `*`(y, `*`(`+`(1, `-`(y))))); -...
 

> `assuming`([pdsolve([pde__29, iv__29])], [`<=`(0, x), `<=`(x, 1), `<=`(0, y), `<=`(y, 1)]); 1
 

Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
 

 

Example 30: exercise 7.15 from Articolo's textbook, with six boundary/initial conditions: 

> pde__30 := diff(u(x, y, t), t, t) = `+`(`*`(`/`(1, 4), `*`(diff(u(x, y, t), x, x))), `*`(`/`(1, 4), `*`(diff(u(x, y, t), y, y))), `-`(`*`(`/`(1, 10), `*`(diff(u(x, y, t), t))))); -1
 

> iv__30 := (D[1](u))(0, y, t) = 0, `+`((D[1](u))(1, y, t), u(1, y, t)) = 0, `+`((D[2](u))(x, 0, t), `-`(u(x, 0, t))) = 0, (D[2](u))(x, 1, t) = 0, u(x, y, 0) = `*`(`+`(1, `-`(`*`(`/`(1, 3), `*`(`^`(x, 2...
iv__30 := (D[1](u))(0, y, t) = 0, `+`((D[1](u))(1, y, t), u(1, y, t)) = 0, `+`((D[2](u))(x, 0, t), `-`(u(x, 0, t))) = 0, (D[2](u))(x, 1, t) = 0, u(x, y, 0) = `*`(`+`(1, `-`(`*`(`/`(1, 3), `*`(`^`(x, 2...
iv__30 := (D[1](u))(0, y, t) = 0, `+`((D[1](u))(1, y, t), u(1, y, t)) = 0, `+`((D[2](u))(x, 0, t), `-`(u(x, 0, t))) = 0, (D[2](u))(x, 1, t) = 0, u(x, y, 0) = `*`(`+`(1, `-`(`*`(`/`(1, 3), `*`(`^`(x, 2...
 


In this problem, there are three independent variables, therefore two eigenvalues (constants that appear separating variables by product) in the Sturm-Liouville problem. However, after solving the separated system and also for the eigenvalues, the second eigenvalue is equal to the first one, and it cannot be expressed in terms of known functions, because the equation it solves cannot be inverted. Its solution is, however, computable
 

> pdsolve([pde__30, iv__30])
 

Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mrow(Typesetting:-mi(
 

 

For information on how to verify or plot a solution like the one above, see the section "Sturm-Liouville problem with eigenvalues that are the roots of algebraic expressions which cannot be inverted" in the pdsolve with boundary conditions help page. 

References 

Articolo, G. A. (2009). Partial differential equations and boundary value problems with Maple (2nd ed.). Amsterdam: Acad. Press/Elsevier.