Нахождение распределения заряда на сферической поверхности
Найти положения, которые минимизируют электростатический потенциал для равнозаряженных частиц, свободно передвигающихся по сферической поверхности. Искомые положения называются равновесным распределением заряда.
Обозначить количество частиц буквой n.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_52.png)
n = 50;
Допустим, что {xi, yi, zi} являются декартовыми координатами частицы.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_53.png)
vars = Join[Array[x, n], Array[y, n], Array[z, n]];
Для достижения равновесного распределения заряда необходимо минимизировать электростатический потенциал данной частицы.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_54.png)
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}];
Поскольку частицы находятся на сферической поверхности, их координаты должны удовлетворять общим амплитудным ограничениям.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_55.png)
sphereconstr = Table[x[i]^2 + y[i]^2 + z[i]^2 == 1, {i, 1, n}];
Случайным образом, с помощью сферических координат, выбрать начальные точки на сферической поверхности.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_56.png)
rpts = ConstantArray[1, n];
thetapts = RandomReal[{0, Pi}, n];
phipts = RandomReal[{-Pi, Pi}, n];
spherpts = Transpose[{rpts, thetapts, phipts}];
Перевести значения начальных точек в декартовы координаты.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_57.png)
cartpts = CoordinateTransform["Spherical" -> "Cartesian", spherpts];
Перегруппировать начальные точки для соответствия порядку переменных.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_58.png)
initpts = Flatten[Transpose[cartpts]];
Минимизировать электростатический потенциал по отношению к сферическому ограничению.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_59.png)
sol = FindMinimum[{potential, sphereconstr}, Thread[{vars, initpts}]];
Извлечь из решения равновесные позиции частиц.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_60.png)
solpts = Table[{x[i], y[i], z[i]}, {i, 1, n}] /. sol[[2]];
Отобразить полученный результат на графике.
![Click for copyable input](assets.ru/find-the-charge-distribution-on-a-sphere/In_61.png)
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[]}]]
![](assets.ru/find-the-charge-distribution-on-a-sphere/O_37.png)