Search code examples
maximawxmaxima

Mathematica's ListLinePlot in wxMaxima


I have the following functions:

P[t_] := P[t] = P[t-1] +a*ED[t-1];
ED[t_] := ED[t] = DF[t] + DC[t];
DF[t_] := DF[t] = b (F - P[t]);
DC[t_] := DC[t] = c (P[t] - F);

And the following parameters:

a=1;
c=0.2;
b = 0.75;
F=100;

In Mathematica I use the function "ListLinePlot" in order to plot P[t] and F:

ListLinePlot[{Table[P[t], {t, 0, 25}], Table[F, {t, 0, 25}]}, PlotStyle → {Black, Red},Frame → True, FrameLabel → {"time", "price"}, AspectRatio → 0.4, PlotRange → All]

How can I do this in wxMaxima? Is there a similar function or an alternative to ListLinePlot?

This is my attempt in wxMaxima:

P[t] := P[t-1] + a * ED[t-1];
ED[t] := DF[t] + DC[t];
DF[t] := b*[F-P[t]];
DC[t] := c*[P[t]-F];

a=1;
c=0.2;
b=0.75;
F=100;

And then I tried:

draw2d(points(P[t], [t,0,25]))

The plotted function should look like this: enter image description here


Solution

  • OK, I've adapted the code you showed above. This works for me. I'm working with Maxima 5.44 on macOS.

    P[t] := P[t-1] + a * ED[t-1];
    ED[t] := DF[t] + DC[t];
    DF[t] := b*(F-P[t]);
    DC[t] := c*(P[t]-F);
    
    a:1;
    c:0.2;
    b:0.75;
    F:100;
    P[0]: F + 1;
    
    Pt_list: makelist (P[t], t, 0, 25);
    
    load (draw);
    set_draw_defaults (terminal = qt);
    draw2d (points_joined = true, points(Pt_list));
    

    Notes. (1) There needs to be a base case for the recursion on P. I put P[0]: F + 1. (2) Assignments are : instead of =. Note that x = y is a symbolic equation instead of an assignment. (3) Square brackets [ ] are only for subscripts and lists. Use parentheses ( ) for grouping expressions. (4) Syntax for draw2d is a little different, I fixed it up. (I put a default for terminal since the built-in value is incorrect for Maxima on macOS; if you are working on Linux or Windows, you can omit that.)

    EDIT: Try this to draw a horizontal line as well.

    draw2d (points_joined = true, points(Pt_list),
            color = red, points([[0, F], [25, F]]), 
            yrange = [F - 1, P[0] + 1]);