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

时间:2019-01-22 02:50:21

标签: function evaluation maxima

我想在函数定义中使用索引变量(这是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

这是怎么回事?有没有办法避免额外的步骤?

预先感谢您提供任何线索。

1 个答案:

答案 0 :(得分:1)

我看到,如果您先将函数编写为f(x) := a0*x,然后再编写ev(f(z), a0=99),则会得到预期的结果99*z。因此,f(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,它是并行替换(一次所有值)。