2
$\begingroup$

So I'm brand new to Mathematica, and basically what I want to do is find the roots of a function at varying time intervals.

The function I'm using is:

a[t_] = -(E^(((0.057` m t)/(m + 0.013`)))/(10^5 1.66`)) + m - 10

Where t is a range of values from 0 to 500 with an interval of 10. I want to find the values at which the function is zero at each individual time step.

How can I do this?

I've been playing with the program but it keeps giving me an error such as,

FindRoot::nveq: The number of equations does not match the number of variables in FindRoot[%==0,{m,0}]. >>

$\endgroup$
  • $\begingroup$ Please, add any relevant code, but keep it simple, e.g. a minimum (non)working example $\endgroup$ – Sektor Feb 19 '15 at 21:49
  • 2
    $\begingroup$ Reduce[Rationalize@-(E^(((0.057 m t)/(m + 0.013)))/(10^5 1.66)) + m - 10 == 0] /. C[1] -> 0` $\endgroup$ – Dr. belisarius Feb 19 '15 at 22:02
3
$\begingroup$
r = Reduce[Rationalize@-(E^(((0.057` m t)/(m + 0.013`)))/(10^5 1.66`)) + m - 10 == 0] 
                                                                             /. C[1] -> 0 // ToRules

Then you can either look at the rotated inverse plot:

Plot[t /. r, {m, 1, 100}]

Mathematica graphics

Or if you want to spend some time, ask Mathematica to compute it:

f[m_] := Evaluate[t /. r]
Plot[InverseFunction[f][m], {m, 11, 100}]

Mathematica graphics

$\endgroup$
  • $\begingroup$ Hey there, thanks for the response. I was able to get it to work. I'm a little confused as to why you had to go through the reduce and rationalize steps. Is this one of the limitations of Mathematica or is it just the easiest way you've found to do this? $\endgroup$ – Zach Feb 20 '15 at 0:16
3
$\begingroup$
Clear[t, f, m]
pts = Table[t, {t, 0, 500, 10}];
sol = {#, m /. First@NSolve[-(E^(((0.057` m #)/(m + 0.013`)))/(10^5 1.66`)) 
       + m - 10 == 0, m, Reals]} & /@ pts;
Grid[Join[{{"t", "solution"}}, sol], Frame -> All]

Mathematica graphics

$\endgroup$
2
$\begingroup$

You are basically trying to solve an implicit equation for m[t]:

eqn = -(E^(((0.057` m[t] t)/(m[t] + 0.013`)))/(10^5 1.66`)) + m[t] - 10 == 0;

One possible approach is to cast this as an ODE and to use NDSolveValue. To do this we need an ODE:

D[eqn, t] //TeXForm

$m'(t)-\left(6.0241\times 10^{-6}\right) e^{\frac{0.057 t m(t)}{m(t)+0.013}} \left(-\frac{0.057 t m'(t) m(t)}{(m(t)+0.013)^2}+\frac{0.057 m(t)}{m(t)+0.013}+\frac{0.057 t m'(t)}{m(t)+0.013}\right)=0$

and an initial condition:

m[0] == 10;

which leads to:

sol = NDSolveValue[{D[eqn, t], m[0] == 10}, m, {t, 0, 500}];

Visualization:

Plot[sol[t], {t, 0, 100}]

enter image description here

Or tabular form:

TableForm[
    Table[{t, sol[t]}, {t, 0, 200, 10}],
    TableHeadings->{None,{"t", "solution"}}
] //TeXForm

$\begin{array}{cc} \text{t} & \text{solution} \\ 0 & 10. \\ 10 & 10. \\ 20 & 10. \\ 30 & 10. \\ 40 & 10.0001 \\ 50 & 10.0001 \\ 60 & 10.0002 \\ 70 & 10.0003 \\ 80 & 10.0006 \\ 90 & 10.001 \\ 100 & 10.0018 \\ 110 & 10.0032 \\ 120 & 10.0056 \\ 130 & 10.0099 \\ 140 & 10.0174 \\ 150 & 10.0308 \\ 160 & 10.0544 \\ 170 & 10.0961 \\ 180 & 10.1698 \\ 190 & 10.3002 \\ 200 & 10.5306 \\ \end{array}$

in agreement with the other answers.

$\endgroup$

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.