我想将 f^2 定义为 1 但保留 f 未定义
I want to define f^2 to be 1 but leave f undefined
例如,如果我编写表达式 (2+f) (3+f),我希望 Mathematica 生成 7 + 5f。我总是希望将 f^2 计算为 1(或我分配给它的任何其他值),但 f 是一个特殊的未定义符号。如果我定义 f^2:=1 我会收到 Tag Power is protected 错误消息。
我是 Mathematica 新手,自学成才,所以请尽量以最基本的方式回答这个问题。
郑重声明,我正在尝试在 n 维 space 时间内定义 Clifford 代数运算,并且能够进行这样的分配将极大地简化任务。
ReplaceAll[Expand[(2 + f) (3 + f)], Power[f, 2] -> 1]
7 + 5 f
推广到所有符号 e1,e2,e3,...,en
x = (a + a1 e1 + a2 e2 + a3 e3 + a4 e1 e2 - a5 e1 e3 + a6 e2 e3 +
a7 e1 e2 e3);
y = (b + b1 e1 + b2 e2 + b3 e3 + b4 e1 e2 - b5 e1 e3 + b6 e2 e3 +
b7 e1 e2 e3);
ReplaceAll[
Expand[x y],
Power[e_, 2] /; First[Characters[ToString[e]]] === "e" -> 1
]
我刚刚从@Edmund 那里学到的这种方式更优雅:
Expand[(2 + e1)(3 + e2)] /.Power[s_Symbol,2]/; StringStartsQ["e"]@SymbolName[s]->1
6 + 3 e1 + 2 e2 + e1 e2
例如,如果我编写表达式 (2+f) (3+f),我希望 Mathematica 生成 7 + 5f。我总是希望将 f^2 计算为 1(或我分配给它的任何其他值),但 f 是一个特殊的未定义符号。如果我定义 f^2:=1 我会收到 Tag Power is protected 错误消息。
我是 Mathematica 新手,自学成才,所以请尽量以最基本的方式回答这个问题。
郑重声明,我正在尝试在 n 维 space 时间内定义 Clifford 代数运算,并且能够进行这样的分配将极大地简化任务。
ReplaceAll[Expand[(2 + f) (3 + f)], Power[f, 2] -> 1]
7 + 5 f
推广到所有符号 e1,e2,e3,...,en
x = (a + a1 e1 + a2 e2 + a3 e3 + a4 e1 e2 - a5 e1 e3 + a6 e2 e3 +
a7 e1 e2 e3);
y = (b + b1 e1 + b2 e2 + b3 e3 + b4 e1 e2 - b5 e1 e3 + b6 e2 e3 +
b7 e1 e2 e3);
ReplaceAll[
Expand[x y],
Power[e_, 2] /; First[Characters[ToString[e]]] === "e" -> 1
]
我刚刚从@Edmund 那里学到的这种方式更优雅:
Expand[(2 + e1)(3 + e2)] /.Power[s_Symbol,2]/; StringStartsQ["e"]@SymbolName[s]->1
6 + 3 e1 + 2 e2 + e1 e2