Gruby solenoid

Zadanie

Znaleźć taki kształt (grubość) uzwojenia b[z]  solenoidu o długosci 2L i promieniu rdzenia a,  aby prąd J indukował 
w osi rdzenia żądane pole magnetyczne H[ζ]. Jaki kształt ma uzwojenie jeśli pole H[ζ] narasta w osi liniowo.

Wskazówka

Matematycznie problem sprowadza się do rozwiązania równania calkowego ze względu na funkcję b[z]:

H[ζ_]:=2π J(∫_(-L)^L)(∫_a^(b[z]))((r^2)/((((r^2)+(((ζ-z))^2)))^(3/2)))\[DifferentialD]r\[DifferentialD]z

Oznaczenia:
r - promień petli
z - współrzędna petli
ζ- punkt pomiaru pola H (w osi, tzn  r=0)
2L - długość rdzenia
a- minimalny promień pętli (promień rdzenia)
b[z] - maksymalny promień pętli
J - prąd
H - pole magnetyczne

Rozwiązanie

Deklaracje

<<"NonlinearRegression`"

Clear[r,a,z,L,ζ]

r/:Im[r]=0;
a/:Im[a]=0;
z/:Im[z]=0;
ζ/:Im[ζ]=0;
L/:Im[L]=0;

Całka

H[ζ_]:=2π J(∫_(-L)^L)((∫_a^(b[z]))((r^2)/((((r^2)+(((ζ-z))^2)))^(3/2)))\[DifferentialD]r)\[DifferentialD]z

W rachunku poniżej używam wielkości h[ζ]   (pole na amper)

h[ζ]:=(1/(2 π J))H[ζ]

Całka wewnetrzna

f[r_]=∫((r^2)/((((r^2)+(((ζ-z))^2)))^(3/2)))\[DifferentialD]r

Rozmiary solenoidu

L=4;
a=1;

Profil pola magnetycznego

y=ζ/L;

profilpola=y+2;

Parametry iteracji

Parametr μ mierzy stopień sprzężenia w iteracji. Wielkość μ jest do zgadnięcia. Optymalna wartość może zależeć od a i L.  (Teoria zbieżności procedury iteracyjnej nie jest przedmiotem tego zadania.)

μ=1/8;

Żądany stopień dopasowania pola magnetycznego (błąd wzgledny, metoda najmniejszych kwadratów):

poziom=0.000001

Warunki początkowe

h0[ζ_]=profilpola;

b[z_]=a+h0[z];

Procedura dopasowania wielomianu

dopasuj[h1_]:=(dane=Table[{ζ,h1[ζ]},{ζ,-L,L,.1}]; wiel=(∑_(i=0)^10)A[i](ζ^i);
nf[ζ_]=wiel/.FindFit[dane,wiel,CoefficientList[wiel,ζ],ζ];)

Iteracja

krok:=(h1[ζ_]:=NIntegrate[f[b[z]]-f[a],{z,-L,L}];dopasuj[h1];h1[ζ_]=nf[ζ];δ1[ζ_]=h0[ζ]-h1[ζ];b[z_]=b[z]+μ δ1[ζ];)

błąd=1;While[błąd>poziom,(krok;błąd=((NIntegrate[(((h0[ζ]-h1[ζ]))^2),{ζ,-L,L}])/(NIntegrate[(((h0[ζ]))^2),{ζ,-L,L}])))]

Wynik

Profil pola magnetycznego

Plot[{h0[ζ],h1[ζ],0},{ζ,-L,L},PlotRange->Full]

Profil uzwojenia

Plot[{a,b[ζ],0},{ζ,-L,L},PlotRange->Full]