首页 > 解决方案 > wxMaxima - 如何将变量移交给块内的makelist?

问题描述

我想创建一个评估表达式并返回 x 和 y 值的函数(在 wxMaxima 中)。输入是

目前它看起来像这样:

funvalues(expr,var,a,b,n) :=  block(
        [d,t,f],
        d:(b-a)/(n-1),
        t:makelist(i,i,a,b,d),
        f:makelist(expr,var,t),
        [t,f,expr,var,d]
);

使用它应该是这样的:

(%i313) funvalues(x^2,x,0,5,6);
(%o313) [[0,1,2,3,4,5],[0,1,4,9,16,25],x^2,x,1]

相反,会发生这种情况:

(%i313) funvalues(x^2,x,0,5,6);
(%o313) [[0,1,2,3,4,5],[x^2,x^2,x^2,x^2,x^2,x^2],x^2,x,1]

似乎将变量移交给第二个 makelist-command 无法正常工作。我尝试修改一些 evflags,但我不知道它们足够好,不能说它不能以这种方式解决。

将所有内容直接写入 makelist 有效:

(%i362) kill(x,expr,var,t,f)$
    t: makelist(i,i,0,5,1);
    f: makelist(x^2,x,t);

    (t) [0,1,2,3,4,5]
    (f) [0,1,4,9,16,25]

我确信我可以以某种方式解决这个问题,但显然我对 Maxima 的工作原理缺乏一些了解。

提前致谢 :)

标签: listfunctionevalblockmaxima

解决方案


知道了。这样它的工作原理:

funvalues(expr,var,a,b,n) :=  block(
        [d,t,f],
        d:(b-a)/(n-1),
        t:makelist(i,i,a,b,d),
        f:apply(makelist,[expr,var,t]),
        [t,f,expr,var,d]
); 

我 在发布问题后才发现: stackoverflow.com/questions/42819545/maxima-block-and-variable 。是的,我提前搜索了很多时间。(事实上​​太长了。)所以......对不起。希望这对某人有用。:)


推荐阅读