如何在 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 中做到这一点?
谢谢
我想你可以为此使用模式匹配。 (在匹配表达式而非字符串意义上的模式匹配。)tellsimp
和 tellsimpafter
定义自动应用的规则; defrule
和 defmatch
定义明确应用的规则。另见 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
作为术语出现在产品中....)
我有一个很长的列表,其中包含
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 中做到这一点?
谢谢
我想你可以为此使用模式匹配。 (在匹配表达式而非字符串意义上的模式匹配。)tellsimp
和 tellsimpafter
定义自动应用的规则; defrule
和 defmatch
定义明确应用的规则。另见 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
作为术语出现在产品中....)