Re: Manipulate a Plot of Evaluate DSolve

*To*: mathgroup at smc.vnet.net*Subject*: [mg127525] Re: Manipulate a Plot of Evaluate DSolve*From*: Juan Barandiaran <barandiaran.juan at gmail.com>*Date*: Wed, 1 Aug 2012 04:57:11 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-newout@smc.vnet.net*Delivered-to*: mathgroup-newsend@smc.vnet.net*References*: <20120729070521.C7CB3684D@smc.vnet.net> <49408C34-9FCD-45E1-BF90-7E6033DD39FE@wolfram.com>

Thanks John, Yes, my input doesn't work even without the Manipulate and I will take note to try to simplify things and debug in simpler expressions. Thanks for the advice. The extra list braces is what Mathematica gives me as an output of a previous Dsolve which is quite complicated and I have tried to simplify it in this example by copying the expression with the same sintax and substituting the difficult part by a Cos[coef*x] to have the same kind of expression but easier. Again, in your proposed sintax the problem is easily solved because Mathematica solves the Dsolve. I was using the braces to have a Dsolve that arrives directly into the function to be plotted as is in my real case (without being previously simplified by Mathematica). I don't know if I manage to explain myself... sorry if I don't. Thanks for your help, Juan 2012/7/30 John Fultz <jfultz at wolfram.com> > Your input wasn't working even without the Manipulate. Always best to > test (and, if necessary) debug things outside of a Manipulate, if for no > other reason than to simplify the problem you're trying to debug. > > In this case, your input is a mess of redundancies. I'm not really sure > how you arrived at the extra list braces and the redundant rule for y. But > here's what you wanted: > > func[coef_] = DSolve[y'[x] == Cos[coef*x], y, x] > > Manipulate[ > Plot[Evaluate[y[x] /. func[coef] /. C[1] -> {Range[-5, 0]}], {x, -10, > 10}], {{coef, 1}, 0.1, 5}] > > In summary, the Evaluate in your example didn't trigger because it wasn't > the head of Plot's first argument. But beyond that, nothing would have > plotted anyway because of the many nested lists and the confusion over the > extra unnecessary rule replacement in your function definition. > > Sincerely, > > John Fultz > jfultz at wolfram.com > User Interface Group > Wolfram Research, Inc. > > On Jul 29, 2012, at 2:05 AM, barandiaran.juan at gmail.com wrote: > > > Hi, > > > > I'm trying to Manipulate a Plot of a quite difficult function which > involves solving a differential equation, but cannot be solved analytically. > > > > To try to simplify the example and simulate it, let's assume that we > have the following function: > > > > func[coef_] = {{y -> Function[{x}, DSolve[y'[x] == Cos[coef *x], y, x]]}} > > > > Manipulate[Plot[{{Evaluate[y[x] /. func[coef] /. C[1] -> {Range[-5, > 0]}]}}, {x, -10, 10}], {{coef , 1}, 0.1, 5}] > > > > I get an error: DSolve::dsvar: "-9.99959 cannot be used as a variable" > > > > I think that this is because Manipulate assigns a value to x (= > -9.99959) BEFORE solving the DSolve, even though to avoid it I'm using the > Evaluate function, which should process the function before assigning a > value to x. > > > > But the thing is that the "coef" to be Manipulated is at the same > "level" as the x in the Manipulate block, so probably if I need the coef to > solve the DSolve, I also have the x that gives me an error. > > > > Is there any workaround? I guess I'm not understanding properly how > Mathematica processes these simple expressions. > > > > Thanks, Juan > > > >