Re: plot command
- To: mathgroup at smc.vnet.net
- Subject: [mg58151] Re: plot command
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 20 Jun 2005 05:21:25 -0400 (EDT)
- Organization: The Open University, Milton Keynes, England
- References: <d90spv$8va$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Bosch, Darrell wrote:
> Dear Group: I am trying to solve an equation, take the derivative and
> plot the derivative as shown below. I get a message below the Plot
> request stating
>
> "Syntax::sntxi: "Incomplete expression; more input is needed." Any help
> would be greatly appreciated. Darrell Bosch
>
>
>
>
>
>
>
> sol = Log[v]=A9100*Log(s)
>
> sol2 = Solve[sol,v]
>
> sol3 = D[sol2,s]
>
> Plot[Evaluate[sol3],{s,0,100}]
>
>
>
>
Hi Darrell,
Using correct syntax would help greatly! I have not gotten the error
message you mentioned in your post but definitely many others. Starting
from the first line, we get
In[1]:=
sol = Log[v] = A9100 Log(s)
Set::write : Tag Log in Log[v] is Protected.
Out[1]=
A9100*Log*s
Here you are using the symbol "=" (simple equal), which is equivalent to
the command *Set*, which tries to assign a new value/definition to the
built-in command *Log*. So, either you *Unprotect* the *Log* function
(very bad idea in this case :-) or most likely you use the *Equal*
(double =, that is "==") to check for equality between LHS and RHS.
Of course you still use the simple "=" to assign the equation to the
symbol "sol".
Moreover, as you can see above, Log(s) is translated as Log*s, that is
Log TIMES s, surely not what you wanted. Here too, using the correct
syntax would help. What you want is Log[s] (square brackets).
You may have a look at
http://documents.wolfram.com/mathematica/GettingStarted/StartingOut/YourFirstMathematicaCalculations.html
Therefore, what is the correct syntax for the first line (assuming that
"A9100" is the symbol A9100 and not a misspelling for A*9100 or whatever
else)?
In[2]:=
sol = Log[v] == A9100*Log[s]
Out[2]=
Logs[v] == A9100*Log[s]
Now the second line gives
In[3]:=
sol2 = Solve[sol, v]
Out[3]=
{{v -> s^A9100}}
a replacement rule rather than the error message "Solve::eqf :
A9100\Log\s is not a well-formed equation."
Now, if you derive directly this replacement rule, you get
In[4]:=
sol3 = D[sol2, s]
Out[4]=
{{0 -> A9100*s^(-1 + A9100)}}
which is not what you want: LHS and RHS are both derived and since "v"
does not depend explicitly on "s" its derivative is zero. One of the
possible solutions among many variations is
In[6]:=
sol3 = D[v /. sol2[[1]], s]
Out[6]=
A9100*s^(-1 + A9100)
Finally, the last command yields an error message
In[7]:=
Plot[Evaluate[sol3], {s, 0, 100}]
\!\(Plot::"plnr" : "\!\(A9100 \\\\
s\^\(\(-1\) + A9100\)\) is not a machine-size real number at s = \
4.166666666666667`*^-6."\)
telling us that A9100 is not a number, which is true. We can circumvent
this "problem" by assigning a value to A9100 before plotting the function:
In[7]:=
Plot[Evaluate[sol3 /. A9100 -> 1], {s, 0, 100}];
And the magic operates: we get a superb graph (of a straight line in
this case :-)
Best regards,
/J.M.