2

Je veux, par exemple, que Mathematica génère 7 + 5f si j'écris l'expression (2 + f) (3 + f). Je veux toujours que f^2 soit calculé comme 1 (ou n'importe quelle autre valeur que je lui assigne) mais que f soit un symbole spécial indéfini. Si je définis f^2: = 1, je reçois un message d'erreur Tag Power is protected. Je suis un novice de Mathematica, autodidacte, alors essayez d'y répondre de manière aussi élémentaire que possible. Pour l'anecdote, j'essaie de définir les opérations d'algèbre de Clifford dans l'espace-temps n-dimensionnel et être capable de faire une telle affectation simplifierait énormément la tâche.Je veux définir f^2 comme étant 1 mais laisser f indéfini

+0

Nous pourrions utiliser Upset/tagset 'f/f^2 = 1' mais cela ne reconnaîtra pas' f^4 == 1' depuis le 4 ≠ 2 ... – kennytm

+0

Chris La réponse est juste ce que je cherchais. Merci beaucoup. Avant de clore ce sujet, permettez-moi de développer légèrement la question pour voir s'il existe toujours une solution aussi simple. Les travaux suivants: 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); RemplacerTous [ Développez [xy], {Alimentation [e1, 2] -> 1, Alimentation [e2, 2] -> 1, Alimentation [e3, 2] -> 1}] – matrixbud

+0

Si un nombre n est entré, cela peut-il être facilement étendu pour gérer e1, e2, ..., en? – matrixbud

Répondre

1

généralisable à tous les symboles 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 
] 

cette façon que je viens d'apprendre de @Edmund est plus élégant:

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

Êtes-vous recycler les réponses secondes après les avoir obtenues sur d'autres forums? Mauvaise forme, mate. Mauvaise forme. http://mathematica.stackexchange.com/questions/125089 – Edmund

+0

Merci à vous deux. Les deux solutions fonctionnent parfaitement sur le problème plus général. J'apprécie vraiment l'aide. Je n'aurais pas pu le faire dans mon état actuel d'apprentissage Mathematica. J'ai même été capable d'utiliser vos techniques pour l'étendre un peu plus, ce dont j'ai réalisé qu'il était nécessaire après avoir réussi à cette étape. Je dois permettre que quelques-uns des ei aient des carrés égaux à -1, le reste étant +1. Je l'ai fait en renommant les quelques élus de e1 à f1, e2 à f2, etc. Puis j'ai appliqué 2 règles au lieu de 1, une pour e^2 et aussi une pour f^2. Enfin j'ai remplacé f1 avec e1, f2 avec e2, etc. Merci encore – matrixbud

+0

Edmund, je n'ai pas pu trouver 125089. Je ne possède pas encore assez de vocabulaire Mathematica pour rechercher les termes "pattern matching". Merci pour la référence. – matrixbud

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

7 + 5 f