Exact solutions for PDE and Boundary / Initial Conditions

 

Significant developments happened during 2018 in Maple's ability for the exact solving of PDE with Boundary / Initial conditions. This is work in collaboration with Katherina von Bülow. Part of these developments were mentioned in previous posts.  The project is still active but it's December, time to summarize.

 

First of all thanks to all of you who provided feedback. The new functionality is described below, in 11 brief Sections, with 30 selected examples and a few comments. A worksheet with this contents is linked at the end of this post. Some of these improvements appeared first in 2018.1, then in 2018.2, but other ones are posterior. To reproduce the input/output below in Maple 2018.2.1, the latest Maplesoft Physics Updates (version 269 or higher) needs to be installed.

 

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))

iv__1 := u(-A, t) = 0, u(x, B) = 10

 

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)}

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

(1)

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})

[diff(upsilon(xi, tau), tau) = (1/4)*(diff(diff(upsilon(xi, tau), xi), xi)), upsilon(0, tau) = 0, upsilon(xi, 0) = 10]

(2)

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))

(3)

 

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))

iv__2 := u(x, 1) = piecewise(0 <= x, 0, x < 0, 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

(4)

 

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)

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

`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+t-7)^2)+(1/2)*exp(-(x+t+5)^2)+(1/2)*t-1/2

(5)

 

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

iv__4 := (D[1](u))(1, t) = 0, u(x, 0) = exp(-x^2), (D[2](u))(x, 0) = 0

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

u(x, t) = piecewise((1/2)*t < x-1, (1/2)*exp(-(1/4)*(t+2*x)^2)+(1/2)*exp(-(1/4)*(t-2*x)^2), x-1 < (1/2)*t, (1/2)*exp(-(1/4)*(t+2*x)^2)+(1/2)*exp(-(1/4)*(t-2*x+4)^2))

(6)

 

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)

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

pdsolve([pde__5, iv__5], u(x, t))

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), zeta = (-t+tau+1)*c+x .. x+c*(t-1-tau)), tau = 0 .. t-1)+(2*t-2)*c*h(x)+2*g(x)*c)/c

(7)

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), zeta = (-t+tau+1)*c+x .. x+c*(t-1-tau)), tau = 0 .. t-1)+(2*t-2)*c*h(x)+2*g(x)*c)/c, [pde__5, iv__5])

[0, 0, 0]

(8)

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

 

The pdsolve/BC solving methods can now be indicated, either to be used for solving, as in methods = [method__1, method__2, () .. ()] to be tried in the indicated order, 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`

indices(`pdsolve/BC/methods`)

[1], [2], [3], [2, "Series"], [2, "Heat"], ["high_order"], ["system"], [2, "Wave"], [2, "SpecializeArbitraryFunctions"]

(9)


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

`pdsolve/BC/methods`[1]

["SpecializeArbitraryFunctions", "Fourier", "Laplace", "Generic", "PolynomialSolutions", "LinearDifferentialOperator"]

(10)

`pdsolve/BC/methods`[2]

["SpecializeArbitraryFunctions", "SpecializeArbitraryConstants", "Wave", "Heat", "Series", "Laplace", "Fourier", "Generic", "PolynomialSolutions", "LinearDifferentialOperator", "Superposition"]

(11)

 

Some methods have sub-methods (their existence is visible in (9)):

`pdsolve/BC/methods`[2, "Series"]

["ThreeBCsincos", "FourBC", "ThreeBC", "ThreeBCPeriodic", "WithSourceTerm", "ThreeVariables"]

(12)

`pdsolve/BC/methods`[2, "Heat"]

["SemiInfiniteDomain", "WithSourceTerm"]

(13)

 

Example 6:

pde__6 := diff(u(r, theta), r, r)+diff(u(r, theta), theta, theta) = 0

iv__6 := u(2, theta) = 3*sin(2*theta)+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(I*r-2*I+theta)

(14)

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+(2*I)*theta)+1

(15)

Example 7:

pde__7 := diff(u(x, y), x, x)+diff(u(x, y), y, y) = 0

iv__7 := u(x, 0) = Dirac(x)

pdsolve([pde__7, iv__7])

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

(16)

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

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

(17)

convert(u(x, y) = invfourier(exp(-s*y), s, x), Int)

u(x, y) = (1/2)*(Int(exp(-s*y+I*s*x), s = -infinity .. infinity))/Pi

(18)

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

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

(19)

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 constant (eigenvalue) 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  BesselJ functions and of the non-inversible 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) = (diff(u(r, theta, t), r)+r*(diff(u(r, theta, t), r, r))+(diff(u(r, theta, t), theta, theta))/r)/(25*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)

pdsolve([pde__8, iv__8])

u(r, theta, t) = `casesplit/ans`(Sum(-(4/3)*BesselJ(1, lambda[n]*r)*sin(theta)*exp(-(1/25)*lambda[n]^2*t)*(BesselJ(0, lambda[n])*lambda[n]^3-BesselJ(1, lambda[n])*lambda[n]^2+4*lambda[n]*BesselJ(0, lambda[n])-8*BesselJ(1, lambda[n]))/(lambda[n]^3*(BesselJ(0, lambda[n])^2*lambda[n]+BesselJ(1, lambda[n])^2*lambda[n]-2*BesselJ(0, lambda[n])*BesselJ(1, lambda[n]))), n = 0 .. infinity), {And(-BesselJ(1, lambda[n])+BesselJ(2, lambda[n])*lambda[n] = 0, 0 < lambda[n])})

(20)

 

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)

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

u(r, theta, t) = `casesplit/ans`(Sum(-(4/3)*BesselJ(1, lambda[n]*r)*sin(theta)*exp(-(1/25)*lambda[n]^2*t)*(lambda[n]^2+4)/(BesselJ(0, lambda[n])*lambda[n]^3), n = 1 .. infinity), {And(lambda[n] = BesselJZeros(1, n), 0 < lambda[n])})

(21)

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's textbook, example 8.4.3):

pde__9 := diff(u(x, t), t) = (1/20)*(diff(u(x, t), x, x))+t

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

pdsolve([pde__9, iv__9], u(x, t))

u(x, t) = `casesplit/ans`(Sum(piecewise(lambda[n] = 0, 0, (80/3)*exp(-(1/20)*lambda[n]^2*t)*sin(lambda[n]*x)*(lambda[n]^2*cos(lambda[n])+lambda[n]*sin(lambda[n])+4*cos(lambda[n])-4)/(lambda[n]^2*(sin(2*lambda[n])-2*lambda[n]))), n = 0 .. infinity)+Int(Sum(piecewise(lambda[n] = 0, 0, 4*exp(-(1/20)*lambda[n]^2*(t-tau))*sin(lambda[n]*x)*tau*(cos(lambda[n])-1)/(sin(2*lambda[n])-2*lambda[n])), n = 0 .. infinity), tau = 0 .. t)+(5/2)*x+5, {And(tan(lambda[n])+lambda[n] = 0, 0 < lambda[n])})

(22)

For information on how to test or plot a solution like the one above, please see the end of the Mapleprimes post "Sturm-Liouville problem with eigenvalues that are the roots of algebraic expressions which cannot be inverted" 

 

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

iv__10 := u(0, y) = 0, u(Pi, y) = sinh(Pi)*cos(y), u(x, 0) = sin(x), u(x, Pi) = -sinh(x)

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)*sin(n*x)*(exp(2*n*y)-1)/(Pi*(n^2+1)*(exp(2*Pi*n)-1)), n = 1 .. infinity))+(exp(2*Pi)-1)*(Sum(2*sin(n*y)*exp(n*(Pi-x))*n*sinh(Pi)*((-1)^n+1)*(exp(2*n*x)-1)/(Pi*(exp(2*Pi*n)-1)*(n^2-1)), n = 2 .. infinity))+sin(x)*(exp(-y+2*Pi)-exp(y)))/(exp(2*Pi)-1)

(23)

 

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

iv__11 := u(x, 0) = 0, (D[2](u))(x, 0) = x^2

pdsolve([pde__11, iv__11], u(x, y))

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

(24)

 

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))

iv__12 := u(x, 0) = f(x)

pdsolve([pde__12, iv__12])

u(x, t) = (1/4)*(Int((4/3)*Pi*f(-zeta)*(-(x+zeta)/(-t)^(1/3))^(1/2)*BesselK(1/3, -(2/9)*3^(1/2)*(x+zeta)*(-(x+zeta)/(-t)^(1/3))^(1/2)/(-t)^(1/3))/(-t)^(1/3), zeta = -infinity .. infinity))/Pi^2

(25)

 

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

pde__13 := diff(u(x, y), y, x) = sin(x)*sin(y)

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

pdsolve([pde__13, iv__13])

u(x, y) = (1/2)*cos(x-y)+(1/2)*cos(x+y)+cos(y)

(26)

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

infolevel[pdsolve] := 2

2

(27)

Example 14:

pde__14 := diff(u(x, y), x, x)+diff(u(x, y), y, y) = 0

iv__14 := u(x, 0) = 0, u(x, b) = h(x)

pdsolve([pde__14, iv__14])

* 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 "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 "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-y))*fourier(h(x), x, s)/(exp(2*s*b)-1), s, x)

(28)

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

u(x, y) = (1/2)*(Int((Int(h(x)*exp(-I*x*s), x = -infinity .. infinity))*exp(s*(b+y)+I*s*x)/(exp(2*s*b)-1), s = -infinity .. infinity))/Pi-(1/2)*(Int((Int(h(x)*exp(-I*x*s), x = -infinity .. infinity))*exp(s*(b-y)+I*s*x)/(exp(2*s*b)-1), s = -infinity .. infinity))/Pi

(29)

Reset the infolevel to avoid displaying the computational flow:

infolevel[pdsolve] := 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))

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

pdsolve([pde__15, iv__15], u(x, t))

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

(30)

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^2*n^2), n = 1 .. infinity)+13*t+(1/2)*x^2, [pde__15, iv__15])

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

(31)

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 superimpose 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)*(-1+(-1)^n)/(Pi^2*n^2), n = 1 .. infinity)+13*t+(1/2)*x^2))), (1/2)*x^2+x], x = 0 .. 1)

 

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))

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

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

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

(32)

 

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

iv__17 := (D[1](u))(0, t) = 0, u(x, 0) = 0, (D[2](u))(x, 0) = x^3

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

u(x, t) = piecewise(3*t < x, 9*t^3*x+t*x^3, x < 3*t, (27/4)*t^4+(9/2)*t^2*x^2+(1/12)*x^4)

(33)

 

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)

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

pdsolve([pde__18, iv__18])

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

(34)

 

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

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

pdsolve([pde__19, iv__19])

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

(35)

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

iv__20 := u(r, 0) = 0, u(r, (1/2)*Pi) = 0, (D[1](u))(1, theta) = f(theta)

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

u(r, theta) = Sum(2*(Int(f(theta)*sin(2*n*theta), theta = 0 .. (1/2)*Pi))*r^(2*n)*sin(2*n*theta)/(Pi*n), n = 1 .. infinity)

(36)

 

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

iv__21 := u(0, y) = A, u(a, y) = 0, u(x, 0) = 0

`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 .. infinity))*a-A*(x-a))/a

(37)

 

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)

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

pdsolve([pde__22, iv__22], u(x, t))

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)*(-x^3+x)*A

(38)

 

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

iv__23 := u(0, y) = sin(y), u(x, 0) = 0, u(x, a) = 0, u(infinity, y) = 0

`assuming`([pdsolve([pde__23, iv__23], u(x, y))], [0 < a])

u(x, y) = Sum(2*piecewise(a = Pi*n, (1/2)*Pi*n, -Pi*(-1)^n*sin(a)*n*a/(Pi^2*n^2-a^2))*exp(-n*Pi*x/a)*sin(n*Pi*y/a)/a, n = 1 .. infinity)

(39)

 

Example 24: A reduced Helmholtz PDE in a square of side "Pi. "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

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

`assuming`([pdsolve([pde__24, iv__24], u(x, y))], [0 < k])

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

(40)

 

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)

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

pdsolve([pde__25, iv__25])

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

(41)

 

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

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

pdsolve([pde__26, iv__26])

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

(42)

 

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)

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

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^2*t+3*a*t^2-t^3-2)*x1-(1/6)*a^3+(1/2)*a^2*t+(1/6)*(-3*t^2+6*x2*x3)*a+(1/6)*t^3-t*x2*x3+x3

(43)

 

 

11. More problems in 3 variables are now solved

 

 

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

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

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, y, t) = 0, f(x, 1, t) = 0, f(x, 0, t) = 0

pdsolve([pde__28, iv__28], f(x, y, t))

f(x, y, t) = 2^(1/2)*sin(Pi*x)*(2*exp(-((5/2)*I)*`&hbar;`*t*Pi^2/m)*cos(Pi*x)*sin(Pi*y)+exp(-(5*I)*`&hbar;`*t*Pi^2/m)*sin(3*Pi*y))

(44)

 

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)+diff(u(x, y, t), y, y))

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], u(x, y, t))], [0 <= x, x <= 1, 0 <= y, y <= 1])

u(x, y, t) = `casesplit/ans`(Sum(Sum((32/3)*exp(-(1/50)*t*(Pi^2*n^2+lambda[n1]^2))*(-1+(-1)^n)*cos(lambda[n1]*x)*sin(n*Pi*y)*(-lambda[n1]^2*sin(lambda[n1])+lambda[n1]*cos(lambda[n1])-sin(lambda[n1]))/(Pi^3*n^3*lambda[n1]^2*(sin(2*lambda[n1])+2*lambda[n1])), n1 = 0 .. infinity), n = 1 .. infinity), {And(tan(lambda[n1])*lambda[n1]-1 = 0, 0 < lambda[n1])})

(45)

 

Articolo's Exercise 7.15, with 6 boundary/initial conditions, two for each variable

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

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)*(1-(1/3)*(y-1)^2), (D[3](u))(x, y, 0) = 0

 

This problem is tricky ... There are three independent variables, therefore two eigenvalues (constants that appear separating variables by product) in the Sturm-Liouville problem. But after solving the separated system and also for the eigenvalues, the second eigenvalue is equal to the first one, and in addition cannot be expressed in terms of known functions, because the equation it solves cannot be inverted.

 

pdsolve([pde__30, iv__30])

u(x, y, t) = `casesplit/ans`(Sum((1/6)*(lambda[n]^2*sin(lambda[n])-lambda[n]*cos(lambda[n])+sin(lambda[n]))*cos(lambda[n]*x)*(exp((1/10)*t*(-200*lambda[n]^2+1)^(1/2))*(-200*lambda[n]^2+1)^(1/2)+exp((1/10)*t*(-200*lambda[n]^2+1)^(1/2))+(-200*lambda[n]^2+1)^(1/2)-1)*exp(-(1/20)*t*((-200*lambda[n]^2+1)^(1/2)+1))*(cos(lambda[n]*y)*lambda[n]+sin(lambda[n]*y))*(6*lambda[n]^2*cos(lambda[n])^2+cos(lambda[n])^2-5*lambda[n]^2-1)/((-200*lambda[n]^2+1)^(1/2)*(-cos(lambda[n])^4+(lambda[n]*sin(lambda[n])-1)*cos(lambda[n])^3+(lambda[n]^2+lambda[n]*sin(lambda[n])+1)*cos(lambda[n])^2+(lambda[n]^2+2*lambda[n]*sin(lambda[n])+1)*cos(lambda[n])+lambda[n]*(lambda[n]+sin(lambda[n])))*lambda[n]^4*(cos(lambda[n])-1)), n = 0 .. infinity), {And(tan(lambda[n])*lambda[n]-1 = 0, 0 < lambda[n])})

(46)

``

 


 

Download PDE_and_BC_during_2018.mw

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft


Please Wait...