The following code with varying scaling parameter gives same plot. plz suggest correction.

Clear[x];

r=1;

eqn=x'[t]-1-r*x[t]-x[t]^2==0;

sol=x/.DSolve[{eqn,x[0]==0},x,t][[1,1]];

ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=2;

eqn=x'[t]-1-r*x[t]-x[t]^2==0;

ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=-2;

eqn=x'[t]-1-r*x[t]-x[t]^2==0;

ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=0;

eqn=x'[t]-1-r*x[t]-x[t]^2==0;

ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

Regards,

=================

The value of “r” has been changed several times…..maybe Clear[r] for each run?

– thils

Oct 12 ’15 at 3:15

If your version of Mathematica supports this form of Table then: Clear[x, r]; Table[eqn = x'[t]-1-r*x[t]-x[t]^2==0; sol=x/.DSolve[{eqn, x[0]==0},x,t][[1,1]]; ParametricPlot[ Evaluate[{sol[t], D[sol[t], t]}], {t,0,100}], {r,{1,2,-2,0}}]

– Bill

Oct 12 ’15 at 3:33

1

Because you set r before the DSolve, you have to run DSolve again every time you reset r. Alternatively, don’t set r ever and instead replace r with the new value using /. for each ParametricPlot.

– march

Oct 12 ’15 at 3:34

=================

2 Answers

2

=================

marsh already has explained in a comment why the curves as generated by the code in the question look the same. Here we offer some alternative approaches.

eqn = x'[t] – 1 – r*x[t] – x[t]^2 == 0;

sol = x /. DSolve[{eqn, x[0] == 0}, x, t][[1, 1]];

provides the solution for all r in the range (-2, 2). Plotting the four cases in the question on a single curve shows that they differ. (Note the use of Limit to accommodate r -> 2, -2.)

ParametricPlot[Evaluate[Table[Limit[{sol[t], D[sol[t], t]}, r -> i], {i, {1, 2, -2, 0}}]],

{t, 0, 100}, AspectRatio -> 1, PlotRange -> {{-5, 5}, {0, 35}}, PlotPoints -> 1000]

Gaps in two of the curves can be filled by using negative as well as positive values for t.

However, it also is straightforward to obtain D[sol[t], t] as a function of sol[t].

FullSimplify[D[sol[t], t] /. Solve[x == sol[t], t][[1, 1]], C[1] âˆˆ Integers]

(* 1 + x (r + x) *)

In other words, the curves all are simple parabolas.

Plot[Evaluate[Table[%, {r, {1, 2, -2, 0}}]], {x, -5, 5}, AspectRatio -> 1]

Here, there are no gaps, of course.

I have deliberately confined this post to t∈(0,1)t∈(0,1)t\in (0,1) to avoid stiffness issue (as discussed in related question).

f[x_, r_] := 1 + r x + x^2

Manipulate[

With[{sol =

ParametricNDSolve[{x'[t] == f[x[t], s], x[0] == 0}, {x, x’}, {t,

0, 0.9}, {s}]},

Column[{

Show[Plot[f[x, r], {x, -3, 3}, Frame -> True,

PlotRange -> {0, 10}],

ParametricPlot[Evaluate[{x[r][t], x'[r][t]} /. sol], {t, 0, 1},

PlotStyle -> {Red, Thick, Dashed}, Frame -> True,

PlotRange -> {0, 10}], FrameLabel -> {“x(t)”, “x'(t}”}],

Show[StreamPlot[{1, f[x, r]}, {t, 0, 0.9}, {x, -3, 3}],

Plot[Evaluate[x[r][t] /. sol], {t, 0, 0.9},

PlotStyle -> {Red, Thick}], FrameLabel -> {“t”, “x(t}”}]

}]], {r, -2, 2}]

Noting:

x’ v x can be plotted just by definition (see top plot)

use of ParametricNDSolve