| 
													Последний раз редактировалось 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 micrometerM = 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 раз (на более позднем процессоре). На рис. ниже приведены графики зависимости    и    от    для фиксированного значения   . Абсолютная разница не более   . Вложение: HxAndHz.png В общем, или я время неправильно измеряю, или сведение к эллиптическим функциям только ухудшает время выполнения.Ref 1. 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.
 У вас нет доступа для просмотра вложений в этом сообщении.
 
 |