Нахождение распределения заряда на сферической поверхности
Найти положения, которые минимизируют электростатический потенциал для равнозаряженных частиц, свободно передвигающихся по сферической поверхности. Искомые положения называются равновесным распределением заряда.
Обозначить количество частиц буквой n.
n = 50;
Допустим, что {xi, yi, zi} являются декартовыми координатами частицы.
vars = Join[Array[x, n], Array[y, n], Array[z, n]];
Для достижения равновесного распределения заряда необходимо минимизировать электростатический потенциал данной частицы.
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}];
Поскольку частицы находятся на сферической поверхности, их координаты должны удовлетворять общим амплитудным ограничениям.
sphereconstr = Table[x[i]^2 + y[i]^2 + z[i]^2 == 1, {i, 1, n}];
Случайным образом, с помощью сферических координат, выбрать начальные точки на сферической поверхности.
rpts = ConstantArray[1, n];
thetapts = RandomReal[{0, Pi}, n];
phipts = RandomReal[{-Pi, Pi}, n];
spherpts = Transpose[{rpts, thetapts, phipts}];
Перевести значения начальных точек в декартовы координаты.
cartpts = CoordinateTransform["Spherical" -> "Cartesian", spherpts];
Перегруппировать начальные точки для соответствия порядку переменных.
initpts = Flatten[Transpose[cartpts]];
Минимизировать электростатический потенциал по отношению к сферическому ограничению.
sol = FindMinimum[{potential, sphereconstr}, Thread[{vars, initpts}]];
Извлечь из решения равновесные позиции частиц.
solpts = Table[{x[i], y[i], z[i]}, {i, 1, n}] /. sol[[2]];
Отобразить полученный результат на графике.
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[]}]]