Class representing both cartesian and spherical coordinates
As far as I understand the code, a PositionVector object holds both cartesian and polar coordinates. This is surely redundant: multiple representations of the same position hold no more information than a single one (note that there are many more coordinate systems, and you cannot possibly account for all of them). I recommend to keep the position in a preferred coordinate system, and provide methods to convert it to and from other representations.

Edit: addressing concerns in the comment:


  What about if I want to set a new radius, r? What would be the most
  appropriate way to update [x, y, z]?


This is a very important question I didn't elaborate on in the answer. In the algebraic world we want to reason in terms of objects, as opposed to coordinates. Coordinates are secondary - they are just instrumental for calculations.

In other words, you do not want to set new radius. You want to apply a transformation (translate, rotate, scale, etc).


  I wrote the class with the
  ability to apply vector algebra in mind, if I follow your suggestion,
  would vector algebra be straight forward, regardless of which
  ordinates I am working with?


I seriously hope so.