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

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

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

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