Wolfram mathematica 我想将f^2定义为1,但不定义f

Wolfram mathematica 我想将f^2定义为1,但不定义f,wolfram-mathematica,symbols,protected,user-defined-types,Wolfram Mathematica,Symbols,Protected,User Defined Types,例如,如果我写表达式(2+f)(3+f),我想让Mathematica生成7+5f。我总是希望f^2被计算为1(或任何其他我分配给它的值),但是f是一个特殊的未定义符号。如果我定义f^2:=1,我会收到一条标记Power is protected错误消息 我是一个数学新手,自学成才,所以请尽量用最基本的方式回答这个问题 为了记录在案,我试图在n维时空中定义Clifford代数运算,能够做出这样的赋值将极大地简化任务 ReplaceAll[Expand[(2 + f) (3 + f)], Powe

例如,如果我写表达式(2+f)(3+f),我想让Mathematica生成7+5f。我总是希望f^2被计算为1(或任何其他我分配给它的值),但是f是一个特殊的未定义符号。如果我定义f^2:=1,我会收到一条标记Power is protected错误消息

我是一个数学新手,自学成才,所以请尽量用最基本的方式回答这个问题

为了记录在案,我试图在n维时空中定义Clifford代数运算,能够做出这样的赋值将极大地简化任务

ReplaceAll[Expand[(2 + f) (3 + f)], Power[f, 2] -> 1]
7+5 f


通用于所有符号e1、e2、e3、…、en


我刚从@Edmund那里学到的这种方式更优雅:

Expand[(2 + e1)(3 + e2)] /.Power[s_Symbol,2]/; StringStartsQ["e"]@SymbolName[s]->1

我们可以使用unset/TagSet
f/:f^2=1
,但它不能识别
f^4==1
,因为4≠ 2…克里斯的答案正是我想要的。非常感谢你。在我结束这篇文章之前,让我稍微扩展一下这个问题,看看是否还有这样一个简单的解决方案。以下作品: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[xy],{Power[e1,2]->1,Power[e2,2]->1,Power[e3,2]->1}如果输入了一个数字n,这可以很容易地扩展到处理e1,e2,…,en吗?在其他论坛上得到答案后,你是否会在几秒钟内回收答案?糟糕的状态,伙计。糟糕的状态。谢谢你们两位。这两种解决方案在更一般的问题上都非常有效。我真的很感谢你的帮助。在我目前学习数学的状态下,我不可能做到这一点。我甚至可以使用你的技术来扩展这一点,在这一步成功后,我意识到这是必要的。我需要允许一些ei的平方等于-1,其余的为+1。为此,我将所选的几个从e1重命名为f1,从e2重命名为f2,等等。然后我应用了两个规则,而不是1,一个用于e^2,另一个用于f^2。最后我用e1替换了f'1,用e2替换了f2,等等。多亏了againEdmund,我找不到125089。我还没有足够的Mathematica词汇来搜索术语“模式匹配”。谢谢你的参考。@Edmund我试图解决OP的问题,但是我被卡住了,文档也帮不了我。我学到了一些新东西,同时也帮助了其他人。顺便说一句,在你找到更好的答案之前,我找到并发布了我自己问题的答案。我将来应该如何处理这样的情况?
Expand[(2 + e1)(3 + e2)] /.Power[s_Symbol,2]/; StringStartsQ["e"]@SymbolName[s]->1
6 + 3 e1 + 2 e2 + e1 e2