Double integral with singularity point (relative tolerance)
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!