4
$\begingroup$

I want to picture the phase plane of the normalized system. Here I've defined only the right hand sides.

νmax = 100; gE = 5; kv = 20; u0 = 24; τD = 2000; δxD = 0.01; σ = 5;
CC = 10;
Clear[f];
f[x_?NumericQ] =Piecewise[{{0, x < 0}, {x, x > 0 && x < 1}, {1, x > 1}}];
ν[x_] = νmax f[(x - u0)/kv];
rhs1[x_, v_] = (1 - x)/τD - (δxD x ν[v])/1000;
rhs2[x_, v_] = (-v + gE ν[v] (x - 0.5))/CC;
StreamPlot[{rhs2[x, v], rhs1[x, v]}, {v, 0, 200}, {x, 0, 1}, StreamPoints -> Fine, PlotRange -> {{0, 200}, {0, 1}}]

The problem is a low resolution of StreamPlot command. It's just a single line depicted on the phase plane and, obviously, it can not say much about behaviour of the system. Here I have piecewise function, and I want to get a very detailed, that is with many lines, phase plane in each interval. But an option StreamPoints-> Fine doesn't provide me that.

I've tried to specify explicitly those points the lines of phase plane have to pass through, but it was as effective as usage the value "Fine" in the option "StreamPoints".

$\endgroup$

1 Answer 1

6
$\begingroup$

This can be fixed using @Rahul's myStreamPlot function from this answer.

UPDATE: Note that @ArtemZefirov helped ID an oversight in the original version of myStreamPlot that causes problems when v is used as a variable. Here's an updated version that works now:

Options[myStreamPlot] = Options[StreamPlot];
myStreamPlot[f_, {x_, x0_, x1_}, {y_, y0_, y1_}, opts : OptionsPattern[]] := 
Module[{u, v, a = OptionValue[AspectRatio]},
  Show[StreamPlot[{1/(x1 - x0), a/(y1 - y0)} (f /. {x -> x0 + u (x1 - x0), y -> y0 + v/a (y1 - y0)}), {u, 0, 1}, {v, 0, a}, opts]
  /. Arrow[pts_] :> Arrow[({x0, y0} + {x1 - x0, (y1 - y0)/a} #) & /@ pts], PlotRange -> {{x0, x1}, {y0, y1}}]]

myStreamPlot[{rhs2[x, v], rhs1[x, v]}, {v, 0, 200}, {x, 0, 1},
  StreamPoints -> Fine]

Mathematica graphics

$\endgroup$
3
  • 1
    $\begingroup$ There is something wrong with the myStreamPlot function. I've tried to test it with the next two commands StreamPlot[{-v, x}, {v, -5, 5}, {x,-1, 1}, StreamPoints -> Fine] myStreamPlot[{-v, x}, {v, -5, 5}, {x, -1, 1}, StreamPoints -> Fine] The first returns the correct result when the second returns the phase plane shifted left. It seems to be the same problem when I compare both phase planes made with StreamPlot and myStreamPlot for my original problem in the interval $ (v,x) \in ( [0,u0],[0,1] )$. That several lines StreamPlot returns don't coincidence with that of myStreamPlot does. $\endgroup$ Commented Oct 12, 2017 at 10:24
  • $\begingroup$ Here I've computed the real trajectory. myStreamPlot isn't relevant. solss = NDSolve[{v'[t] == -v[t]/CC, x'[t] == (1 - x[t])/τD, v[0] == 15, x[0] == 0.3}, {v, x}, {t, 0, 100}]; solsspl = ParametricPlot[Evaluate[{v[t], x[t]} /. solss], {t, 0, 100}, PlotRange -> {{0, u0}, {0, 1}}, PlotStyle -> Red]; Show[ss1, solsspl] $\endgroup$ Commented Oct 12, 2017 at 10:55
  • $\begingroup$ @ArtemZefirov Good point. I think the issue was that your v was interfering with the v in myStreamPlot. I tried to fix it above. $\endgroup$
    – Chris K
    Commented Oct 12, 2017 at 14:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.