问题描述
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);
以及以下参数:
a=1;
c=0.2;
b = 0.75;
F=100;
在 Mathematica 中,我使用函数“ListLinePlot”来绘制 P[t] 和 F:
ListLinePlot[{Table[P[t],{t,25}],Table[F,25}]},PlotStyle → {Black,Red},Frame → True,FrameLabel → {"time","price"},AspectRatio → 0.4,PlotRange → All]
我怎样才能在 wxMaxima 中做到这一点? ListLinePlot 有没有类似的功能或者替代方案?
这是我在 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;
然后我尝试了:
draw2d(points(P[t],[t,25]))
绘制的函数应如下所示:
解决方法
好的,我已经修改了你上面显示的代码。这对我有用。我正在 macOS 上使用 Maxima 5.44。
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,25);
load (draw);
set_draw_defaults (terminal = qt);
draw2d (points_joined = true,points(Pt_list));
注意事项。 (1) P
上的递归需要有一个基本情况。我放了 P[0]: F + 1
。 (2) 赋值是 :
而不是 =
。请注意,x = y
是一个符号方程而不是赋值。 (3) 方括号 [ ]
仅用于下标和列表。使用括号 ( )
对表达式进行分组。 (4) draw2d
的语法有点不同,我修正了它。 (我为 terminal
设置了默认值,因为内置值对于 macOS 上的 Maxima 不正确;如果您在 Linux 或 Windows 上工作,则可以省略。)
编辑:试试这个也画一条水平线。
draw2d (points_joined = true,points(Pt_list),color = red,points([[0,F],[25,F]]),yrange = [F - 1,P[0] + 1]);