Заслуженный участник |
|
12/07/07 4522
|
Последний раз редактировалось GAA 30.10.2024, 14:32, всего редактировалось 4 раз(а).
Для равномерно электрически заряженного с поверхностной плотностью круга , в книге [1] приводится (СГС) выражение потенциала в цилиндрической системе координат где — функции Бесселя первого рода. Используя этот подход (заменяя электрически заряженный круг на магнитно заряженный и учтывая два круга: с и ), в системе СИ можно записать выражение для скалярного магнитного потенциала Дифференцируя под знаком интеграла (и учитывая при вычислении производной по , что ), получим Используя результаты [2] выражения для и могут быть выражены через полные эллиптические функции (первого рода), (второго рода) и (третьего рода). Вводя обозначения , будем иметь Вводя обозначения , , , будем иметь Ниже приведены тексты на matlab. Файл CHx.m: function [Sx] = CHx(x0, y0, z0, M, R, h)
fx = @(x) (x0-x)./sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + z0^2)./(sqrt(R^2-x.^2)-y0 + sqrt((sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + z0^2));
Sx = integral(fx, -R, R);
fx = @(x) (x0-x)./sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + z0^2)./(-sqrt(R^2-x.^2)-y0 + sqrt((sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + z0^2));
Sx = Sx - integral(fx, -R, R);
fx = @(x) (x0-x)./sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + (z0+h)^2)./(sqrt(R^2-x.^2)-y0 + sqrt((sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + (z0+h)^2));
Sx = Sx - integral(fx, -R, R);
fx = @(x) (x0-x)./sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + (z0+h)^2)./(-sqrt(R^2-x.^2)-y0 + sqrt((sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + (z0+h)^2));
Sx = Sx + integral(fx, -R, R);
Sx = -M/(4*pi)*Sx;
end Файл CHz.m: function [Sz] = CHz(x0, y0, z0, M, R, h)
fz = @(x) z0./sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + z0^2)./(sqrt(R^2-x.^2)-y0 + sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + z0^2));
Sz = integral(fz, -R, R);
fz = @(x) z0./sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + z0^2)./(-sqrt(R^2-x.^2)-y0 + sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + z0^2));
Sz = Sz - integral(fz, -R, R);
fz = @(x) (z0+h)./sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + (z0+h)^2)./(sqrt(R^2-x.^2)-y0 + sqrt( (sqrt(R^2-x.^2)-y0).^2 +(x0-x).^2 + (z0+h)^2));
Sz = Sz - integral(fz, -R, R);
fz = @(x) (z0+h)./sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + (z0+h)^2)./(-sqrt(R^2-x.^2)-y0 + sqrt( (sqrt(R^2-x.^2)+y0).^2 +(x0-x).^2 + (z0+h)^2));
Sz = Sz + integral(fz, -R, R);
Sz = -M/(4*pi)*Sz;
end Файл сценария для оценки времени выполнения этих двух подходов:
a=9e-6; %m, 9 micrometer
M = 20000; % A/m
Hx0 = 0.1*M;
Hz0 = 0.1*M;
h = 6e-6; %m
D = 5.4e-6; %m
R = D/2;
mu0 = 4*pi*10^(-7);
z0=1e-6;
xx=[0:a/200:3*a];
N = length(xx);
Hxp = zeros(1, N); Hzp = zeros(1, N);
AHxp = zeros(1, N); AHzp = zeros(1, N);
tic;
for i=1:1:N
r = xx(i);
sqr_k = 4*R*r/((R+r)^2+z0^2);
[K, E] = ellipke(sqr_k);
AHxp(i) = R*M*((1-sqr_k/2)*K-E)/sqrt(sqr_k*r*R)/pi;
sqrsinBeta = z0^2/((R-r)^2+z0^2);
p = sqr_k/(1-(1-sqr_k)*sqrsinBeta);
L = sqrt(1-p)*sqrt(1-sqr_k/p)*ellipticPi(p, sqr_k);
if R > r
if r == 0
AHzp(i) = -z0/sqrt(R^2+z0^2);
else
AHzp(i) = 1- sqrt(sqr_k)*z0/(2*pi*sqrt(R*r))*K - L/pi;
end
elseif R==r
AHzp(i) = 0.5 - sqrt(sqr_k)*z0/(2*pi*R)*K;
else
AHzp(i) = -sqrt(sqr_k)*z0/(2*pi*sqrt(R*r))*K + L/pi;
end
sqr_k = 4*R*r/((R+r)^2+(z0+h)^2);
[K, E] = ellipke(sqr_k);
AHxp(i)= AHxp(i) - R*M*((1-sqr_k/2)*K-E)/sqrt(sqr_k*r*R)/pi;
sqrsinBeta = (z0+h)^2/((R-r)^2+(z0+h)^2);
p = sqr_k/(1-(1-sqr_k)*sqrsinBeta);
L = sqrt(1-p)*sqrt(1-sqr_k/p)*ellipticPi(p, sqr_k);
if R > r
if r==0
AHzp(i) = M*(AHzp(i)+ (z0+h)/sqrt(R^2+(z0+h)^2))/2;
else
AHzp(i) = M*(AHzp(i)- (1- sqrt(sqr_k)*(z0+h)/(2*pi*sqrt(R*r))*K - L/pi))/2;
end
elseif R==r
AHzp(i) = M*(AHzp(i)- (0.5 - sqrt(sqr_k)*(z0+h)/(2*pi*R)*K))/2;
else
AHzp(i) = M*(AHzp(i) - (-sqrt(sqr_k)*(z0+h)/(2*pi*sqrt(R*r))*K + L/pi))/2;
end
end
timerVal1 = toc;
tic;
for i=1:1:N
r = xx(i);
Hxp(i) = CHx(r, 0, z0, M, R, h);
Hzp(i) = CHz(r, 0, z0, M, R, h);
end
timerVal2 = toc;
disp(timerVal1/timerVal2);
plot(xx, AHxp, 'b-', xx, Hxp, 'r--', xx, AHzp, 'g-', xx, Hzp, 'r-.');
xlabel('r, m'); ylabel('H_i, A/m');
legend('analytical H_x', 'Numerical H_x', 'analytical H_z', 'Numerical H_z');
title(strcat('R=', num2str(R), 'm, M=', num2str(M), 'A/m, z_0=', num2str(z0), 'm'));
figure;
plot(xx, AHxp-Hxp, xx, AHzp-Hzp);
legend('analytical H_x - Numerical CH_x', 'analytical H_z - Numerical H_z');
title(strcat('R=', num2str(R), 'm, M=', num2str(M), 'A/m, z_0=', num2str(z0), 'm'));
В R2013b время выполнения численного интегрирования приблизительно в 8 раз меньше времени выполнения кода на основе сведения к эллиптическим функциям (на очень древнем процессоре), а в R2022 приблизительно в 15 раз (на более позднем процессоре). На рис. ниже приведены графики зависимости и от для фиксированного значения . Абсолютная разница не более . Вложение: Комментарий к файлу: Сравнение H_z и H_r найденных численным интегрированием и сведением к эллиптическим функциям (R2013)
HxAndHz.png [ 6.72 Кб | Просмотров: 308 ]
В общем, или я время неправильно измеряю, или сведение к эллиптическим функциям только ухудшает время выполнения. Ref1. Bateman H. Partial differential equations of mathematical physics — N.Y., Dover publications, 1944; Ch VII Cylindrical co-ordinates, §7.32 The use of definite integrals involving Bessel functions, c. 409–410. 2. Eason G., Noble B., Sneddon I. N. On Certain Integrals of Lipschitz-Hankel Type Involving Products of Bessel Functions // Phil. Trans. R. Soc. Lond. A, 1955, 247.
|
|