You need to enable JavaScript to run this app. 如何在wxMaxima中实现Mathematica ListLinePlot的同等绘图功能
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 代码仅用普通赋值,会重复计算导致效率极低甚至栈溢出
  • 绘图语法错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 20:06:04