4
$\begingroup$

I'm a software engineer with math classes through differential equations about 15 years in my past, and I've gotten stuck trying to invert an equation.

The equation: $y = x + (0.022 - x)^{1.414}$.

In Mathematica form:

sapcClamp[y] := y + ((22 / 100) - y) ^ (1414 / 100);  
Solve[sapcClamp[y] == x, y]

Note:

  • 0 <= x < 0.022
  • Phyiscally relevant x/y values range from 0.0 to 1.0.

This hangs Mathematica indefinitely until the kernel is quit and restart, which indicates strongly there's no easy solution here.

Messing around on paper, with Reduce, FindRoot, Googling, Youtube, on paper has gotten me ~nowhere. Yet this doesn't feel complicated enough to me that there's simply no way to solve it.

Any tips?

$\endgroup$
11
  • 4
    $\begingroup$ Algebraically, the equation with the rational exponent 1414/1000 = 707/500 is in effect a degree-707 polynomial. That means it's simple enough for there to be a way to solve it (but not in terms of the usual elementary functions); but it has 707 (complex) solutions. The following returns 707: Solve[(y-x)^500 == (11/500-x)^707, x]. If 1.414 represents an approximate real number, then things are more complicated. (Do you know that solutions to polynomial equations of degree 5 and up cannot be expressed in terms of n-th roots, except in special cases? Your problem is not simple.) $\endgroup$
    – Michael E2
    Commented Jul 10, 2022 at 22:21
  • 2
    $\begingroup$ From documentation of the FoxH-function: The roots of general trinomial equation $z^n-z-t=0$ are given by roots = Exp[(2 \[Pi] I)/(n - 1)]^-j + t/(n - 1)FoxH[{{{0, 1}, {0, n/(n - 1)}}, {}}, {{{0, 1}}, {{-1, 1}, {0, 1/(n - 1)}}}, t Exp[(2 \[Pi] I)/(n - 1)]^j]; In your case $z=0.022-x$, $y= t- 0.022$ and $n=1.414$. So, you need FoxH $\endgroup$
    – yarchik
    Commented Jul 10, 2022 at 23:06
  • 2
    $\begingroup$ @MichaelE2, what if 1.414 is not 707/500 but sqrt(2)? $\endgroup$
    – Carsten S
    Commented Jul 11, 2022 at 8:13
  • 1
    $\begingroup$ @CarstenS As I said, "things are more complicated." The point is that the OP's intuitive view did not grasp the complexity of the problem. So numerical solutions are probably better than symbolic ones here, esp. if one may restrict to reals. The first solution returned by Solve[] (based on the exponent 1414/1000 given in the OP) is probably real. It takes up about 1.1MB, and the first time I evaluated it at 32-digit precision, it ran out of precision (I think) after several minutes. I gave up, since it's a silly way to go anyway. $\endgroup$
    – Michael E2
    Commented Jul 11, 2022 at 14:36
  • 1
    $\begingroup$ Can't you just use Newton's method to invert sapcClamp[]? You can use the line through the end points to give a good starting point, since your function is almost straight anyway. $\endgroup$
    – Michael E2
    Commented Jul 11, 2022 at 15:00

2 Answers 2

9
$\begingroup$

Instead of worrying about an analytical solution, it can be done numerically by an interpolating function:

y[x_] = x + (22/1000 - x)^(1414/1000);
dat = Table[Reverse@{x, y[x]}, {x, 0, 0.022, 0.022/100}];
ifun = Interpolation[dat];
Plot[ifun[x], {x, y[0], 0.022}]

enter image description here

$\endgroup$
8
$\begingroup$
$Version

(* "13.1.0 for Mac OS X x86 (64-bit) (June 16, 2022)" *)

Clear["Global`*"]

Note that 0.022 is 22/1000 and 1.414 is 1414/1000

0.022 == 22/1000 && 1.414 == 1414/1000

(* True *)

sapcClamp[y_] := y + ((22/1000) - y)^(1414/1000);

The inverse function is

sapcClampInv[x_?NumericQ] := y /. FindRoot[sapcClamp[y] == x, {y, 0.01}]

y0 = sapcClampInv[0]

(* -0.00654968 *)

The plot for the inverse function using either ParametricPlot or sapcClampInv

Legended[
 Show[
  ParametricPlot[{sapcClamp[y], y}, {y, y0, 0.022}],
  Plot[sapcClampInv[x], {x, 0, 0.022},
   PlotStyle -> Directive[ColorData[97][2], Dashed]],
  AxesLabel -> {x, y}],
 Placed[
  LineLegend[
   {ColorData[97][1], Directive[Dashed, ColorData[97][2]]},
   {"ParametricPlot", "sapcClampInv"}],
  {.75, .4}]]

enter image description here

$\endgroup$

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.