# FindMaximum function in Mathematica

Tags:
1. Feb 10, 2016

### kevmac

I recently plotted a piecewise function:

Plot[Piecewise[{{1 - Exp[-.002*t],
0 <= t < 120}, {-Exp[-.002*t] + Exp[-.002*(t - 120)],
120 <= t}}], {t, 0, 5000}, PlotRange -> {0, 0.25}]

I then defined the function which I am calling q[t_] as follows:

q[t_] := Piecewise[{{1 - Exp[-.002*t],
0 <= t < 120}, {-Exp[-.002*t] + Exp[-.002*(t - 120)],
120 <= t}}];

I then wish to find the maximum value of this function, which should occur at t=120. I entered:

FindMaximum[q, t]

FindMaximum::nrnum: "The function value -q is not a real number at {t} = {1.`}"

Any easy way to fix this? Am I using the FindMaximum function incorrectly, or did I do something wrong when initially defining the function?

2. Feb 10, 2016

### kevmac

Also, the following question asks that we find when this function is equal to 10^-3. My professor suggested using the FindRoot function, however I can't see how that is applicable to anything not equal to zero. Any tips on how to apply that or some other function to a nonzero value of y?

3. Feb 11, 2016

### Staff: Mentor

That should be FindMaximum[q[t], t]

You have to build a function $f(t)$ that will be equal to 0 when $q(t) = 10^{-3}$.

4. Feb 11, 2016

### kevmac

Thanks for fixing my error for the FindMaximum function. Included q[t] and it worked fine.

In terms of building a function f(t), I did this a few ways, but keep receiving the same error. First, I started with the same piecewise function q(t) as defined previously, and subtracted 10^-3 from it. Not sure if that would work, I took only the second leg of the piecewise function, and subtracted 10^-3 from that (we are only looking for the second root in this case). Both times, I entered it as such and received the following error:

(a)
f[t_] := Piecewise[{{1 - Exp[-.002*t], 0 <= t < 120}, {-Exp[-.002*t] + Exp[-.002*(t - 120)], 120 <= t}}] - 10^(-3);
FindRoot[f[t], {t,120}]
FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations
{t -> 50120.}

(b)
f[t_] := -Exp[-.002*t] + Exp[-.002*(t - 120)] - 10^(-3)
FindRoot[f[t], {t, 120}]
FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations.
{t -> 50120.}

Once again, am I entering this incorrectly? The correct output should be ~2801.5

5. Feb 11, 2016

### kevmac

Please ignore my last response, I figured it out.

Rather than define a new function f, I used my same function q and entered:

FindRoot[q[t] - 10^(-3), {t, 120}]

And found my output. Thanks for your feedback!!