如何在wxMaxima中实现Mathematica ListLinePlot的同等绘图功能
wxMaxima 实现 Mathematica ListLinePlot 等价功能方案
对应工具说明
- wxMaxima 中与 Mathematica
ListLinePlot功能最匹配的是draw2d函数,需先加载draw扩展包(wxMaxima 默认未自动加载) - 核心差异:Mathematica 可直接对函数/规则自动迭代求值,wxMaxima 需先显式生成待绘制的序列点列表
原尝试代码的问题修正
- 语法错误:Maxima 中圆括号用于函数运算,方括号为列表/数组定义,原代码中
DF[t] = b*[F-P[t]]的方括号需替换为圆括号,否则会被识别为列表运算 - 逻辑缺失:
- 无初始终止条件:递归函数必须定义初始值(如 Mathematica 中隐含的
P[0]),否则会触发无限递归 - 未实现记忆化递归:Mathematica 中
P[t_]:=P[t]=...会自动存储计算过的P[t],原 Maxima 代码仅用普通赋值,会重复计算导致效率极低甚至栈溢出
- 无初始终止条件:递归函数必须定义初始值(如 Mathematica 中隐含的
- 绘图语法错误:
draw2d(points(P[t], [t,0,25]))中points需传入预生成的点对列表,而非「函数+范围」的直接写法,否则会返回无效结果
完整可运行代码(与 Mathematica 效果完全对齐)
/* 1. 加载绘图扩展包 */ load(draw)$ /* 2. 定义与 Mathematica 完全一致的参数 */ a:1$ c:0.2$ b:0.75$ F:100$ /* 3. 定义记忆化递归函数(等价于 Mathematica 的带记忆赋值语法) */ /* 初始条件:需替换为 Mathematica 中实际使用的 P[0] 值,此处以 60 为例 */ P[0]:60$ P[t] := P[t] : P[t-1] + a * ED[t-1]$ /* 记忆化:赋值即存储计算结果 */ ED[t] := ED[t] : DF[t] + DC[t]$ /* 同理实现记忆化 */ DF[t] := b*(F - P[t])$ /* 修正方括号为圆括号 */ DC[t] := c*(P[t] - F)$ /* 修正方括号为圆括号 */ /* 4. 预生成绘图所需的序列点列表(等价于 Mathematica 的 Table 函数) */ t_list: makelist(t, t, 0, 25)$ /* x轴:时间序列 */ P_list: makelist(P[t], t, 0, 25)$ /* y轴:价格P的迭代序列 */ F_list: makelist(F, t, 0, 25)$ /* y轴:常数F的水平序列 */ /* 5. 绘制与 Mathematica ListLinePlot 样式完全对齐的折线图 */ draw2d( terminal = 'wxt, /* 适配 wxMaxima 窗口输出 */ dimensions = [800, 320], /* 对应 Mathematica AspectRatio=0.4(高/宽=0.4) */ xlabel = "time", /* 对应 FrameLabel 横轴标签 */ ylabel = "price", /* 对应 FrameLabel 纵轴标签 */ xrange = [0, 25], /* 固定x轴范围(匹配 PlotRange=All 的约束) */ yrange = minmax, /* 自动适配y轴范围(匹配 PlotRange=All) */ /* 第一条线:P的迭代序列(黑色实线) */ discrete(t_list, P_list, color = black, line_width = 2, line_type = solid ), /* 第二条线:常数F的水平序列(红色实线) */ discrete(t_list, F_list, color = red, line_width = 2, line_type = solid ) )$
关键说明
- 记忆化递归实现:Maxima 中
P[t] := P[t] : <表达式>的写法,完全等价于 Mathematica 的P[t_] := P[t] = <表达式>——第一次计算P[t]时会自动递归求解并将结果存储为全局规则,后续调用直接取值,无重复计算 - 初始值调整:若 Mathematica 中预设的
P[0]不是 60,只需修改P[0]:60$这一行的数值即可 - 样式对齐:
dimensions的宽高比严格对应 Mathematica 的AspectRatio=0.4,颜色、线宽完全匹配原代码的PlotStyle配置
内容的提问来源于stack exchange,提问作者Lagrange
相关产品推荐
相关产品推荐

