# Surface Integrals, Triple Integrals, and the Divergence Theorem of Gauss in Maxima

In earlier posts, I describe the Package of Maxima functions MATH214 for use in my multivariable calculus class, with applications to Greens  Theorem and Stokes Theorem.

Here we show how the  surface integral function integrateSurf() and triple integration  function integrate3()  (together with the divergence function div() )work on a Gauss’s Theorem example: We integrate the parabolic surface and the circular base surface separately, and show their sum is equal to the triple integral of the divergence. The functions above are included in the MATH214 package, but I list them below as well:

```integrateSurf(F,S,uu,aa,bb,vv,cc,dd):=block(
[F2],
F2:psubst([x=S,y=S,z=S],F),
integrate(integrate(trigsimp(F2.cross(diff(S,uu),diff(S,vv))),uu,aa,bb),vv,cc,dd));

integrate3(F,xx,aa,bb,yy,cc,dd,zz,ee,ff):=block(
integrate(integrate(integrate(F,xx,aa,bb),yy,cc,dd),zz,ee,ff));

div(f,x,y,z):=diff(f,x)+diff(f,y)+diff(f,z)\$

cross(_u,_v):=[_u*_v-_u*_v,_u*_v-_u*_v,_u*_v-_u*_v]\$```

## 11 thoughts on “Surface Integrals, Triple Integrals, and the Divergence Theorem of Gauss in Maxima”

1. Edward Montague says:

I’m attempting to interpret and visualize Gauss’s law for electrostatics.
The nomenclature is posing some problems , for instance is div(F) equivalent to pho in the
standard representation or is F(x,y,z) representing a force upon a test charge..

Here’s my attempt , so far , at visualizing the surface and the distribution of F(x,y,z) .
/*

Gauss’s law applied to electrostatics , involves surface and volume integrals.

*/

draw_renderer:’vtk\$

draw3d(
color = yellow,
implicit((x^2+x*y+z)=0,x,-2,2,y,-2,2,z,0,4 ),

enhanced3d = true,
palette = [[red, 0.71], [orange, 0.71], [cyan, 0.71],
[navy, 0.7], [brown, 0.6], [black, 0.2]],

implicit(4 – x^2 – y^2-z=0,x,-2,2,y,-2,2,z,0,4) ,
parametric_surface(r*cos(t),r*sin(t)
,0, r,0,2,t,0,2*%pi)

) \$

Like

1. ejbarth says:

I think the visualization needs a vector field for F(x,y,z) =

Using the vectorfield package I describe here:
https://themaximalist.org/2016/05/19/computing-and-visualizing-path-integrals-of-vector-fields/

we can visualize the vectors specified by F in my modified version of your draw3d command:

(%i23) v:make_vector_field3d([x^2,x*y,z],[x,-2,2],[y,-2,2],[z,0,4])\$
(%i24) draw3d(
color = black,
v,
color=red,
implicit(4 – x^2 – y^2-z=0,x,-2,2,y,-2,2,z,0,4) ,
color=blue,
parametric_surface(r*cos(t),r*sin(t)
,0, r,0,2,t,0,2*%pi)
) \$

Like

2. Edward Montague says:

After browsing the web I found a few definitions for the terms used in Gauss’s law for electrostatics , these are based
around the Wikipedia representation.

V [ volt ]
∇V = i*diff(V,x) + j*diff(V,y) + k*diff(V,z)
E = –∇V
D = εE
–∇ · (ε∇V) = ρ
–∇ · D = ρ

integrate(D.da,surface) = integrate(–∇ · D ,dv,volume) ?

This is my initial attempt of visualizing the vector field , I’m using the Maxima vtk package ; approach is valid when
we don’t use the vtk render er .

draw_renderer:’vtk\$

/* Define vector field */
coord: setify(makelist(k,k,1,5))\$
points3d: listify(cartesian_product(coord,coord,coord))\$
vf3d(x,y,z):= vector([x-3.5,y-3.5,z-1.25],[x^2,x*y,z])\$

/*list of vector objects*/
vect3: makelist(vf3d(k,k,k),k,points3d)\$

draw3d(
line_width = 0.01,
color = black,
unit_vectors = true],
vect3,
color=red,

implicit(4 – x^2 – y^2-z=0,x,-2,2,y,-2,2,z,0,4) ,
color=blue,
parametric_surface(r*cos(t),r*sin(t),0, r,0,2,t,0,2*%pi)

)\$

Like

3. ejbarth says:

yes! that looks good.

Like

1. ejbarth says:

…and yet, as I compare the appearance of the vector field in our two visualization methods, I think that near the yz plane (x=0) the vectors specified by
F= should be nearly vertical. In your method, I don’t see any vertical vectors

Like

4. Edward Montague says:

I noticed some discrepancies too ; I’ve written to the author of maxima-vtk about this and I’m presently
awaiting a reply . We all may need to exchange a few emails to clarify this .

I’ve read that the Cavendish experiment used a single voltage measurement to determine the total charge upon an
object . More recent measurements involve a scanning probe to determine the surface distribution of the voltage ;
especially when the object is a high voltage insulator .
Personally I prefer low voltage investigations .

Like

1. Edward Montague says:

I believe this merging of code might be effective.

Draw using vtk provides quite a few options for the style of the arrow .

/*

Paraboloid object and 3d vectors .

*/

kill(all)\$
draw_renderer:’vtk\$

v:make_vector_field3d([x^2,x*y,z],[x,-2,2],[y,-2,2],[z,0,4])\$

draw3d(
line_width = 0.02,
color = black,
unit_vectors = false],
v,
color=red,

implicit(4 – x^2 – y^2-z=0,x,-2,2,y,-2,2,z,0,4) ,
color=blue,
parametric_surface(r*cos(t),r*sin(t),0, r,0,2,t,0,2*%pi)

)\$

Like

5. Edward Montague says:

As every odd index to v provides information about the shape of the arrow
head and the vtk renderer doesn’t appear to use this , I generate a new list of
vectors from all of the even values of v .

The ability to define the arrow head shape for individual vectors might have some
utility , presently I’m not certain what that might be .

kill(all)\$
draw_renderer:’vtk\$

v:make_vector_field3d([x^2,x*y,z],[x,-2,2],[y,-2,2],[z,0,4])\$

lsv:length(v);
vs:makelist(0,i,lsv/2)\$
k:1\$
for i:2 thru lsv step 2 do(
vs[k]:v[i],
k:k+1
)\$

draw3d(
line_width = 0.01,
color = black,
unit_vectors = false],
vs,
color=red,

implicit(4 – x^2 – y^2-z=0,x,-2,2,y,-2,2,z,0,4) ,
color=blue,
parametric_surface(r*cos(t),r*sin(t),0, r,0,2,t,0,2*%pi)

)\$

Like

6. Edward Montague says:

This is a 3d plot of voltage , electric field and charge .

The charge distribution doesn’t appear to be correct , I’d imagine a gradient , from the origin , increasing as we
move towards the edges .

/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
/* [ Created with wxMaxima version 18.02.0 ] */
/* [wxMaxima: comment start ]

Copyright (c) 2018 , Edward Montague , quintin9g@gmail.com

Maxwell’s first Equation .
Voltage scalar function .
Electric vector function .
Charge scalar function .

[wxMaxima: comment end ] */

/* [wxMaxima: input start ] */
kill(all)\$

draw_renderer : ‘vtk\$
ratprint : false\$
/* [wxMaxima: input end ] */

/* [wxMaxima: comment start ]
Scalar –> Vector .
Vector –> Scalar .
[wxMaxima: comment end ] */

/* [wxMaxima: input start ] */
eq:cos(x)+y^2+sin(z)-1\$
eq1:express(eq1)\$
eq1:ev(eq1,nouns);
eq2:-div(eq1)\$
eq2:express(eq2)\$
eq2:ev(eq2,nouns);

/* [wxMaxima: input end ] */

/* [wxMaxima: comment start ]
vf3d(x,y,z):= vector([x,y,z],eq1)\$

vf3d(x,y,z):= vector([x,y,z],[-sin(x),2*y,cos(z)])\$
[wxMaxima: comment end ] */

/* [wxMaxima: input start ] */
/* Define vector field */
coord: setify(makelist(k,k,-1.2,1.5))\$
points3d: listify(cartesian_product(coord,coord,coord))\$
kill(x,y,z)\$
vf3d(x,y,z):= vector([x,y,z],[-sin(x),2*y,cos(z)])\$

/*list of vector objects*/
vect3: makelist(vf3d(k,k,k),k,points3d)\$

/* [wxMaxima: input end ] */

/* [wxMaxima: comment start ]
enhanced3d = [sin(2*y), x, y, z],
palette = [25,-23,-17],
enhanced3d = [(cos(x)+sin(z)-2+0.1),x,y,z],
enhanced3d = true,
[wxMaxima: comment end ] */

/* [wxMaxima: input start ] */
draw3d(
background_color=”light_gray”,
enhanced3d = true,
palette = color,

implicit((cos(x)+sin(z)-2)=-0.1,x,-1.2,1.2,y,-1.2,1.2,z,-1.2,1.5),

implicit(cos(x)+y^2+sin(z)=1,x,-1.2,1.2,y,-1.2,1.2,z,-1.2,1.5) ,
line_width = 0.01,
color = cyan,
unit_vectors = true],

vect3

) \$

/* [wxMaxima: input end ] */

/* [wxMaxima: comment start ]

[wxMaxima: comment end ] */

/* Old versions of Maxima abort on loading files that end in a comment. */
“Created with wxMaxima 18.02.0″\$

Like