Re: Manipulate a Plot of Evaluate DSolve
- To: mathgroup at smc.vnet.net
- Subject: [mg127501] Re: Manipulate a Plot of Evaluate DSolve
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Mon, 30 Jul 2012 03:47:04 -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>
If DSolve cannot solve the equations then use NDSolve.
func[coef_?NumericQ, c_?NumericQ, x_?NumericQ] :=
y[t] /. NDSolve[{y'[t] == Cos[coef*t], y[0] == c},
y[t], {t, -10, 10}][[1]] /. t -> x
Manipulate[Plot[
Evaluate[func[coef, c, x] /. c -> Range[5]],
{x, -10, 10},
PlotRange -> {-5, 10}],
{{coef, 1}, 0.1, 5, 0.01,
Appearance -> "Labeled"}]
Bob Hanlon
On Sun, Jul 29, 2012 at 6:12 PM, Juan Barandiaran
<barandiaran.juan at gmail.com> wrote:
> Thanks for your answer Bob,
> Of course your solution works, but I still don't understand why mine doesn't
> and I cannot use your proposed approach because the way you write the
> problem it is easy for Mathematica to solve the DSolve.
> And this is just a simple example, in my real problem the DSolve cannot be
> solved analytically.
> This is why I tried to express the function as:
>
> {{y -> Function[{x}, DSolve[y'[x] == Cos[coef *x], y, x]]}}
>
> , which is something like the output I get from my DSolve.
>
> Thanks for your help.
>
> Juan
>
>
> 2012/7/29 Bob Hanlon <hanlonr357 at gmail.com>
>>
>> Clear[func];
>>
>> func[coef_, c_, x_] =
>> y[x] /. DSolve[{y'[x] == Cos[coef*x], y[0] == c}, y[x], x][[1]] //
>> Simplify
>>
>> c + Sin[coef*x]/coef
>>
>>
>> Manipulate[Plot[Evaluate[
>> func[coef, c, x] /.
>> c -> Range[5]],
>> {x, -10, 10},
>> PlotRange -> {-5, 10}],
>> {{coef, 1}, 0.1, 5, 0.01,
>> Appearance -> "Labeled"}]
>>
>>
>> Bob Hanlon
>>
>>
>> On Sun, Jul 29, 2012 at 3: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
>> >
>
>
- References:
- Manipulate a Plot of Evaluate DSolve
- From: barandiaran.juan@gmail.com
- Manipulate a Plot of Evaluate DSolve