Si vous allez à la rédaction du présent pour l'ab-initio monde (qui je suppose à partir de votre MP2 équation) vous voulez faire, il est très clair et facile à exprimer des choses aussi proche de la définition mathématique que vous le pouvez.
Pour l'un, je n'aurais pas le compliqué range
fonction. Ont-il définir une boucle, mais si vous souhaitez les boucles imbriquées, les spécifier à la fois:
Ainsi, au lieu de
(range(i) < j < N)[T(i,j) = (T(i,j) - T(j,i))/e(i+j)];
utilisation
loop(j,0,N)[loop(i,0,j)[T(i,j) = (T(i,j) - T(j,i))/e(i+j)]]
Et pour des choses comme la somme et le produit, faire de la syntaxe "hériter" du fait que c'est une boucle.
Ainsi, au lieu de
sum(range(i) < j < N))[(T(i,j) - T(j,i))/e(i+j)];
utilisation
sum(j,0,n)[loop(i,0,j)[(T(i,j) - T(j,i))/e(i+j)]]
ou si vous avez besoin d'une somme double
sum(j,0,n)[sum(i,0,j)[(T(i,j) - T(j,i))/e(i+j)]]
Puisqu'il semble que vous essayez de représenter la mécanique quantique des opérateurs, alors essayez de faire vos constructions de langage match de l'opérateur sur un nul 1-1 à base d'aussi près que possible. De cette façon, il est facile de traduire (et clair sur ce qui est en cours de traduction).
EDITÉ POUR AJOUTER
puisque vous êtes en train de faire de la chimie quantique, alors il est assez facile (à moins que la syntaxe va). Vous définissez les opérateurs qui travaillent toujours sur ce qui est de la droite et puis la seule chose dont vous avez besoin sont des parenthèses au groupe où un opérateur s'arrête.
Einstein notation est amusant où vous ne spécifiez pas les indices ou des limites et elles sont implicites en raison de la convention, cependant ce n'est pas faire un code clair et il est plus difficile de penser.
Pour les sommes, même si les limites implicites, elles sont toujours faciles à déterminer en fonction du contexte, de sorte que vous devriez toujours rendre les gens à les spécifier.
sum(i,0,n)sum(j,0,i)somme(a,-j,j)somme(b,-i,i)....
Puisque chaque opérateur travaille à la droite, de ses variables sont connues, donc j peux savoir à propos de moi, un peut savoir à propos de i et j et b peut savoir à propos de i,j, et un.
De mon expérience avec le quantum des chimistes (je suis de trop!) ils n'aiment pas la syntaxe compliquée qui diffère beaucoup de ce qu'ils écrivent. Ils sont heureux de séparer le double et le triple des sommes et intégrales dans une collection de singles, car ceux-ci sont juste abréviation de toute façon.
La symétrie n'est pas va être dur non plus. C'est juste une collection de swaps et ajoute ou se multiplie. J'aimerais faire quelque chose où vous spécifiez l'opération, qui contient une liste des éléments qui sont les mêmes et peuvent être échangés:
c2v(sigma_x,a,b)a+b
Ceci dit que a et b peuvent être considérés comme identiques des particules sous l'effet d'un c2v opération. Ce qui signifie que toute équation avec a et b tels que a+b après) doit être transformée en une combinaison linéaire de la c2v transformations. le sigma_x est l'opération dans c2v que vous souhaitez appliquer à votre fonction, (a+b). Si je me souviens bien, c'est 1/sqrt(2)((a+b)+(b+a)). Mais je n'ai pas de symétrie livre ici, de sorte que peut-être erroné.