Search code examples
arraysplotgraphmaple

Plotting multiple arrays in maple


I'm trying to plot 4 data-sets in a single coordinate-system. I can plot every single one of them by themselves. However when I try to plot 2 or more with the same plot function I get an error. I can't use lists since I want to scale the arrays up to 2*10000, which a list can't. I'm using Maple 18. Can anybody please help me solve this?

This is my code:

enter image description here

Here is a plotted data-set: enter image description here

Here is the error I get, when trying to plot multiple sets(note I have tried using {} instead of []): enter image description here


Solution

  • Your problem is that your use of pair and zip is not going to produce Arrays P[i] whose layout is valid for plotting. (Perhaps you cribbed that bit of code from something which was intended to produce a list of lists instead of an Array.)

    Instead, you could construct the P[i] as iterator-by-2 Matrices (ie. 2-column Matrices).

    One way:

    restart;
    
    mu := 2.5:
    iterator := 25:
    
    fcn := proc(a)
      local F,i;
      F := Array(1..iterator);
      F[1] := a;
      for i from 2 by 1 to iterator do
        F[i] := mu*F[i-1]*(1-F[i-1]);
      end do;
      F;
    end proc:
    
    f[1]:=fcn(0.01):
    f[2]:=fcn(0.1):
    f[3]:=fcn(0.3):
    f[4]:=fcn(0.5):
    
    x := Array([seq(i,i=1..iterator)]):
    
    for i from 1 to 4 do
      P[i] := <x,f[i]>^%T:
    end do:
    
    plot([P[1],P[2],P[3],P[4]]);
    

    Another (similar) way:

    restart;
    
    mu := 2.5:
    iterator := 25:
    
    fcn := proc(a)
      local F,i;
      F := Vector(1..iterator);
      F[1] := a;
      for i from 2 by 1 to iterator do
        F[i] := mu*F[i-1]*(1-F[i-1]);
      end do;
      F;
    end proc:
    
    f[1]:=fcn(0.01):
    f[2]:=fcn(0.1):
    f[3]:=fcn(0.3):
    f[4]:=fcn(0.5):
    
    x := Vector([seq(i,i=1..iterator)]):
    
    for i from 1 to 4 do
      P[i] := <x|f[i]>:
    end do:
    
    plot([P[1],P[2],P[3],P[4]]);
    

    You could alternatively use the command plots:-listplot directly on your f[i], though you'd likely way to also specify different colors for each so that it looked nice when you used plots:-display to render them all together.

    I leave aside considerations of performance. There are ways to do all this and get faster computation. I deliberately keep your basic methodology.