0
$\begingroup$

I would like to analytically solve for the intersection of two functions on a given interval and store the solution as a function (of parameters) for later use. How can I tell Mathematica to look for a solution only on the given interval (there may be other intersections outside this interval)?

Here is my concrete example: I consider two functions of $x$ which depend on 4 other parameters:

$f_1(x)=((c - a x) (c + x (-a + 2 r_1 x)))/(3 b x^2)$

and

$f_2(x)=((c - a x) (c + x (-a + 2 r_2 x)))/(3 b x^2)$

where $a>b>0$ and $c>0$ are identical parameters for the two functions, and the two functions differ only in the values of $r_1$ and $r_2$ such that $0<r_2<r_1<a^2/(8c)$.

Both functions have a unique maximum for $x>c/a$ which I denote $x_{f1max}=argmax_{x>c/a} f_1$ and $maxf_1=f_1(x_{f1max})$, and $x_{f2max}=argmax_{x>c/a} f_2$ and $maxf_2=f_2(x_{f2max})$.

$r_2<r_1<a^2/(8c)$ implies that $x_{f1max}<x_{f2max}$ and $maxf_1<maxf_2$.

Consider $\tilde f_1$ a "vertically translated" $f_1$ such that $\tilde f_1$ and $f_2$ have the same maximum value: $\tilde f_1(x)=f_1(x)+maxf_2-maxf_1$.

$\tilde f_1$ and $f_2$ intersect once in the interval $[x_{f1max},x_{f2max}]$. I would like to find this intersection and store it as a function of the parameters $a$, $b$, $c$, $r_1$ and $r_2$.

Here is the code where I define the functions:

f[a_, b_, c_, r_, x_] = ((c - a x) (c + x (-a + 2 r x)))/(3 b x^2)
xmax[a_, b_, c_, r_] = ArgMax[{f[a, b, c, r, x], x > c/a}, x];
maxf[a_, b_, c_, r_] = MaxValue[{f[a, b, c, r, x], x > c/a}, x];

Here is how $\tilde f_1$ and $f_2$ look like and their intersection:

Plot[{f[10, 1, 1, 1, x] + maxf[10, 1, 1, 0.2] - maxf[10, 1, 1, 1], 
  f[10, 1, 1, 0.2, x]}, {x, 1/10, 5}]

<span class=$\tilde f_1$ and $f_2$" />

I can find the intersections of the two functions using

SolveValues[
  f[a, b, c, r2, x] == 
   f[a, b, c, r1, x] + maxf[a, b, c, r2] - maxf[a, b, c, r1], x]]

But this finds all the intersections and I would like to pick up only the one in the interval $[x_{f1max},x_{f2max}]$.

I found a way around this using Last:

xInt[a_, b_, c_, r1_, r2_] = 
  Last[SolveValues[
    f[a, b, c, r2, x] == 
     f[a, b, c, r1, x] + maxf[a, b, c, r2] - maxf[a, b, c, r1], x]];

but this will not work in other cases when looking for a different intersection. Would anyone please have a suggestion?

$\endgroup$
4
  • $\begingroup$ From the top of my head, I'd say you could either add a constraint to the SolveValues, or you filter the results afterwards with Select[solutions, a <= # <= b&]. $\endgroup$
    – JEM_Mosig
    May 3 at 13:59
  • $\begingroup$ Simplify[((c - a x) (c + x (-a + 2 r1 x)))/(3 b x^2) == ((c - a x) (c + x (-a + 2 r2 x)))/(3 b x^2) evaluates condition ((r1 - r2) (c - a x))/b == 0 for the intersection point! $\endgroup$ May 3 at 14:16
  • $\begingroup$ @JEM_Mosig Thank you. Adding a constraint to SolveValues would be ideal, but I have not managed to make it work. $\endgroup$
    – Lednacek
    May 3 at 14:38
  • $\begingroup$ @Ulrich Neumann Thank you. But I need to solve for the intersection of $\tilde f_1(x)=f_1(x)+max f_2-max f_1$ and $f_2$ and not the original $f_1$ and $f_2$. This does not seem to simplify. $\endgroup$
    – Lednacek
    May 3 at 14:52

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.