在函数评估中分配的最大值索引变量

Maxima indexed variables assigned in evaluation of function

我想在函数定义中使用索引变量(这是一个 MWE,在现实世界中我有很多 a[i],用作多项式的系数)

f(x):=a[0]*x $

但是当我评估这个函数并为 a[0] 赋值时,赋值被忽略了:

ev(f(z),[a[0]=99]);
> a[0]*z

为了获得想要的结果,我需要进行额外的赋值

expr:f(z) $
ev(expr,[a[0]=99]);
> 99*z

这里发生了什么?有没有办法避免额外的步骤?

提前感谢您提供任何线索。

我看到如果你把函数写成 f(x) := a0*x 然后 ev(f(z), a0=99),你会得到预期的结果 99*zf(x) := a[0]*x 的不同行为因此是一个错误;我会提交错误报告。

一般来说,用值替换占位符的更可预测的策略是使用 subst 函数,该函数将值替换为表达式。在这种情况下你可以写:

subst (a[0] = 99, f(z));

如果你有多个值要替换,你可以这样写:

subst ([a[0] = 99, a[1] = 42, a[2] = 2*foo], myexpr);

其中 myexpr 是包含 a[0]a[1]a[2] 的表达式。

subst 是串行(一次一个值)替换。另请参阅 psubst,这是并行替换(一次所有值)。