Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Produce a bifurcation diagram using mathematica

  1. Sep 15, 2010 #1
    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.
     
  2. jcsd
  3. Sep 15, 2010 #2

    Pythagorean

    User Avatar
    Gold Member

    Re: bifurcation

    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.
     
  4. Sep 15, 2010 #3
    Re: bifurcation

    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.
     
  5. Sep 16, 2010 #4
    Last edited by a moderator: Apr 25, 2017
  6. Sep 18, 2010 #5

    Pythagorean

    User Avatar
    Gold Member

    Re: bifurcation

    %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?
     
  7. Sep 20, 2010 #6
    Re: bifurcation

    Yes! Thank you so much, this works well!
     
  8. Sep 20, 2010 #7
    Re: bifurcation

    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!
     
    Last edited: Sep 20, 2010
  9. Sep 21, 2010 #8

    Pythagorean

    User Avatar
    Gold Member

    Re: bifurcation

    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.
     
  10. Sep 21, 2010 #9

    Pythagorean

    User Avatar
    Gold Member

    Re: bifurcation

    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.
     
  11. Sep 22, 2010 #10
    Re: bifurcation

    cheers for the colour tip!
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook