在函数评估中分配的最大值索引变量
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*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
,这是并行替换(一次所有值)。
我想在函数定义中使用索引变量(这是一个 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*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
,这是并行替换(一次所有值)。