This section details the solution of two basic problems in vector
math/calculus using the `sympy.vector` package.

*OABC is any quadrilateral in 3D space. P is the
midpoint of OA, Q is the midpoint of AB, R is the midpoint of BC
and S is the midpoint of OC. Prove that PQ is parallel to SR*

The solution to this problem demonstrates the usage of `Point`,
and basic operations on `Vector`.

Define a coordinate system

```
>>> from sympy.vector import CoordSysCartesian
>>> Sys = CoordSysCartesian('Sys')
```

Define point O to be Sys’ origin. We can do this without loss of generality

```
>>> O = Sys.origin
```

Define point A with respect to O

```
>>> from sympy import symbols
>>> a1, a2, a3 = symbols('a1 a2 a3')
>>> A = O.locate_new('A', a1*Sys.i + a2*Sys.j + a3*Sys.k)
```

Similarly define points B and C

```
>>> b1, b2, b3 = symbols('b1 b2 b3')
>>> B = O.locate_new('B', b1*Sys.i + b2*Sys.j + b3*Sys.k)
>>> c1, c2, c3 = symbols('c1 c2 c3')
>>> C = O.locate_new('C', c1*Sys.i + c2*Sys.j + c3*Sys.k)
```

P is the midpoint of OA. Lets locate it with respect to O (you could also define it with respect to A).

```
>>> P = O.locate_new('P', A.position_wrt(O) + (O.position_wrt(A) / 2))
```

Similarly define points Q, R and S as per the problem definitions.

```
>>> Q = A.locate_new('Q', B.position_wrt(A) / 2)
>>> R = B.locate_new('R', C.position_wrt(B) / 2)
>>> S = O.locate_new('R', C.position_wrt(O) / 2)
```

Now compute the vectors in the directions specified by PQ and SR.

```
>>> PQ = Q.position_wrt(P)
>>> SR = R.position_wrt(S)
```

Compute cross product

```
>>> PQ.cross(SR)
0
```

Since the cross product is a zero vector, the two vectors have to be parallel, thus proving that PQ || SR.

[WikiDel] | http://en.wikipedia.org/wiki/Del |

Prove the third rule - \(\nabla \cdot (f \vec v) = f (\nabla \cdot \vec v) + \vec v \cdot (\nabla f)\)

Start with a coordinate system

```
>>> from sympy.vector import CoordSysCartesian
>>> C = CoordSysCartesian('C')
```

The scalar field \(f\) and the measure numbers of the vector field \(\vec v\) are all functions of the coordinate variables of the coordinate system in general. Hence, define SymPy functions that way.

```
>>> from sympy import symbols
>>> v1, v2, v3, f = symbols('v1 v2 v3 f', type="Function")
```

`v1`, `v2` and `v3` are the \(X\), \(Y\) and \(Z\)
components of the vector field respectively.

Define the vector field as `vfield` and the scalar field as `sfield`.

```
>>> vfield = v1(C.x, C.y, C.z)*C.i + v2(C.x, C.y, C.z)*C.j + v3(C.x, C.y, C.z)*C.k
>>> ffield = f(C.x, C.y, C.z)
```

Construct the expression for the LHS of the equation using `C.delop`.

```
>>> lhs = (C.delop.dot(ffield * vfield)).doit()
```

Similarly, the RHS would be defined.

```
>>> rhs = ((vfield.dot(C.delop(ffield))) + (ffield * (C.delop.dot(vfield)))).doit()
```

Now, to prove the product rule, we would just need to equate the expanded and simplified versions of the lhs and the rhs, so that the SymPy expressions match.

```
>>> lhs.expand().simplify() == rhs.expand().doit().simplify()
True
```

Thus, the general form of the third product rule mentioned above can be proven
using `sympy.vector`.