Skip to main content

calculus and analysis - How to make an organised investigation of branch cuts from a solution to a differential equation


I am attempting to solve two differential equations. The solution gives equations that have branch cuts. I need to choose appropriate branch cuts for my boundary conditions. How do I find the correct ones?



The differential equations and the boundary conditions are


ClearAll[a, b, x, ω, ν, U];
eqns = {
ω b[x] - ν (a'')[x] == 0,
U ω - ω a[x] - ν (b'')[x] == 0
};
bc1 = {a[0] == 0, b[0] == 0};
bc2 = {a[∞] == U, b[∞] == 0};

The boundary condition bc2 is ambitions and does not work if put into DSolve. However, with just boundary condition bc1 we can get a solution.



sol = {a[x], b[x]} /. 
DSolve[Join[eqns, bc1], {a[x], b[x]}, {x, 0, ∞}]

The solution is long and contains terms like (-1)^(3/4) which suggests four branch cuts. There are also constants of integration C[2] and C[4]. By playing around I find I can get a tidy solution by making substitutions and simplifying. I have replace C[2] with a normalised c[2] and similar for C[4]. I have replaced x with a normalised η I don't think I have significantly changed the problem.


subs = { x -> η /Sqrt[2] Sqrt[ν]/Sqrt[ω], 
C[2] -> U Sqrt[2] Sqrt[ω]/Sqrt[ν] c[2],
C[4] -> U Sqrt[2] Sqrt[ω]/Sqrt[ν] c[4]};
sol1 = Simplify[First@sol /. subs]

The solution is



{1/4 E^((-(1/2) - I/2) η)
U (-1 + 4 E^((1/2 + I/2) η) - (1 - I) c[2] +
E^((1 + I) η) (-1 + (1 - I) c[2] - (1 + I) c[4]) +
E^η (-1 + (1 + I) c[2] - (1 - I) c[4]) -
E^(I η) (1 + (1 + I) c[2] - (1 - I) c[4]) + (1 + I) c[4]),
1/4 E^((-(1/2) - I/2) η)
U (-I - (1 + I) c[2] +
I E^(I η) (1 + (1 + I) c[2] - (1 - I) c[4]) - (1 - I) c[4] +
E^((1 + I) η) (-I + (1 + I) c[2] + (1 - I) c[4]) +
E^η (I + (1 - I) c[2] + (1 + I) c[4]))}


We now have several exponential terms and we can collect them as follows


cc = Collect[sol1, {U, E^_}, Simplify]


{U (1 + 1/
4 E^((1/2 + I/2) η) (-1 + (1 - I) c[2] - (1 + I) c[4]) +
1/4 E^((1/2 - I/2) η) (-1 + (1 + I) c[2] - (1 - I) c[4]) +
1/4 E^((-(1/2) + I/
2) η) (-1 - (1 + I) c[2] + (1 - I) c[4]) +

1/4 E^((-(1/2) - I/2) η) (-1 - (1 - I) c[2] + (1 + I) c[4])),
U (1/4 E^((-(1/2) - I/
2) η) (-I - (1 + I) c[2] - (1 - I) c[4]) +
1/4 I E^((-(1/2) + I/
2) η) (1 + (1 + I) c[2] - (1 - I) c[4]) +
1/4 E^((1/2 + I/2) η) (-I + (1 + I) c[2] + (1 - I) c[4]) +
1/4 E^((1/2 - I/2) η) (I + (1 - I) c[2] + (1 + I) c[4]))}

The first solution should go to U and the second to 0 for large η . I can see I have positive and negative real parts to the exponential powers. Here is where I get lost. How can I choose values for c[2] and c[4] to give me the solutions I need? Note that the solutions I need will make the solution for a go to U and the solution for b go to 0 as x -> Infinity.


Thanks



Edit


xzczd has come up with a solution that is only a few lines long. That is probably the way to go. His/Her method starts afresh and uses the sine transform which suppresses growing solutions. This got me thinking about Laplace transforms and as xzczd states we can't use them directly because they don't allow for boundary conditions at infinity. However, we can use them on the solution I obtained and then remove those parts of the solutions that are exponentially growing. Thus we take the Laplace transform of the solutions.


lapT = LaplaceTransform[cc, η, s] // FullSimplify

{(U (1 + 4 s^3 c[2] + 2 s c[4]))/(s + 4 s^5),
(2 U (s - c[2] + 2 s^2 c[4]))/(1 + 4 s^4)}

which are simple solutions. Now we have to find the roots of the denominators and identify which have real parts greater than zero. These roots will give rise to exponentially growing terms.


rts = Union[Flatten[s /. Solve[Denominator[#] == 0, s] & /@ lapT]]
rtsp = Select[rts, Re[#] > 0 &]


{0, -((-1)^(1/4)/Sqrt[2]), (-1)^(
1/4)/Sqrt[2], -((-1)^(3/4)/Sqrt[2]), (-1)^(3/4)/Sqrt[2]}

{(-1)^(1/4)/Sqrt[2], -((-1)^(3/4)/Sqrt[2])}

The residues of the terms with unwanted roots must be set to zero. We can find the residues and set them to zero as follows.


res = Flatten@
Table[Residue[lapT[[n]], {s, #1}] == 0 & /@ rtsp, {n, Length@lapT}]


This gives rise to four equations in our two unknowns c[2] and c[4]. I was slightly worried by this but we get two solutions easily. (There must be repeated equations that Mthematica can deal with.)


solc = Solve[res, {c[2], c[4]}] // Simplify

{{c[2] -> 1/2, c[4] -> -(1/2)}}

Which is a pleasingly simple result. The inverse transform gives the solution to the differential equations.


InverseLaplaceTransform[ lapT /. First@solc, 
s, η] // FullSimplify

{U - E^(-η/2) U Cos[η/2], -E^(-η/2) U Sin[η/2]}


This may be useful but is messy. If anyone is interested in this method I will post it as an answer with more detail. I can't at the moment due to workload but let me know.




Comments

Popular posts from this blog

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...

mathematical optimization - Minimizing using indices, error: Part::pkspec1: The expression cannot be used as a part specification

I want to use Minimize where the variables to minimize are indices pointing into an array. Here a MWE that hopefully shows what my problem is. vars = u@# & /@ Range[3]; cons = Flatten@ { Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; Minimize[{Total@((vec1[[#]] - vec2[[u[#]]])^2 & /@ Range[1, 3]), cons}, vars, Integers] The error I get: Part::pkspec1: The expression u[1] cannot be used as a part specification. >> Answer Ok, it seems that one can get around Mathematica trying to evaluate vec2[[u[1]]] too early by using the function Indexed[vec2,u[1]] . The working MWE would then look like the following: vars = u@# & /@ Range[3]; cons = Flatten@{ Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; NMinimize[ {Total@((vec1[[#]] - Indexed[vec2, u[#]])^2 & /@ R...

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]