Я пытаюсь переписать код Mathematica для построения равнозаселены кольца:Найти корень (предел интегрирования) в численном интегрировании
Nr = 5; (*radial modes*)
DF0[JJ_] := Exp[-JJ]; (*distribution function of long action*)
Jmax = 20; (* max action for numerical cuts*)
CF = NIntegrate[DF0[II], {II, 0, Jmax}];
DF[JJ_] := DF0[JJ]/CF;
bJ = Array[0, Nr + 1];
bJ[[1]] = 0.;
bJ[[Nr + 1]] = Jmax;
For[ir = 2, ir < Nr + 1, ir++,
bb = bJ[[ir - 1]];
bJ[[ir]] =
Jroot /.
FindRoot[
Integrate[DF[JJ], {JJ, bb, Jroot}] == 1/Nr, {Jroot, bb + 1/(Nr DF[bb])}];
];
bJ = Re[bJ];
(* Finding actions aJ of the thin rings: *)
aJ = Array[0, Nr];
For[ir = 1, ir < Nr + 1, ir++,
aJ[[ir]] = NIntegrate[J Nr DF[J], {J, bJ[[ir]], bJ[[ir + 1]]}];
];
aJ = Re[aJ];
rr = Sqrt[2 aJ]; (*radii of the rings*)
NHTRingsPlot =
ParametricPlot[Evaluate[Table[{rr[[i]] Cos[u], rr[[i]] Sin[u]}, {i, 1, Nr}]], {u, 0, 2 Pi}, PlotStyle -> {Blue},(*PlotLabel\[Rule]"Nested Rings",*) AxesLabel -> {"z", "\!\(\*SubscriptBox[\(p\), \(z\)]\)"},LabelStyle -> Directive[{FontSize -> 16}]]
в Python:
import numpy as np
import scipy
import math
from scipy.integrate import quad
Nr = 5.
Jmax = 20.
CF = math.ceil(scipy.integrate.quad(lambda II : math.exp(-II), 0, Jmax)[0])
bJ = np.array([0.,0.,0.,0.,0.,0.])
bJ[0] = 0.
bJ[Nr] = Jmax
def func():
func = quad(lambda JJ : (math.exp(-JJ)/CF), bb, Jroot) - 1/Nr
for i in bJ:
i=1
if i < Nr:
i += 1
bb = bJ[i]
bJ = np.roots(func, Jroots, bb + CF/(Nr * math.exp(-bb)))
bJ.append()
return bJ
Проблема с FUNC :
TypeError: неподдерживаемый тип операнда (ов) для -: 'кортеж' и 'поплавком'
в d с ббом:
NameError: название «бб» не определен
Я только начал изучать Python, и буду признателен, если кто-нибудь из вас может мне помочь с этим.
Для тех из нас, кто может быть Mathematica брошен вызов, добавьте комментарии к вашему коду Mathematica или опишите, что он делает, или укажите нам алгоритм, который вы пытаетесь реализовать. Кроме того, высказывание «Я застрял» не очень полезно - что не так с результатами. – wwii