MathGroup Archive 1998

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Error in CrossProduct at spherical coordinates  (Version 2.2)

> Mathematica did not calculate right by vector operations. If you
> calculate a vector cross product in spherical coordinates of two
> different vector fields then must be the result not zero.
> <<Calculus`VectorAnalysis`
> (* Vector field in spherical coordinates *)
> Er  = 0 ;
> Eth = 0 ;
> Eph = 1;
> Esph = {Er,Eth,Eph};            (* E-Field in spherical *)
> Hr  = 0 ;
> Hth = 1 ;
> Hph = 0 ;
> Hsph = {Hr,Hth,Hph};            (* H-Field in spherical *)
> (* Cross product in spherical coordinates *)
> SetCoordinates[Spherical[r,th,ph]];
> EcrossH = Simplify[CrossProduct[Esph,Hsph]] {0, 0, 0}       (**** WRONG
> RESULT   MUST BE { -1 , 0 , 0 } ****)

Since Er and Hr are both zero, these vectors both have a length of zero.
The cross product of two zero vectors is zero, so the Mathematica
result is correct.

Computing a cross product in spherical coordinates like this is very
rarely done in practice.  I have seen this done as an academic
exercise, but in practical examples "cross product in spherical
coordinates" normally means that the host space is coordinatized using
spherical coordinates, but the field vectors are still described using
cartesian coordinates, using locally cartesian coordinate systems that
are aligned in a convenient way with the coordinatization of the host

That is precisely what is done in your subsequent example:

> r = Sqrt[ x^2 + y^2 + z^2];
> sinph = y/Sqrt[x^2 + y^2];
> cosph = x/Sqrt[x^2 + y^2];
> sinth = Sqrt[(x^2+y^2)/(x^2+y^2+z^2)]; costh = Sqrt[ z^2/(x^2+y^2+z^2)];
> (* E-Field in Cartesian *)
> Ecat =Simplify[{
> Esph[[1]] cosph sinth - Esph[[3]] sinph + Esph[[2]] cosph costh,
> Esph[[1]] sinph sinth + Esph[[3]] cosph + Esph[[2]] sinph costh,
> Esph[[1]]       costh                   - Esph[[2]]       sinth }];
> (* H-Field in Cartesian *)
> Hcat =Simplify[{
> Hsph[[1]] cosph sinth - Hsph[[3]] sinph + Hsph[[2]] cosph costh,
> Hsph[[1]] sinph sinth + Hsph[[3]] cosph + Hsph[[2]] sinph costh,
> Hsph[[1]]       costh                   - Hsph[[2]]       sinth }];

The transformation above, from Esph and Hsph to Ecat and Hcat, is a
rotation from the locally cartesian space that would typically be used
to describe these vectors in a spherical host space to the locally
cartesian coordinate space that would typically be used to describe
these vectors in a cartesian host space.

The remaining operations in your example:

> SetCoordinates[Cartesian[x,y,z]];
> ExH = Simplify[CrossProduct[Ecat,Hcat]]

followed by a change of coordinates to spherical coordinates

> x = r Cos[ph] Sin[th];
> y = r Sin[ph] Sin[th];
> z = r         Cos[th];

followed by the inverse of the original rotation

> Esph =Simplify[{
> ExH[[1]] Cos[ph] Sin[th]+ExH[[2]] Sin[ph] Sin[th]+ExH[[3]] Cos[th],
> ExH[[1]] Cos[ph] Cos[th]+ExH[[2]] Sin[ph] Cos[th]-ExH[[3]] Sin[th],
> -ExH[[1]] Sin[ph] + ExH[[2]] Cos[ph] }]

is a long way of doing what could have been done by computing the
cartesian cross product of the original vectors Esph and Hsph, which
you are apparently understanding as cartesian vectors in a locally
cartesian space of a spherically coordinatized host space.

The ability to compute cross products of spherically coordinatized
vectors is included in the Calculus`VectorAnalysis` package primarily
for completeness.  As mentioned earlier, I don't think this is ever
done in practice.  If it is done, however, Mathematica will give the
correct result.

Dave Withoff
Wolfram Research

  • Prev by Date: How to create a color contour plot with color table?
  • Next by Date: Re: Removing Outer Braces
  • Previous by thread: Error in CrossProduct at spherical coordinates  (Version 2.2)
  • Next by thread: Removing Outer Braces