Series solution to modified Bessel function second kind zeroth order
조회 수: 13 (최근 30일)
이전 댓글 표시
Im trying to show that the series solution to the bessel coefficient of 2. kind. and zero order gives the same result as the Matlab function besselk(0,x) - But I cant
The series solution looks like following:
K0(x)=-(gam+log(x/2))*I0(x)+sum(from_n=0 to infinity{x^(2*(n))/(2^(2*(n))*factorial(n)^2)}(1/(n+1))
It should approach zero at any x, but I cant make it do so. The error should not be within the I0(x), since i get this to fit perfectly with besseli(0,x).
My code look like following
gam=0.5772156649
x=5;
x2=16;
MATLAB_BESSELi= besseli(0,x);
MATLAB_BESSELi2= besseli(0,x2);
MATLAB_BESSELk= besselk(0,x);
for n=0:10
I(n+1)=x^(2*n)/(2^(2*n)*factorial(n)^2) % Equation 2.3.3 in MYERS
sumI= sum(I);
I2(n+1)=x2^(2*n)/(2^(2*n)*factorial(n)^2) % Equation 2.3.3 in MYERS
sumI2= sum(I2);
% figure(1)
% subplot(1,2,1)
% plot(n,sumI,'xb','markersize',10); hold on
% plot(n,MATLAB_BESSELi,'or'); hold on
% legend('Analytical expression','Matlab values','location','se')
end
for n=0:10;
LED1=-(gam+log(x/2))*sumI
LED2(n+1)=x^(2*(n))/(2^(2*(n))*factorial(n)^2)*(1/(n+1))
sumLED2=sum(LED2)
K=LED1+sumLED2
figure(2)
plot(n, K,'xb'); hold on
plot(n, besselk(0,x),'xr')
end
Does anyone know how to solve this?
Please excuse my bad programming behaviors when looking at my script.
Thanks
댓글 수: 2
Star Strider
2014년 2월 26일
I can’t match what you wrote with my reference (Abramowitz and Stegun, Dover 1972) P. 360, 9.1.13. At the very least, you seem to be missing a factor of (2/pi). I can’t tell if that’s the only problem.
답변 (1개)
Star Strider
2014년 2월 27일
편집: Star Strider
2014년 2월 27일
I decided to code that on my own, in part so I could understand the process. (I haven’t had to code my own series evaluations since I got MATLAB a couple decades ago.)
Here’s my solution (Abramowitz and Stegun, 9.6.12 and 9.6.13):
gam=0.5772156649;
x = 5;
I0 = 1;
for k1 = 1:10
I0 = I0 + (((x.^2)./4).^k1)/(factorial(k1)^2);
end
I0m = besseli(0,x);
I0cmp = [I0m I0]
K0 = -(log(x/2)+gam)*I0;
frx = 0;
for k1 = 1:10
frx = frx + 1/k1;
K0 = K0 + (frx*(((x.^2)./4).^k1)/(factorial(k1)^2));
end
K0m = besselk(0,x);
K0cmp = [K0m K0]
NOTE: My notation corresponds to that in Abramowitz and Stegun, except for using x where they use z.
I tend to use parentheses more than others might, because compilers never manage to guess what I’m thinking.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Bessel functions에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!