如何在 Maxima 中替换符号变量

How to Subst symbolic variables in Maxima

我有一个很长的列表,其中包含

a:[1, a, -b, -a*b, j, -j, j^2, -j^3, a*j, a*j^2, -a*j,- a*j^2, a*b*j, a*j^4, -a*b*j^7];

我想执行类似 j^x -> j^(3 mod x)

的替换

基本上用 j^(3 mod x) 替换模式列表 j^x (where x = 0 to 100) 中的每个匹配项。

subst 和 ratsubst 等似乎在字面上寻找一种模式,而不是象征性地寻找模式。

有没有办法在 Maxima 中做到这一点?

谢谢

我想你可以为此使用模式匹配。 (在匹配表达式而非字符串意义上的模式匹配。)tellsimptellsimpafter 定义自动应用的规则; defruledefmatch 定义明确应用的规则。另见 matchdeclare.

通过 defrule 的解决方案可能如下所示;我没试过。

matchdeclare (nn, lambda ([e], integerp(e) and e >= 3));
defrule (r1, j^nn, j^(mod(3, nn)));
apply1 (mylist, r1);

其中 mylist 是上面的列表。 (我认为将列表分配给 a 是有问题的,因为 a 作为术语出现在产品中....)