Trouvez la distribution de charge sur une sphère
Trouvez les positions qui minimisent le potentiel de Coulomb pour que des particules chargées également se déplacent sur une sphère. Ceci est la distribution de charge d'équilibre.
Appelez n le nombre de particules.

n = 50;
Laissez être les coordonnées cartésiennes de l'
particule.

vars = Join[Array[x, n], Array[y, n], Array[z, n]];
L'objectif est de minimiser le potentiel de Coulomb.

potential =
Sum[((x[i] - x[j])^2 + (y[i] - y[j])^2 + (z[i] - z[j])^2)^-(1/
2), {i, 1, n - 1}, {j, i + 1, n}];
Puisque les particules sont sur une sphère, les coordonnées doivent satisfaire leurs contraintes unité de magnitude.

sphereconstr = Table[x[i]^2 + y[i]^2 + z[i]^2 == 1, {i, 1, n}];
Choisissez des points initiaux sur la sphère à l'aide de coordonnées sphériques aléatoires.

rpts = ConstantArray[1, n];
thetapts = RandomReal[{0, Pi}, n];
phipts = RandomReal[{-Pi, Pi}, n];
spherpts = Transpose[{rpts, thetapts, phipts}];
Transformez les points initiaux de coordonnées cartésiennes.

cartpts = CoordinateTransform["Spherical" -> "Cartesian", spherpts];
Réorganisez les points initiaux pour correspondre à la commande de variables.

initpts = Flatten[Transpose[cartpts]];
Minimisez le potentiel objet Coulomb à la sphère de contrainte.

sol = FindMinimum[{potential, sphereconstr}, Thread[{vars, initpts}]];
Extrayez de la solution, les positions des particules d'équilibre.

solpts = Table[{x[i], y[i], z[i]}, {i, 1, n}] /. sol[[2]];
Tracez le résultat.

Show[ListPointPlot3D[solpts,
PlotRange -> {{-1.1, 1.1}, {-1.1, 1.1}, {-1.1, 1.1}},
PlotStyle -> {{PointSize[.03], Blue}}, AspectRatio -> 1,
BoxRatios -> 1, PlotLabel -> "Particle Distribution"],
Graphics3D[{Opacity[.5], Sphere[]}]]
