Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

FindMaximum function in Mathematica

  1. Feb 10, 2016 #1
    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]

    But received the following error:

    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. jcsd
  3. Feb 10, 2016 #2
    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?
  4. Feb 11, 2016 #3


    User Avatar

    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}##.
  5. Feb 11, 2016 #4
    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:

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

    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
  6. Feb 11, 2016 #5
    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!!
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Similar Threads - FindMaximum function Mathematica Date
Mathematica Cannot do the integral of the Hyper-geometric function? Mar 11, 2018
Mathematica Cannot Plot This Function in Mathematica Feb 26, 2018
Matlab Dotting autonomous functions Jan 24, 2018
Mathematica Piecewise Function Jan 18, 2018
FindMaximum Mathematica Jul 22, 2008