Notations quantiques de soutien-gorge et ket
Existe-t-il un moyen de définir l'expression quantique ci-dessus dans Mathematica. J'utilise un package complémentaire dans ce lien.http://homepage.cem.itesm.mx/lgomez/quantum/
Ce que j'ai essayé, c'est:
a = 2;
b = SqrtBox["3"] // DisplayForm;
h1[a_, b_] := Subscript[a, b];
Ket[\[Psi]] := (a*(h1[Ket[u], 1])*(h1[Ket[d], 2])) + (b*(h1[Ket[d],
1])*(h1[Ket[u], 2]))
Mais je ne peux pas créer de flèche vers le bas et vers le haut car il affiche une erreur. Puis-je utiliser la multiplication habituelle pour les kets?
Réponses
Je suis à peu près sûr que vous ne recherchez pas cela, car cela nécessitera du travail avant de pouvoir en faire quelque chose d'utile.
Je ne suis pas familier avec le package lié et je ne suis pas non plus familier avec la mécanique quantique dans n'importe quel effort d'imagination.
Si vous êtes intéressé par un moyen rapide de composer une expression et que vous n'essayez pas de faire quelque chose de trop compliqué, veuillez continuer à lire.
En utilisant, Formatvous pouvez spécifier comment certaines expressions sont composées par le frontal.
Afin de reproduire l'équation de la question, nous devons définir ce qui suit:
(* an expression to represent subscripted expressions *)
Format[subs[body_, sub_]] := Subscript[body, sub]
L'évaluation de la première puis l'évaluation, par exemple subs[x,1], produira dans un cahier un indice xavec l'indice étant 1.
L'évaluation subs[x,1] // FullFormrévélera à son tour ce qui se passe réellement. Le frontal affiche l'expression en utilisant la règle définie avec Formatmais l' expression réelle est toujours subs[x,1]. En gros, cela signifie que l'on peut définir des règles pour les objets avec Head subset les afficher sous forme d'indice.
De la même manière, nous pouvons définir une règle d'affichage pour la notation ket :
Format[ket[body_]] := Row[{"\[LeftBracketingBar]", body, "\[RightAngleBracket]"}]
Après avoir évalué la ligne ci-dessus, on peut démontrer comment, par exemple, ket[x]s'affiche dans un cahier . En outre, on peut vérifier que, par exemple, subs[ket[x],1]produit le résultat attendu, c'est-à-dire une notation ket en indice pour xet un indice de 1.
Encore une fois, l'utilisation FullFormmontrera que les expressions sous-jacentes restent inchangées, c'est-à-dire qu'elles FullForm[subs[ket[x], 1]]doivent afficher l'expression typée.
En continuant de la même manière, nous pouvons définir des règles d'affichage pour la notation ket avec des flèches à double trait haut et bas:
Format[upket[]] := Row[{"\[LeftBracketingBar]", "\[DoubleUpArrow]",
"\[RightAngleBracket]"}]
Format[downket[]] := Row[{"\[LeftBracketingBar]", "\[DoubleDownArrow]",
"\[RightAngleBracket]"}]
Veuillez vérifier que l'évaluation d'expressions comme eq subs[upket[], 1]ou subs[downket[], 2]produit les résultats escomptés.
Après avoir défini les règles d' affichage des expressions en indice et la notation ket , il est trivial de reproduire l'équation dans la question:
a = 2;
b = Sqrt[3];
expr = subs[ket[ψ], subs[t, 2]] == a subs[upket[], 1] subs[downket[], 2] +
b subs[downket[], 1] subs[upket[], 2];
Voici comment exprs'affiche:
et voici le FullForm:
Éditer:
Afin de résoudre les problèmes de non-commutativité, une solution rapide consiste à ajouter la Formatrègle suivante :
Format[nonCommutativeTimes[x__subs]] := Star[x]
et modifiez le en exprconséquence:
expr = subs[ket[ψ], subs[t, 2]] == a nonCommutativeTimes[subs[upket[], 1],
subs[downket[], 2]] + b nonCommutativeTimes[subs[downket[], 1], subs[upket[], 2]]
L'évaluation, comme avant, produit ce qui suit:
Comme je l'ai dit dans l'introduction, cela ne vise pas à remplacer un package spécialisé ou une autre fonctionnalité, mais n'est présenté ici que comme un moyen rapide d'obtenir le résultat souhaité.
Si l'on a l'intention de travailler avec par exemple des expressions algébriques impliquant subset ketalors ils devraient définir la fonctionnalité pertinente à partir de zéro , ou presque à partir de zéro. Par exemple, en ce qui concerne la multiplication non commutative, il existe un symbole intégré NonCommutativeMultiplyqui peut être utilisé à la place de celui nonCommutativeTimes Headutilisé ci-dessus.