0
|
9337 Views
|
5 Replies
|
2 Total Likes
View groups...
Share

# Mathematica 10: Plot[] No Longer Plots Equations (?)

Posted 10 years ago
 Try this ClearAll[eqn, ics, ode] eqn = x''[t] + 20.*x'[t] + 30.*x[t] == 35.*Sin[2.*Pi*2.*t] ics = {x[0] == 0., x'[0] == 0.} ode = Flatten[{eqn, ics}] ClearAll[sol]; sol = NDSolve[ode, x, {t, 0, 5.}, AccuracyGoal -> 14, PrecisionGoal -> 14][[1]] Plot[Evaluate[eqn /. sol], {t, 0, 5.}]  The Plot command yields empty plot in Mathematica 10, but in 9.0.1 and 8.0.4 a plot results. I often have many differential equations I would like to plot to see the effects of Accuracy and Precision goals and the above is a simple, rough way to do it. Even this no longer works in Mathematica 10, but does in 9.0.1 and 8.0.4: Plot[Evaluate[2 x^2 + 3 x == 20], {x, -5, 5}]  It seems a bit burdensome to do Plot[Evaluate[eqn[[1]] - eqn[[2]] /. sol], {t, 0, 5.}, PlotRange -> All]  especially if I have quite a few differential equations. Suggestions welcome unless this is unintended behavior, then Wolfram guys please let me know. Notebook attached. -B Attachments:
5 Replies
Sort By:
Posted 10 years ago
 I also find it strange that this ever worked. Maybe it was undocumented behavior similar to ContourPlot's acceptance of an equation as an argument. However, pattern substitution could be used to provide similar functionality. In[3]:= eq = 2 x^2 + 3 x == 20 Out[3]= 3 x + 2 x^2 == 20 In[4]:= eq /. a_ == b_ -> a - b Out[4]= -20 + 3 x + 2 x^2 
Posted 10 years ago
 Thanks much Eric. I believe WRI's position will be this is intended behavior since as you point out the documentation has, for a long time now, read that the first argument is treated as a function. I too wonder why it used to work and now it does not. It appears not to be a subtle task to move all terms of an equation expression to one side of == and then get rid of the == resulting in an expression which can be treated as a function.
Posted 10 years ago
 @Eric, I believe you may have misunderstood what I try to do. I am not trying to plot the solution. I try to plot the equation. Are you amazed that Plot[Evaluate[2 x^2 + 3 x == 20], {x, -5, 5}] ever worked? The above yields empty plot in Mathematica 10, but not in 8.0.4 and 9.0.1.When I try to plot the differential equation with the solution replacement, what I am trying to do is see how well the equation was satisfied with the solution found.You should then be equally amazed that Plot[Evaluate[eqn[[1]] - eqn[[2]] /. sol], {t, 0, 5.}, PlotRange -> All] does work in Mathematica 10, and is equivalent to plotting the equation with solution replacement, although somewhat more burdensome when many equations are present.
Posted 10 years ago
 You're right I did not understand what you were asking. However, I'm still perplexed since Plot plots functions, not equations. 2 x^2 + 3 x == 20 This is not a function. What's surprising to me is Mathematica used to turn it into a function for you automagically in the past. The fact it used to work is interesting and I'm not sure why. Plot[Evaluate[eqn[[1]] - eqn[[2]] /. sol], {t, 0, 5.}, PlotRange -> All] eqn[[1]]-eqn[[2]] is indeed a function (there is no == in it) and plots just fine as expected.I realize none of this is an answer as to why Mathematica handles it differently now.
Posted 10 years ago
 I'm amazed that ever worked. The proper way is Plot[Evaluate[x[t] /. sol], {t, 0, 5.}]