Double integral with singularity point (relative tolerance)

2 次查看(过去 30 天)
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 CenterFile Exchange 中查找有关 미적분 的更多信息

Community Treasure Hunt

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

Start Hunting!