PDA

View Full Version : bifurcation


jemma
Sep15-10, 10:20 PM
I want to produce a bifurcation diagram using mathematica to represent equilibrium points of p1 using the data obtained from the following code, where pn1, pn2, pn3 are recrusion exquations. i.e. x-axis will be the paramter t (ranging from 0-0.3) and y-axis will be the values of p1 this code produces.

series = {};
For[i = 0, i ≤ 300, ++i, p1sol = Sort[
p1 /. NSolve[{pn1 == 0, pn2 == 0, pn3 == 0} /. t -> i/1000.0, {p1, p2, p3}]];
series = Join[p1series, {Join[{i/1000.0}, p1sol]}]]

Thanks if you can help me.

Pythagorean
Sep15-10, 10:29 PM
I've made bifurcation diagrams in Matlab, but I'm not familiar with mathematica's language.

If you want to write it as pseudocode and specifically tell me the issue you're having, I might be able to offer some advice.

jemma
Sep15-10, 10:56 PM
In mathematica I can export this as a table so I just have the data. I could use matlab to generate the actual plot using these data. Would this be possible? Do you have an example of this?

% a prompt for generating a list
series = {};

For[i = 0, i ≤ 300, ++i, p1sol = Sort[
p1 /. NSolve[{pn1 == 0, pn2 == 0, pn3 == 0} /. t -> i/1000.0, {p1, p2, p3}]];

%NSolve gives a list of numerical approximations for all of the roots of the polynomial
%equation, (maybe the root function in matlab?)

% /.t this just evaluates the equations at t
% t (plotted on the x-axis) ranges from 0-0.3 (since 300/1000)

series = Join[p1series, {Join[{i/1000.0}, p1sol]}]]

%The series is a list of the values of p1 at specific values of t.

Simon_Tyler
Sep16-10, 04:38 AM
In Mathematica, maybe the easiest way is to use ListPlot:
eg the following is the bifurcation diagram for the logistic map (http://demonstrations.wolfram.com/search.html?query=logistic+map):
ListPlot[Table[Thread[{r,
Union[NestList[r # (1 - #) &, .77, 1000][[-50 ;;]]]}], {r, 1, 4, .01}],
PlotStyle -> PointSize[Tiny]]

There are probably better ways of doing this. Have a look at the code on the demonstration site (http://demonstrations.wolfram.com/search.html?query=bifurcation+diagram)

Pythagorean
Sep18-10, 09:15 PM
%Matlab is relatively simple to plot in. You have a matrix of data, you just rip out vectors from it:

%for instance, a matrix S, with size MxN, you just declare a vector to be a slice of the matrix:

parameter = S(:,n) %the whole row in the nth column becomes a vector called 'parameter')

%Do the same with your stable points, pulling them out of the appropriate row (or column, depending on you shaped your data).

stablepoints = S(:,n+1) %or wherever your stable points are (there's no guarantee it will be n+1, I just mean this as an example)
stablepoints2 = S(:,n+2) %if you have a second set of stable points

%Then to plot, just:

plot(parameter,stablepoints,'*') %the * ensures a point will be plotted. By default, MATLAB will connect the points which is no what you want in a bifurcation diagram.

%If you have more than one vector of stable points you can add:

hold on
%so that it won't clear your last plot and will add any additional plots right into the current figure

plot(parameter,stablepoints2,'*')
plot(parameter,stablepoints3,'*')

%making it look pretty:

title 'this is your title'
xlabel 'bifurcation parameter, r'
ylabel 'stable points'

%Is this what you're asking for?

jemma
Sep20-10, 12:16 AM
Yes! Thank you so much, this works well!

jemma
Sep20-10, 09:03 PM
Hi, just one more question... I want to adjust the line width to make it more clear. From what I've read online it suggests the code would look something like this...

plot(parameter,stablepoints2,'*', 'LineWidth', 2)

Is this right? I've tried lots of different line width points but it doesn't seem to be working.

Also, I'd like to plot each set of points in a different colour?

Thanks again!

Pythagorean
Sep21-10, 05:50 AM
For colors:

plot(x,y,'r*')

would be a red star

on my iPhone, would have to research the other question on matlab, maybe tomorrow.

Pythagorean
Sep21-10, 06:00 PM
So I'm not haveing any problems with that 'LineWidth' line. It thickens the line and plots it. Maybe if you post your code and the error I can trouble shoot.

type 'doc LineSpec' at the MATLAB command line for the color and marker shape codes (i.e r is red, k is black, etc.)

I would also suggest using 'doc' instead of 'help' in general when you're first learning a command.

jemma
Sep22-10, 02:10 AM
cheers for the colour tip!