Double integral with singularity point (relative tolerance)

1 回表示 (過去 30 日間)
Hyunseop Lee
Hyunseop Lee 2018 年 2 月 5 日
HI. I have a problem with my code.
I would like to evaluate double integral which contains singular point. and I found that integral2 function can evaluate double integral when put the singular point on integral boundary. So I tried that, but after doing that there is message "Maximum number of function evaluations has been exceeded" and calculated value is very different with value with low relative tolerance. (this message doesn't show when I decrease relative tolerance into 1e-3)
But, I am not sure about value which I gain from decreasing relative tolerance. (and I don't know about relative tolerance. In this function, how to compare calculate value with some value?)
This is my question. 1. What means of relative tolerance? and in matlab, what method which compare calculate value and some value? 2. How can I make more accurate calculations? I would like to use a lower relative tolerance value, so that the calculated values converge.
Here is my code
const = 3/(2*pi);
R = 1e-3 ;
domain = [0.000353553390593274 0.000146446609406726 0.000923879532511287 0 0.785398163397448 0 0.785398163397448 ] ;
RelTol = 1e-6 ;
dx = @(phi,th) domain(1) - (R.*sin(phi).*cos(th)) ;
dy = @(phi,th) domain(2) - (R.*sin(phi).*sin(th)) ;
dz = @(phi,th) domain(3) - (R.*cos(phi)) ;
nx = @(phi,th) - sin(phi).*cos(th) ;
ny = @(phi,th) - sin(phi).*sin(th) ;
nz = @(phi,th) - cos(phi) ;
rxy5 = @(phi,th) (dx(phi,th).^2 + dy(phi,th).^2 + dz(phi,th).^2).^(5/2);
Jac = @(phi,th) R^2*sin(phi) ;
T111 = @(phi,th) const.*(dx(phi,th).*dx(phi,th).*dx(phi,th))./(rxy5(phi,th));
T121 = @(phi,th) const.*(dx(phi,th).*dx(phi,th).*dy(phi,th))./(rxy5(phi,th));
T131 = @(phi,th) const.*(dx(phi,th).*dx(phi,th).*dz(phi,th))./(rxy5(phi,th));
T11_B11 = @(phi,th) (T111(phi,th).*nx(phi,th) + T121(phi,th).*ny(phi,th) + T131(phi,th).*nz(phi,th)).*(Jac(phi,th));
a = 0.5*(domain(4)+domain(5));
b = 0.5*(domain(6)+domain(7));
D11_B11_1 = integral2(T11_B11, domain(4), a, domain(6), b, 'Method', 'tiled','RelTol',RelTol);
D11_B11_2 = integral2(T11_B11, a, domain(5), domain(6), b, 'Method', 'tiled','RelTol',RelTol);
D11_B11_3 = integral2(T11_B11, domain(4), a, b, domain(7), 'Method', 'tiled','RelTol',RelTol);
D11_B11_4 = integral2(T11_B11, a, domain(5), b, domain(7), 'Method', 'tiled','RelTol',RelTol);

回答 (0 件)

カテゴリ

Help Center および File Exchange미적분 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!