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".
Answer
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]
Comments
Post a Comment