Another service from Omega

Properties of the Cross Product


*****
    |\^/|     Maple V Release 3 (SUNY at Albany)
._|\|   |/|_. Copyright (c) 1981-1994 by Waterloo Maple Software and the
 \  MAPLE  /  University of Waterloo. All rights reserved. Maple and Maple V
 <____ ____>  are registered trademarks of Waterloo Maple Software.
      |       Type ? for help.


> with(linalg):
Warning: new definition for   norm
Warning: new definition for   trace



Let us show some of the properties of cross products with maple. First define 3 arbitrary vectors.


> a := vector(3); b := vector(3); c := vector(3);


                             a := array(1 .. 3, [])

                             b := array(1 .. 3, [])

                             c := array(1 .. 3, [])




Since we are going to compute several crossprod(s) it makes sense to save typing by renaming the command crossprod to just "cp".


> alias(cp=crossprod);


                                     I, cp




Notice that maple shows all the aliases that are known at this point. So far only two: our "cp" and the imaginary unit "I".


> axb := cp(a,b);


 axb := [ a[2] b[3] - a[3] b[2], a[3] b[1] - a[1] b[3], a[1] b[2] - a[2] b[1] ]



> bxa := cp(b,a);

 bxa := [ a[3] b[2] - a[2] b[3], a[1] b[3] - a[3] b[1], a[2] b[1] - a[1] b[2] ]



> evalm(axb + bxa);

                                  [ 0, 0, 0 ]




and therefore we have shown that axb = -bxa i.e. the cross product is anti-commutative. Let us now show that it has the distributivity property with respect to the addition of vectors. We need to show that
a x (b + c) = axb + axc.


> ax_bplusc := cp(a,b+c);


            ax_bplusc := [ a[2] (b[3] + c[3]) - a[3] (b[2] + c[2]),

                a[3] (b[1] + c[1]) - a[1] (b[3] + c[3]),

                a[1] (b[2] + c[2]) - a[2] (b[1] + c[1]) ]




This is the left-hand-side: ax(b+c). Let us now compute the right-hand-side i.e. axb + axc.


> RHS := evalm(axb + cp(a,c));


            RHS := [ a[2] b[3] - a[3] b[2] + a[2] c[3] - a[3] c[2],

                a[3] b[1] - a[1] b[3] + a[3] c[1] - a[1] c[3],

                a[1] b[2] - a[2] b[1] + a[1] c[2] - a[2] c[1] ]




> evalm(RHS - ax_bplusc);

    [ a[2] b[3] - a[3] b[2] + a[2] c[3] - a[3] c[2] - a[2] (b[3] + c[3])

           + a[3] (b[2] + c[2]),

        a[3] b[1] - a[1] b[3] + a[3] c[1] - a[1] c[3] - a[3] (b[1] + c[1])

             + a[1] (b[3] + c[3]),

        a[1] b[2] - a[2] b[1] + a[1] c[2] - a[2] c[1] - a[1] (b[2] + c[2])

             + a[2] (b[1] + c[1])                                          ]




and each of the 3 entries of this vector can be simplified with,


> map(simplify,");


                                  [ 0, 0, 0 ]



Q.E.D.

Notice that it is also easy to prove that axb is orthogonal to both, a and b.


> innerprod(axb,a); innerprod(axb,b);


                                       0

                                       0



and also: |axb|^2 = (|a| |b| sin(theta))^2.


> laxb2 := innerprod(axb,axb);


                 2     2                               2     2       2     2
    laxb2 := a[2]  b[3]  - 2 a[2] b[3] a[3] b[2] + a[3]  b[2]  + a[3]  b[1]

                                       2     2       2     2
         - 2 a[3] b[1] a[1] b[3] + a[1]  b[3]  + a[1]  b[2]

                                       2     2
         - 2 a[1] b[2] a[2] b[1] + a[2]  b[1]



> The_other_side := innerprod(a,a)*innerprod(b,b)*sin(angle(a,b))^2;

                              2       2       2       2       2       2
       The_other_side := (a[1]  + a[2]  + a[3] ) (b[1]  + b[2]  + b[3] )

           /                                             2     \
           |          (a[1] b[1] + a[2] b[2] + a[3] b[3])      |
           |1 - -----------------------------------------------|
           |         2       2       2       2       2       2 |
           \    (a[1]  + a[2]  + a[3] ) (b[1]  + b[2]  + b[3] )/




Don't worry since....


> simplify(laxb2 - The_other_side);


                                       0



Or another way to check is with the "is" command


> is( laxb2 = The_other_side);


                                      true



Thanks maple!

The above is then a complete proof that the cross product of two vectors is anti-commutative, distributive, orthogonal to both vectors and moreover the cross product has magnitude equal to the area of the twisted rectangle generated by the two vectors. Only one thing is missing and that is the Right-hand-rule. This last rule however can not be deduced since it depends on what we mean by a positive angle or positive area or positive volume or in other words depends on the orientation of the space which is arbitrary. For this reason the cross product between two vectors "a" and "b" in 3D, defined geometrically as the only vector perpendicular to both "a" and "b" with magnitude equal to the area generated by "a" and "b" and oriented with the right-hand-rule IS NOT TOTALLY INDEPENDENT OF THE COORDINATE SYSTEM CHOSEN, it depends on wether we use a right-hand coord. system or a left-hand coord. system. This has been the source of many confusions over the years. Some books in physics even propose to qualify vectors as completly independent of the coords. (polar) or depending only on the orientation (axial) which makes NO SENSE WHAT SO EVER since all the misteries clear up when one sees the cross product as what it is: THE DUAL OF A BIVECTOR. The cross product is only an accident of 3D space and it is not a fundamental geometric concept. The really important product is the so called "wedge" product that is introduced in the above link and that we'll cover in more detail at the end of Calc III when we generalize the fundamental theorem of Calculus.


Link to the commands in this file
Carlos Rodriguez <carlos@math.albany.edu>
Last modified: Thu Sep 12 17:24:06 EDT 1996