wolfram-mathematica - 我想将 f^2 定义为 1 但保留 f 未定义

标签 wolfram-mathematica symbols protected user-defined-types

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

我是一名 Mathematica 新手,自学成才,所以请尝试尽可能以基本的方式回答这个问题。

郑重声明,我正在尝试在 n 维时空中定义 Clifford 代数运算,并且能够进行这样的分配将极大地简化任务。

最佳答案

推广到所有符号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

关于wolfram-mathematica - 我想将 f^2 定义为 1 但保留 f 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39197763/

相关文章:

wolfram-mathematica - 如何存储最小化的输出

wolfram-mathematica - 为什么 Extract 会在结果中添加额外的 {} 以及删除它们的最佳方法

graph - Mathematica GraphPlot 与图像

java - 来自其他包的 protected 方法调用

来自不同实例的 Java 保护方法访问

graphics - 查找绘图的最终显示区域中的框架/轴的坐标

java - 找不到符号类 drawCircle

python - Python 中的 ^=、-= 和 += 符号

c - 如何统计一个字符符号在文本文件中出现的次数?

c++ - 有没有办法禁止我的类的子类化?