2 of 4
Added example eigenfunctions
SPPearce
  • 5.7k
  • 2
  • 18
  • 40

This should be your equation as given by your LaTeX code (please check):

eqn = {D[V[t, x], t] == (gpar[x] ρ[t, x]/ρ0[x]) - 
    (D[ρ[t, x] + T[t, x], x]/(γ ρ0[x])) + 4/3 ϵ D[V[t, x], x, x], 
    D[ρ[t, x], t] == -D[ρ0[x] V[t, x], x], 
    D[T[t, x], t] == D[ρ0[x] V[t, x], x] - V[t, x] p0'[x] - γ p0[x] D[V[t, x], x] 
        + d γ D[T[t, x], x, x]}

As I mentioned in a comment, note that there is only 5 spatial derivatives in the unknown variables, and that the highest derivatives for $\rho'$ and $V''$ both appear together in the same equation.

Assume the ansatz of $a(t,x) = e^{\lambda t} a(x)$ for the three functions $\rho, V, T$:

eqnSubbed = Simplify[eqn /. {ρ -> Function[{t, x}, Exp[λ t] ρx[x]],  
     T -> Function[{t, x}, Exp[λ t] Tx[x]], V -> Function[{t, x}, Exp[λ t] Vx[x]]}, 
  {t > 0, x > 0, ρx[x] > 0, γ > 0}] /. {ρx -> ρ, Tx -> T, Vx -> V}; 

And then we can solve the second equation for $\rho$, to reduce to just a pair of second order equations for $V$ and $T$:

eqnSubbed2 = Simplify[eqnSubbed[[{1, 3}]] /. DSolve[eqnSubbed[[2]], ρ, x][[1]]];

Now I have a package for numerically calculating solutions of eigenvalue problems using the Evans function via the method of compound matrices, which is hosted on github. See my answers to other questions or the github for some more details.

First we install the package (only need to do this the first time):

Needs["PacletManager`"]
PacletInstall["CompoundMatrixMethod", 
    "Site" -> "http://raw.githubusercontent.com/paclets/Repository/master"]

Then we first need to turn the ODEs into a matrix form $\mathbf{y}'=\mathbf{A} \cdot \mathbf{y}$, using my function ToMatrixSystem. Note that this is how I noticed that your system was essentially a DAE, as applying it directly doesn't work (something for me to catch and fix, or at least error gracefully):

Needs["CompoundMatrixMethod`"]

subs = {γ -> 1.67, ϵ -> 0.01, d -> 0.05, H -> 1.1, gpar -> Function[{x}, 0.38], 
      ρ0 -> Function[{x}, Exp[-x/H]], p0 -> Function[{x}, Exp[-x/H]]};
sys = ToMatrixSystem[eqnSubbed2, {T[0] == 0, V[0] == 0, T[1] == 0, V[1] == 0}, {T, 
    V}, {x, 0, 1}, λ] //. subs

The object sys contains the matrix $\mathbf{A}$, as well as similar matrices for the boundary conditions and the range of integration.

Now the function Evans will calculate the Evans function (also known as the Miss-Distance function) for any given value of $\lambda$; this is an analytic function whose roots coincide with eigenvalues of the original equation.

FindRoot will then find solutions for a given start point:

root = FindRoot[Evans[λ, sys], {λ, -1 + 3 I}]
 (* {λ -> -0.342689 + 2.65899 I} *)

And we can plot the Evans function to see there are a set of real, negative eigenvalues as well as the complex ones,

Plot[Evans[λ, sys], {λ, -10, 10}]

enter image description here

I can't immediately see any eigenvalues with a positive real part, and suspect there aren't any for this case. For your function gpara, if you manage to read it in and make an interpolation function from the data correctly, the code above should be able to incorporate that.

Unfortunately my code doesn't currently get the eigenfunctions out immediately at the moment. However, you can use NDSolve to get them once you find a root:

sol = NDSolve[Join[eqnSubbed2 //. subs /. root, 
    {T[0] == 0, V[0] == 0, T'[0] == 1, V[1] == 0}], {T, V}, {x, 0, 1}]
GraphicsRow[{Plot[Evaluate[ReIm@T[x] /. sol], {x, 0, 1}], 
  Plot[Evaluate[ReIm@V[x] /. sol], {x, 0, 1}]}]

enter image description here

SPPearce
  • 5.7k
  • 2
  • 18
  • 40