Skip to main content

output formatting - Reduce an equation by putting a new variable


I have the following equation given:


$$ (26-x)\cdot\sqrt{5x-1} -(13x+14)\cdot\sqrt{5-2x} + 12\sqrt{(5x-1)\cdot(5-2x) }= 18x+32. $$


In order to solve it, I want to substitute $t = \sqrt{5x - 1}-\sqrt{5-2x}$. This cannot be done directly but with this step the equation could be transformed in the form $(t-2)^3 = 0$, which can be solved easily.



Is it possible to make this substitution with Mathematica? The only thing I have achieved is to solve it directly with


Solve[(26 - x)*Sqrt[5*x - 1] - (13*x + 14)*Sqrt[5 - 2*x] + 
12*Sqrt[(5*x - 1)*(5 - 2*x)] == 18*x + 32]

Answer



A standard approach for this kind of task uses Eliminate. It works nicely with polynomial equations, and even though neither this transformation : $\;\sqrt{5x - 1}-\sqrt{5-2x} \rightarrow t \quad$ nor the original equation : $ (26-x)\sqrt{5x-1} -(13x+14)\sqrt{5-2x} + 12\sqrt{(5x-1)(5-2x) }= 18x+32\quad$ are of polynomial types, nevertheless we can make some tricks to get exactly $\;(t-2)^3 = 0$.


Defining


f[x_] := (26-x) Sqrt[5x-1] - (13x+14) Sqrt[5-2x] + 12 Sqrt[(5x-1)(5-2x)] - 18x - 32

terms like : $\sqrt{(5x-1)(5-2x)}\;$ should be PowerExpand'ed in order to get the lowest possible order of resulting polynomials (otherwise we would get a ninth order polynomial):


Eliminate[{ f[x] == 0 // PowerExpand, Sqrt[5x-1] - Sqrt[5-2x] == t}, x]



 12 t - 6 t^2 + t^3 == 8

If we didn't play with PowerExpand we would use another definition of function $f$ yielding effectively the same result :


f1[x_] := (26-x) Sqrt[5x-1] - (13x+14) Sqrt[5-2x] + 12 Sqrt[(5x-1)] Sqrt[5-2x] - 18x - 32

Eliminate[{ f1[x] == 0, Sqrt[5x-1] - Sqrt[5-2x] == t}, x]

Now we rewrite the equation we've got -8 + 12 t - 6 t^2 + t^3 == 0 in the following form :



TraditionalForm[-8 + 12 t - 6 t^2 + t^3 == 0 // Factor]

enter image description here


And this is indeed equivalent to our orignial function f[x] :


(t-2)^3 == f[x] /.t-> Sqrt[5x-1] - Sqrt[5-2x] // FullSimplify


 True

Edit



It is remarkable that f being rather a complicated (complex also for real arguments) function has only one simple root :


Reduce[ f[x] == 0, x]


x == 2

which implies t == 2. To make this result more understandable we can plot the contours of f in a complex domain :


GraphicsRow[ Table[ Show[
ContourPlot @@@ { { g[f[x + I y]], {x, -2, 6}, {y, -4, 4}, Contours -> 37,
RegionFunction -> Function[{x, y}, 60 > g[f[x + I y]] > -60],

PlotLabel -> Style[ g[HoldForm @ f[x + I y]], Blue, 15],
ColorFunction -> "DeepSeaColors"},
{ Re @ f[x + I y] == 0, {x, -2, 6}, {y, -4, 4},
ContourStyle -> {Red, Thick}},
{ Im @ f[x + I y] == 0, {x, -2, 6}, {y, -4, 4},
ContourStyle -> {Cyan, Thick}} },
Graphics[{ Thickness[0.01], Darker @ Green, Line[{{0.2, 0}, {2.5, 0}}]}]],

{g, {Re, Im, Abs}}]]


enter image description here


The color curves denote the following sets of points z in the complex plane



  • red ; where: Re[ f[z]] == 0

  • cyan ; where: Im[ f[z]] == 0

  • green ; the set of z where Im[ f[z]] == 0 restricted to the real domain.


One can easily see that these curves cross only at z == {2,0}.


We complement the plots of the function f restricting to the real domain only (here the green line denotes the region where the imaginary part vanishes):


GraphicsRow[

Plot[{ Re @ f[x], Im @ f[x]}, {x, ##}, AxesOrigin -> {0, 0}, PlotRange -> Automatic,
PlotStyle -> { Thick, Thickness[0.008]}, AspectRatio -> 1.1,
Epilog -> { { Thickness[0.01], Darker @ Green, Line[{{0.2, 0}, {2.5, 0}}]},
{ PointSize[0.023], Red, Point[{2, 0}]}}] &
@@@ {{-3, 3}, {-.1, 3.5}, {0.7, 3}}]

enter image description here


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

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...