Equilibria
In[]:=
Options[Equilibria] = {EquilibriaPlotPoints->49, EquilibriaPrecisionGoal->5, SeedsOnly->False, ShowEigenvalues->False, EquilibriumFindingMethod->FindRoot}; FindMinMethod[{eqn1_, eqn2_}, {x_, x0_}, {y_, y0_}, {xR_, yR_}] := FindMinimum[Evaluate[eqn1^2 + eqn2^2], {x, {x0, x0 + xR/100}}, {y, {y0, y0 + yR/100}}][[2]] EigenData[funcs_List, vbles_List, ePt_] := Eigenvalues[N[Outer[D, funcs, vbles] /. Thread[Rule[vbles, ePt]]]] Equilibria[funcs_List, {x_, xmin_, xmax_}, {y_, ymin_, ymax_}, contourData_List, opts___Rule] := Module[ {method, xR = xmax - xmin, yR = ymax - ymin, fy = Compile[{x, y}, Evaluate@funcs[[2]]]}, {prec, sloppy, saveEq, eigQ, method} = {EquilibriaPrecisionGoal, SeedsOnly, SaveEquilibria, ShowEigenvalues, EquilibriumFindingMethod} /. {opts} /. Options[Equilibria]; seeds = Flatten[ Map[#[[(1+Flatten[ Position[ Rest[tt = Sign[Apply[fy, #, 2]]] * Rest[RotateRight[tt]], -1]])]]&, contourData], 1]; If[sloppy || seeds == {}, seeds, eqPts = Select[elimDups2D[Map[ {x, y} /. If[method === FindMinMethod, FindMinMethod[{funcs[[1]], funcs[[2]]}, {x, #[[1]]}, {y, #[[2]]}, {xR, yR}, Evaluate@FilterOptions[FindRoot, opts]], FindRoot[{funcs[[1]] == 0, funcs[[2]] == 0}, {x, #[[1]]}, {y, #[[2]]},Evaluate@FilterOptions[FindRoot, opts]]]&, seeds], 10^(3-prec)], N@xmin < #[[1]] < N@xmax && N@ymin < #[[2]] < N@ymax &]; If[eigQ, Print[TableForm[N[Chop@Transpose[ {eqPts, EigenData[funcs, {x, y}, #]& /@ eqPts}], 2], TableDepth->2, TableSpacing->{0, 1}, TableHeadings ->{None, {"Equilibria", "Eigenvalues\n"}}]]]; eqPts]] Equilibria[funcs_List, {x_, xmin_, xmax_}, {y_, ymin_, ymax_}, opts___Rule] := Equilibria[funcs, {x, xmin, xmax}, {y, ymin, ymax}, First /@ Cases[Graphics[ ContourPlot[funcs[[1]], {x, xmin, xmax}, {y, xmin, xmax}, Contours->{0}, ContourShading->False, DisplayFunction->Identity, PlotPoints-> (EquilibriaPlotPoints /. {opts} /. Options[Equilibria])]], _Line, Infinity], opts]
If your output will be a sequence of graphs, select a display option.
Display as:
individual images
a movie
both of the above
Up to
Initialization code: The NullclinePlot package