Transformations
In this example we use mappings to compute with functions defined on non-rectangular three dimensional volumes. The mapping variables must be defined on a rectangular domain. In other words, we will use the change of variables
$$ x = x(u,v,w), \ y = y(u,v,w), \ z = z(u,v,w), $$
where $u$, $v$, $w$ are defined as chebfun3 objects on a rectangular domain.
Triple integrals in spherical coordinates
Here we use spherical coordinates to compute the mass of a "ice-cream cone" region with variable density. The region is defined by
r = chebfun3(@(r,t,p) r, [0 1 0 2*pi pi/4 pi/2]); t = chebfun3(@(r,t,p) t, [0 1 0 2*pi pi/4 pi/2]); p = chebfun3(@(r,t,p) p, [0 1 0 2*pi pi/4 pi/2]); x = r.*cos(t).*cos(p); y = r.*sin(t).*cos(p); z = r.*sin(p);
We can plot the surface of this region using the plot command.
plot(x,y,z) view(-53,24)
We now define the density function and graph the surface of the solid colored by the density function.
density = sin(10*t).*cos(10*r)+1; plot(x,y,z,density)
The mass of the solid can be found by computing the triple integral in a rectangular region. The change of variables requires us to compute the determinant Jacobian of the transformation.
M = integral3(density.*abs(jacobian(x,y,z))); format long disp(M)
0.613434123007076
To show the accuracy of chebfun3 representations we now consider a simpler density function, for which the exact answer to the triple integral can easily be found.
disp(integral3(r.^2.*abs(jacobian(x,y,z)))) disp(pi*(2-sqrt(2))/5)
0.368060473804247 0.368060473804244
Triple integrals in cylindrical coordinates
In our next example we compute the center of mass of a sector of a cylinder with variable density.
r = chebfun3(@(r,t,z) r, [0 1 0 pi 0 1]); t = chebfun3(@(r,t,z) t, [0 1 0 pi 0 1]); z = chebfun3(@(r,t,z) z, [0 1 0 pi 0 1]); x = r.*cos(t); y = r.*sin(t); density = y.*sin(10*t)+1; plot(x,y,z,density) axis image, view(60,60) coord = [x; y; z]; jac = abs(jacobian(coord));
Mass:
M = integral3(density.*jac); disp(M)
1.570796326794894
Center of mass:
jac = abs(jacobian(x,y,z)); xc2 = integral3(x.*density.*jac)/M; yc2 = integral3(y.*density.*jac)/M; zc2 = integral3(z.*density.*jac)/M; disp([xc2,yc2,zc2])
0.000000000000000 0.424413181578388 0.500000000000000
Triple integrals over the torus and other regions
Here is an example were we compute a triple integral over the torus
r = chebfun3(@(r,t,p) r, [0 1 0 2*pi 0 2*pi]); t = chebfun3(@(r,t,p) t, [0 1 0 2*pi 0 2*pi]); p = chebfun3(@(r,t,p) p, [0 1 0 2*pi 0 2*pi]); x = (4+r.*cos(t)).*cos(p); y = (4+r.*cos(t)).*sin(p); z = r.*sin(t); f = sin(7*z).*sin(3*x);
plot(x,y,z,f) axis tight, axis image view(-28,31) disp(integral3(f.*abs(jacobian(x,y,z))))
-3.612086395056842e-23
In the next two examples we vary the radius of torus to generate other solid regions and the compute the triple integrals.
rr = r.*(1+sin(p)); x = (4+rr.*cos(t)).*cos(p); y = (4+rr.*cos(t)).*sin(p); z = rr.*sin(t); plot(x,y,z,f) axis tight, axis image view(-28,31) disp(integral3(f.*abs(jacobian(x,y,z))))
4.172576876884635e-24
Here is the other region.
rr = r.*(1+0.9*sin(10*p)); x = (4+rr.*cos(t)).*cos(p); y = (4+rr.*cos(t)).*sin(p); z = rr.*sin(t);
In this case we compute the volume of the region using triple integrals.
plot(x,y,z,f) axis tight, axis image view(-29,60) disp(integral3(abs(jacobian(x,y,z))))
1.109343534682443e+02