home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e032 / 3.ddi / FILES / LINEARAL.PAK / CROSSPRO.M < prev    next >
Encoding:
Text File  |  1992-07-29  |  2.2 KB  |  110 lines

  1.  
  2. (* Copyright 1988,1990 Wolfram Research Inc. *)
  3.  
  4. (*:Version: Mathematica 2.0 *)
  5.  
  6. (*:Name: LinearAlgebra`VectorAlgebra` *)
  7.  
  8. (*:Title: Symbolic Properties of Vector Dot and Cross Products *)
  9.  
  10. (*:Author:
  11.     Wolfram Research Inc. 
  12. *)
  13.  
  14. (*:Keywords:
  15.     vector, cross product, dot product, triple scalar product
  16. *)
  17.  
  18. (*:Requirements: none. *)
  19.  
  20. (*:Warnings: none. *)
  21.  
  22. (*:Sources:
  23.     Introduction to Vector Analysis, by Harry Davis and Arthur D. 
  24.     Snider, Allyn and Bacon, 1979
  25. *)
  26.  
  27. (*:Summary:
  28. Vector identities for dot product, cross product, and triple scalar product.
  29. *)
  30.  
  31.  
  32. BeginPackage["LinearAlgebra`CrossProduct`"]
  33.         
  34.         (**  Vector Cross Products  **)
  35.         
  36. Cross::usage = 
  37.     "Cross[vec1, vec2] gives the vector product of the 3-vectors
  38.     vec1 and vec2."
  39.  
  40. Begin["LinearAlgebra`CrossProduct`private`"]
  41.  
  42. Cross[v1_?VectorQ, v2_?VectorQ] :=
  43.     Module[{m=Minors[{v1,v2},2][[1]]},
  44.         {m[[3]], -m[[2]], m[[1]]}
  45.     ]    /; Length[v1]==Length[v2]==3
  46.  
  47. (* Properties of cross products. *)
  48.  
  49. Cross/: Cross[a_,b_]^2 := a.a b.b - (a.b)^2
  50.  
  51. Cross[a_,a_] = 0
  52.  
  53. Cross[a_ + b_, c_] := Cross[a,c] + Cross[b,c]
  54. Cross[a_, b_ + c_] := Cross[a,b] + Cross[a,c]
  55.  
  56. Cross[a_,0] = 0
  57. Cross[0,a_] = 0
  58.  
  59. Cross[(n_?NumberQ) a_, b_] := n Cross[a, b]
  60.  
  61. Cross[a_, (n_?NumberQ) b_] := n Cross[a, b]
  62.  
  63. Cross[a_,Cross[b_,c_]] := (a.c) b - (a.b) c
  64. Cross[Cross[a_,b_],c_] := (a.c) b - (b.c) a
  65.  
  66. Unprotect[Dot]
  67.  
  68. (* Properties of dot products. *)
  69.  
  70. a_ . ((n_?NumberQ) b_) := n (a.b)
  71. ((n_?NumberQ) a_) . b_ := n (a.b)
  72.  
  73. a_ . (b_ + c_) := a.b + a.c
  74. (a_ + b_) . c_ := a.c + b.c
  75.  
  76. a_ . 0 = 0
  77. 0 . a_ = 0
  78.  
  79. a_ . Cross[a_,b_] = 0
  80. a_ . Cross[b_,a_] = 0
  81.  
  82. Cross[a_,b_] . a_ = 0
  83. Cross[b_,a_] . b_ = 0
  84.  
  85. Cross[a_,b_] . c_ := a . Cross[b,c]
  86.  
  87. a_ . Cross[b_,c_] := b . Cross[c,a] /; !OrderedQ[{a,b}]
  88. a_ . Cross[b_,c_] := c . Cross[a,b] /; !OrderedQ[{a,c}]
  89.  
  90. (* This rule must be given after other rules involving Cross
  91. are defined. *)
  92.  
  93. Cross[a_,b_] := -Cross[b,a] /; !OrderedQ[{a,b}] 
  94.  
  95. End[]  (* LinearAlgebra`CrossProduct`Private` *)
  96.  
  97. Protect[Cross,Dot]
  98.  
  99. EndPackage[ ]  (* LinearAlgebra`CrossProduct` *)
  100.  
  101. (*:Limitations: none known. *)
  102.  
  103.  
  104. (*:Examples:
  105. Cross[ { a, b, c }, { d, e, f } ]
  106.  
  107. Cross[ { a, b, c }, Cross[ { d, e, f }, { g, h, i } ] ]
  108.  
  109. *)
  110.