Mathematica FindMaximum function in Mathematica

AI Thread Summary
The discussion revolves around using the FindMaximum and FindRoot functions in Mathematica to analyze a piecewise function defined as q[t]. Initially, the user encountered an error with FindMaximum due to incorrect function syntax, which was resolved by using q[t] instead of q. For finding when the function equals 10^-3, the user initially struggled to create a function f(t) that would yield zero but ultimately found success by directly using the original function q. The correct approach was to apply FindRoot with the expression q[t] - 10^(-3), leading to the desired output. The conversation highlights common pitfalls in function definition and syntax in Mathematica.
kevmac
Messages
6
Reaction score
2
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?
 
Physics news on Phys.org
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?
 
kevmac said:
FindMaximum[q, t]
That should be FindMaximum[q[t], t]

kevmac said:
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?
You have to build a function ##f(t)## that will be equal to 0 when ##q(t) = 10^{-3}##.
 
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
 
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!
 
  • Like
Likes DrClaude

Similar threads

Replies
1
Views
2K
Replies
3
Views
2K
Replies
2
Views
5K
Replies
2
Views
2K
Replies
1
Views
2K
Replies
2
Views
1K
Replies
2
Views
2K
Back
Top