Ermitteln Sie die Ladungsverteilung auf einer Kugel
Ermitteln Sie die Positionen, die das Coulomb-Potential für kugelsymmetrisch verteilte frei bewegliche geladene Teilchen minimieren. Dann handelt es sich um das Ladungsgleichgewicht.
Geben Sie die Zahl der Teilchen mit n an.

n = 50;
{xi, yi, zi} seien die kartesischen Koordinaten des Partikels.

vars = Join[Array[x, n], Array[y, n], Array[z, n]];
Das Ziel ist die Minimierung des Coulomb-Potentials.

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}];
Da sich die Teilchen auf einer Kugeloberfläche befinden, müssen ihre Koordinatenvektoren alle dieselbe Länge besitzen.

sphereconstr = Table[x[i]^2 + y[i]^2 + z[i]^2 == 1, {i, 1, n}];
Wählen Sie zufällige Kugelkoordinaten als Anfangspunkte.

rpts = ConstantArray[1, n];
thetapts = RandomReal[{0, Pi}, n];
phipts = RandomReal[{-Pi, Pi}, n];
spherpts = Transpose[{rpts, thetapts, phipts}];
Wandeln Sie die Anfangspunkte in kartesische Koordinaten um.

cartpts = CoordinateTransform["Spherical" -> "Cartesian", spherpts];
Ordnen Sie die Anfangspunkte so an, dass sie der Reihenfolge der Variablen entsprechen.

initpts = Flatten[Transpose[cartpts]];
Minimieren Sie das Coulomb-Potential unter Berücksichtigung der durch die Kugel gegebenen Bedingungen.

sol = FindMinimum[{potential, sphereconstr}, Thread[{vars, initpts}]];
Extrahieren Sie die Gleichgewichtspositionen der Teilchen aus der Lösung.

solpts = Table[{x[i], y[i], z[i]}, {i, 1, n}] /. sol[[2]];
Plotten Sie das Resultat.

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[]}]]
