I would like to find the solution $(U,V)\equiv (U(x,t),V(x,t))$ of the following system.

\begin{equation} \displaystyle\left\{\begin{array}{l} \frac{\partial U}{\partial t}+(a+b x)\frac{\partial U}{\partial x}-(c+k_1)U+k_1V=0, \\ \frac{\partial V}{\partial t}+(a+b x)\frac{\partial V}{\partial x}-(c+k_2)V+k_2 U=0, \\ \end{array}\right. t\in [s,T] \end{equation}

with the boundary conditions (where $W$ could be $U$ and $V$)

\begin{equation} \left\{\begin{array}{l} W(x,t)=0 \ \ \text{as} \ \ x\to-\infty,\\ W(x,t)\to e^x \ \ \text{as} \ \ x\to\infty,\\ W(x,T)=\max \{ e^x-100,0\} \\ \end{array}\right. \end{equation}

Assuming that above system has a unique solution, $(U,V)$, how can I find that solution. I would be satisfied to given a reference to a paper from which I can learn a method to solve it.

Can Mathematica solve this system?

Added after I got the answer from the above system: when I modified the codes of bbgodfrey to solve the followin system :

\begin{equation} \displaystyle\left\{\begin{array}{l} \frac{\partial U}{\partial t}+(\textbf{a}_1+b x)\frac{\partial U}{\partial x}-(c+k_1)U+k_1V=0, \\ \frac{\partial V}{\partial t}+(\textbf{a}_2+b x)\frac{\partial V}{\partial x}-(c+k_2)V+k_2 U=0, \\ \end{array}\right. t\in [s,T] \end{equation}

when I run the program, Mathematican seems runs out of memory. Is there any way to fix this issues or this is because Mathematica cannot solve the new system ?

  • $\begingroup$ Welcome to Mathematica.SE! I hope you will become a regular contributor. To get started, 1) take the introductory Tour now, 2) when you see good questions and answers, vote them up by clicking the gray triangles, because the credibility of the system is based on the reputation gained by users sharing their knowledge, 3) remember to accept the answer, if any, that solves your problem, by clicking the checkmark sign, and 4) give help too, by answering questions in your areas of expertise. $\endgroup$
    – bbgodfrey
    Jul 11, 2015 at 2:29
  • 1
    $\begingroup$ Please write your equations in Mathematica format. Also, what have you tried? DSolve, perhaps? $\endgroup$
    – bbgodfrey
    Jul 11, 2015 at 2:31
  • $\begingroup$ I haven't actually tried it (would prefer to have you type the code first). But you can probably get a general solution and then adjust the integration constants to satisfy the boundary conditions as a second step. So yes, Mathematica can probably do it, but you should show what you have tried first. $\endgroup$
    – Jens
    Jul 11, 2015 at 3:47

1 Answer 1


The constant c can be eliminated from the equations by a standard transformation.

eq1 = (Unevaluated[D[u[x, t], t] + (a + b x) D[u[x, t], x] - (c + k1) u[x, t] + k1 v[x, t]]
    /. {u[x, t] -> uu[x, t] E^(c t), v[x, t] -> vv[x, t] E^(c t)})/E^(c t) // Simplify
(* -(k1*uu[x, t]) + k1*vv[x, t] + Derivative[0, 1][uu][x, t] + 
   a*Derivative[1, 0][uu][x, t] + b*x*Derivative[1, 0][uu][x, t] *)

and similarly for the second expression, designated eq2. Taking the difference between these two expressions yields

Collect[(eq1 - eq2) // Simplify, {a + b x, k1 + k2}, Simplify]
(* (k1 + k2)*(-uu[x, t] + vv[x, t]) + Derivative[0, 1][uu][x, t] - Derivative[0, 1][vv][x, t]
    + (a + b*x)*(Derivative[1, 0][uu][x, t] - Derivative[1, 0][vv][x, t]) *)

which can be rewritten as

-((k1 + k2)*zz[x, t]) + Derivative[0, 1][zz][x, t] + (a + b*x)*Derivative[1, 0][zz][x, t]

where zz == uu - vv. And, this equation can be solved

First@DSolve[% == 0, zz[x, t], {x, t}]
(* {zz[x, t] -> (a + b*x)^(k1/b + k2/b) C[1][(b t - Log[a + b x])/b]} *)

Undoing the original transformation then yields

First@Solve[% /. Rule -> Equal /. zz[x, t] -> z[x, t] E^(-c t), z[x, t]]
{* {z[x, t] -> E^(c t) (a + b*x)^(k1/b + k2/b) C[1][(b t - Log[a + b x])/b]} *)

Note that C[1] is an arbitrary function of (b t - Log[a + b x])/b, which can be chosen to satisfy the boundary conditions in x.

Alternative, Simpler Approach

DSolve cannot integrate the two equations as written in the question. However, the equations can be separated, after which DSolve can integrate them without difficulty.

r0 = First@Solve[{z[x, t] == u[x, t] - v[x, t], 
  y[x, t] == u[x, t] + v[x, t] k1/k2}, {u[x, t], v[x, t]}];
eq1 = (Unevaluated[D[u[x, t], t] + (a + b x) D[u[x, t], x] - (c + k1) u[x, t] + 
  k1 v[x, t]] /. %) // Simplify;
eq2 = (Unevaluated[D[v[x, t], t] + (a + b x) D[v[x, t], x] - (c + k2) v[x, t] + 
  k2 u[x, t]] /. %%) // Simplify;

Simplify[eq1 - eq2];
r1 = Simplify[#] & /@ DSolve[% == 0, z[x, t], {x, t}][[1, 1]]
(* z[x, t] -> (a + b x)^((c + k1 + k2)/b) C[1][t - Log[a + b x]/b] *)

Simplify[eq1 + eq2 k1/k2];
r2 = Simplify[#] & /@ DSolve[% == 0, y[x, t], {x, t}][[1, 1]] /. C[1] -> C[2]
(* y[x, t] -> (a + b x)^(c/b) C[2][t - Log[a + b x]/b] *)

r0 /. {r1, r2}
(* {u[x, t] -> -((-k1 (a + b x)^((c + k1 + k2)/b)
  C[1][t - Log[a + b x]/b] - k2 (a + b x)^(c/b) C[2][t - Log[a + b x]/b])/(k1 + k2)), 
    v[x, t] -> -((k2 (a + b x)^((c + k1 + k2)/b) 
  C[1][t - Log[a + b x]/b] - k2 (a + b x)^(c/b) C[2][t - Log[a + b x]/b])/(k1 + k2))} *)

Note that the solution contains two arbitrary functions C[1] and C[2] of (b t - Log[a + b x])/b, as it must, because the original equations form a second order system of advective equations.

Note also that the earlier, incomplete solution would eventually have reached the same point.

  • $\begingroup$ thanks SO MUCH ! YOU are awesome : )) $\endgroup$ Jul 11, 2015 at 13:36
  • $\begingroup$ @DaveNguyen You are welcome. However, I have a much simpler approach, which I shall add to my answer in a few minutes. Thanks for accepting the answer. $\endgroup$
    – bbgodfrey
    Jul 11, 2015 at 13:49
  • $\begingroup$ Thanks for your work ! I truly appreciate it ! $\endgroup$ Jul 11, 2015 at 13:55
  • $\begingroup$ Dear bbgodfrey, When I changed my system to \begin{equation} \displaystyle\left\{\begin{array}{l} \frac{\partial U}{\partial t}+(a_2+b x)\frac{\partial U}{\partial x}-(c+k_1)U+k_1V=0, \\ \frac{\partial V}{\partial t}+(a_2+b x)\frac{\partial V}{\partial x}-(c+k_2)V+k_2 U=0, \\ \end{array}\right. t\in [s,T] \end{equation} I modified your code to run it, Mathematica is just run out of memory . I would like to ask is there any way to fix this problem ? Thanks you ! $\endgroup$ Jul 11, 2015 at 20:07
  • $\begingroup$ @DaveNguyen Having a1 and a2 different is a much harder problem, and I do not believe that it is still possible to separate the system into two uncoupled equations. I suggest that you wait until Monday and then ask a new question in order to get the most responses. Certainly, I shall take a hard look at it, but I am not optimistic about obtaining a closed form solution. As an alternative, have you considered a numerical solution in a bounded region of x? $\endgroup$
    – bbgodfrey
    Jul 11, 2015 at 21:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.