I receive emailed math and physics questions fairly frequently, often about my “Geometric Algebra for Electrical Engineers” book. Email is a very unsatisfactory way to correspond for mathematics centric material, as you cannot format content easily using LaTeX.

To ease that pain, I have created a discord server, “Peeter Joot’s math and physics play” that I hope to use instead of email going forward. I have the TexIt bot installed on my discord server, so with relatively little effort anybody that uses that server for Q&A will be able to supply questions that are formatted nicely in LaTeX. And if nothing else, my side of any such discussions can be formatted nicely in a readable fashion.

I know that the primary user base for discord are video gamers, but I don’t have an issue with rebranding discord as “the math chat app” for my own purposes. I’m not the originator of this idea — I am flagrantly stealing the idea from Enki’s bivector discord, a great community, but more general than I expect mine to be. I don’t think we can loose with lots of math chat apps available.

]]>

There’s a class of simple statics problems that are pervasive in high school physics and first year engineering classes (for me that CIV102.) These problems are illustrated in the figures below. Here we have a static load under gravity, and two supporting members (rigid beams or wire lines), which can be under compression, or tension, depending on the geometry.

The problem, given the geometry, is to find the magnitudes of the forces in the two members. The equation to solve is of the form

\begin{equation}\label{eqn:twoForceStaticsProblem:20}

\BF_s + \BF_r + m \Bg = 0.

\end{equation}

The usual way to solve such a problem is to resolve the forces into components. We will do that first here as a review, but then also solve the system using GA techniques, which are arguably simpler or more direct.

If we were back in high school we could have written our forces out in vector form

\begin{equation}\label{eqn:twoForceStaticsProblem:160}

\begin{aligned}

\BF_r &= f_r \lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } \\

\BF_s &= f_s \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta } \\

\Bg &= g \Be_1.

\end{aligned}

\end{equation}

Here the gravitational direction has been pointed along the x-axis.

Our equation to solve is now

\begin{equation}\label{eqn:twoForceStaticsProblem:180}

f_r \lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } + f_s \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta } + m g \Be_1 = 0.

\end{equation}

This we can solve as a set of scalar equations, one for each of the \( \Be_1 \) and \( \Be_2 \) directions

\begin{equation}\label{eqn:twoForceStaticsProblem:200}

\begin{aligned}

f_r \cos\alpha + f_s \cos\beta + m g &= 0 \\

f_r \sin\alpha + f_s \sin\beta &= 0.

\end{aligned}

\end{equation}

Our solution is

\begin{equation}\label{eqn:twoForceStaticsProblem:220}

\begin{aligned}

\begin{bmatrix}

f_r \\

f_s

\end{bmatrix}

&=

{\begin{bmatrix}

\cos\alpha & \cos\beta \\

\sin\alpha & \sin\beta

\end{bmatrix}}^{-1}

\begin{bmatrix}

– m g \\

0

\end{bmatrix} \\

&=

\inv{

\cos\alpha \sin\beta – \cos\beta \sin\alpha

}

\begin{bmatrix}

\sin\beta & -\cos\beta \\

-\sin\alpha & \cos\alpha

\end{bmatrix}

\begin{bmatrix}

– m g \\

0

\end{bmatrix} \\

&=

\frac{ m g }{ \cos\alpha \sin\beta – \cos\beta \sin\alpha }

\begin{bmatrix}

-\sin\beta \\

\sin\alpha

\end{bmatrix} \\

&=

\frac{ m g }{ \sin\lr{ \beta – \alpha } }

\begin{bmatrix}

-\sin\beta \\

\sin\alpha

\end{bmatrix}.

\end{aligned}

\end{equation}

We have to haul out some trig identities to make a final simplification, but find a solution to the system.

Another approach, is to take cross products with the unit force direction. First note that

\begin{equation}\label{eqn:twoForceStaticsProblem:240}

\begin{aligned}

\lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } \cross \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta }

&=

\Be_3 \lr{

\cos\alpha \sin\beta – \sin\alpha \cos\beta

} \\

&=

\Be_3 \sin\lr{ \beta – \alpha }.

\end{aligned}

\end{equation}

If we take cross products with each of the unit vectors, we find

\begin{equation}\label{eqn:twoForceStaticsProblem:260}

\begin{aligned}

f_r \lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } \cross \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta } + m g \Be_1 \cross \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta } &= 0 \\

f_s \lr{ \Be_1 \cos\beta + \Be_2 \sin\beta } \cross \lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } + m g \Be_1 \cross \lr{ \Be_1 \cos\alpha + \Be_2 \sin\alpha } &= 0,

\end{aligned}

\end{equation}

or

\begin{equation}\label{eqn:twoForceStaticsProblem:280}

\begin{aligned}

\Be_3 f_r \sin\lr{ \beta – \alpha } + m g \Be_3 \sin\beta &= 0 \\

-\Be_3 f_s \sin\lr{ \beta – \alpha } + m g \Be_3 \sin\alpha &= 0.

\end{aligned}

\end{equation}

After cancelling the \( \Be_3 \)’s, we find the same result as we did solving the scalar system. This was a fairly direct way to solve the system, but the intermediate cross products were a bit messy. We will try this cross product using the wedge product. Switching from the cross to the wedge, by itself, will not make things any simpler or more complicated, but we can use the complex exponential form of the unit vectors for the forces, and that will make things simpler.

As usual for planar problems, let’s write \( i = \Be_1 \Be_2 \) for the plane pseudoscalar, which allows us to write the forces in polar form

\begin{equation}\label{eqn:twoForceStaticsProblem:40}

\begin{aligned}

\BF_r &= f_r \Be_1 e^{i\alpha} \\

\BF_s &= f_s \Be_1 e^{i\beta} \\

\Bg &= g \Be_1,

\end{aligned}

\end{equation}

Our equation to solve is now

\begin{equation}\label{eqn:twoForceStaticsProblem:60}

f_r \Be_1 e^{i\alpha} + f_s \Be_1 e^{i\beta} + m g \Be_1 = 0.

\end{equation}

The solution for either \( f_r \) or \( f_s \) is now trivial, as we only have to take wedge products with the force direction vectors to solve for the magnitudes. That is

\begin{equation}\label{eqn:twoForceStaticsProblem:80}

\begin{aligned}

f_r \lr{ \Be_1 e^{i\alpha} +} \wedge \lr{ \Be_1 e^{i\beta} } + m g \Be_1 \wedge \lr{ \Be_1 e^{i\beta} } &= 0 \\

f_s \lr{ \Be_1 e^{i\beta} +} \wedge \lr{ \Be_1 e^{i\alpha} } + m g \Be_1 \wedge \lr{ \Be_1 e^{i\alpha} } &= 0.

\end{aligned}

\end{equation}

Writing the wedges as grade two selections, and noting that \( e^{i\theta} \Be_1 = \Be_1 e^{-i\theta } \), we have

\begin{equation}\label{eqn:twoForceStaticsProblem:100}

\begin{aligned}

f_r &= – m g \frac{ \gpgradetwo{\Be_1^2 e^{i\beta}} }{ \gpgradetwo{ \Be_1^2 e^{-i\alpha} e^{i\beta} } } = – m g \frac{ \sin\beta }{ \sin\lr{ \beta – \alpha } } \\

f_s &= – m g \frac{ \gpgradetwo{\Be_1^2 e^{i\alpha}} }{ \gpgradetwo{ \Be_1^2 e^{-i\beta} e^{i\alpha} } } = m g \frac{ \sin\alpha }{ \sin\lr{ \beta – \alpha } }.

\end{aligned}

\end{equation}

The grade selection a unit pseudoscalar factor in both the denominator and numerator, which cancelled out to give the final scalar result.

Observe that we could have reframed the problem as a multivector problem by left multiplying \ref{eqn:twoForceStaticsProblem:60} by \( \Be_1 \) to find

\begin{equation}\label{eqn:twoForceStaticsProblem:120}

f_r e^{i\alpha} + f_s e^{i\beta} + m g = 0.

\end{equation}

Alternatively, we could have written the equations this way directly as a complex variable problem.

We can now solve for \( f_r \) or \( f_s \) by multiplying by the conjugate of one of the complex exponentials. That is

\begin{equation}\label{eqn:twoForceStaticsProblem:140}

\begin{aligned}

f_r + f_s e^{i\beta} e^{-i\alpha} + m g e^{-i\alpha} &= 0 \\

f_r e^{i\alpha} e^{-i\beta} + f_s + m g e^{-i\beta} &= 0.

\end{aligned}

\end{equation}

Selecting the bivector part of these equations (if interpreted as a multivector equation), or selecting the imaginary (if interpreting as a complex variables equation), will eliminate one of the force magnitudes from each equation, after which we find the same result.

This last approach, treating the problem as either a complex number problem (selecting imaginaries), or multivector problem (selecting bivectors), seems the simplest. We have no messing cross products, nor do we have to haul out the trig identities (the sine difference in the denominator comes practically for free, as it did with the wedge product method.)

]]>A new version, V0.1.16-19, of the book has now been posted on Amazon and all the other usual places.

This version has solutions for most of the chapter I problems, increasing the size of the book by about 13 pages.

I plan to work through the chapter II and III problems too, and add those in a later version. If that increases the size of the book too much (i.e.: forcing a price increase), I may opt to omit the problem solutions from the print versions, leaving solutions in the free PDF version, and in the Leanpub (pay what you want) edition.

]]>Maverick posed the following question on the bivector discord

“I saw your blog post on curvilinear coordinates in geometric calculus. I saw your derivation of the volume of a sphere using this technique and decided for practice by doing a surface integral to calculate the area of sphere using the quantity $\partial{\theta} \wedge \partial{\phi}~ dA$ is there a way to integrate this without simply taking the magnitude of this quantity and then integrating or are we limited to only integrating quantities that are 1 dimensional like scalars and pseudoscalars”.

My initial response was that, sure, we should be able to compute bivector and trivector valued integrals. However, in retrospect, the reality is a bit more subtle.

We aren’t limited to using the magnitudes of the differential forms, but not all multivector integral are interesting.

In the original blog post, I must have computed the area of the circle using a bivector valued area element, or the volume of a sphere using a trivector valued volume element. However, if I did the volume that way, I probably cheated and computed 8 times the value of the first octant volume (which is positive), vs. the entire integral, which is zero. [EDIT: the original post, now linked above, has been corrected.]

Let’s compute the circular area and circumference, and the spherical volume and surface area using multivector valued integrals, and see where we end up having to resort to scalar integrals.

The polar parameterization of points in circular region is

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:20}

\Bx = r \Be_1 e^{i\theta},

\end{equation}

where \( i = \Be_1 \Be_2 \).

Our differentials are

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:40}

\begin{aligned}

d\Bx_r &= \Be_1 e^{i\theta} \,dr \\

d\Bx_\theta &= r \Be_2 e^{i\theta} \,d\theta.

\end{aligned}

\end{equation}

Our “volume” element, is a 2D pseudoscalar

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:60}

\begin{aligned}

dA &= d\Bx_r \wedge d\Bx_\theta \\

&= r \gpgradetwo{ \Be_1 e^{i\theta} \Be_2 e^{i\theta} } \, dr d\theta \\

&= r \gpgradetwo{ \Be_1 \Be_2 e^{-i\theta} e^{i\theta} } \, dr d\theta \\

&= r i \, dr d\theta.

\end{aligned}

\end{equation}

This, as I probably pointed out in my previous blog post, can be integrated to find the area of the circle

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:80}

\begin{aligned}

A &= \int_{r = 0}^R \int_{\theta = 0}^{2\pi} r i \, dr d\theta \\

&= \frac{R^2}{2} 2 \pi i \\

&= \pi R^2 i.

\end{aligned}

\end{equation}

However, we got lucky, as the two-form area element was strictly positive (i.e.: the Jacobean for a polar change of coordinates is strictly positive.)

However, we can’t find the circumference of a circle my integrating \( d\Bx_\theta \) around that circular path, because \( d\Bx_\theta \) has an orientation, and we will get zero (given the symmetry of the problem) if we integrate all the way around

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:100}

\begin{aligned}

\int_{\theta = 0}^{2\pi} d\Bx_\theta &= \int_{\theta = 0}^{2\pi} r \Be_2 e^{i\theta} \,d\theta \\

&= r \Be_2 \evalrange{ \frac{e^{i\theta}}{i} }{0}{2\pi} \\

&= \frac{r \Be_2}{i} \times 0.

\end{aligned}

\end{equation}

If we want the circumference of a circle, we have to sum all the contributions of \( d\Bx_\theta \) that are colinear with \( \thetacap = \Be_2 e^{i\theta} \)

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:120}

\begin{aligned}

C &= \int_{\theta = 0}^{2\pi} \thetacap \cdot \, d\Bx_\theta \\

&= \int_{\theta = 0}^{2\pi} \thetacap \cdot \lr{ r \thetacap \, d\theta } \\

&= 2 \pi r.

\end{aligned}

\end{equation}

This is a plain old boring scalar integral, because the vector valued path integral isn’t terribly interesting.

For a spherical parameterization, our position vector is

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:140}

\Bx = r \Be_1 e^{i \phi} \sin\theta + r \Be_3 \cos\theta,

\end{equation}

so the differentials are

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:160}

\begin{aligned}

d\Bx_r &= \lr{ \Be_1 e^{i \phi} \sin\theta + \Be_3 \cos\theta } \,dr = \rcap \, dr \\

d\Bx_\theta &= \lr{ r \Be_1 e^{i \phi} \cos\theta – r \Be_3 \sin\theta }\, d\theta = r \thetacap \,d\theta \\

d\Bx_\phi &= r \Be_2 e^{i \phi} \sin\theta \, d\phi = r \sin\theta \phicap.

\end{aligned}

\end{equation}

The oriented area element on the surface of the sphere is

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:180}

\begin{aligned}

dA &= d\Bx_\theta \wedge d\Bx_\phi \\

&= r^2 \gpgradetwo{ \lr{ \Be_1 e^{i \phi} \cos\theta – \Be_3 \sin\theta } \Be_2 e^{i \phi} \sin\theta } \,d\theta d\phi \\

&= r^2 \sin\theta \lr{ i \cos\theta – \Be_{32} e^{i \phi} \sin\theta } \,d\theta d\phi .

\end{aligned}

\end{equation}

Integrating this over the surface will give us zero, with the first integrand killed by the \( \theta \) integral, and the second by the \( \phi \) integral. As pointed out in the original question, we must integrate the absolute value of this two-form in order to find the surface area of the sphere, just as we had to integrate the absolute value of \( d\Bx_\theta \) for the circle to find the circumference.

Let’s perform that integration to verify that we get the expected result. We will first simplify our bivector valued oriented area element. Observe that \( dA \wedge \rcap = dA \rcap \propto I \), so \( dA \propto \rcap I \). We should be able to simplify our expression for \( dA \) by factoring out an \( \rcap \) term

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:200}

\begin{aligned}

dA &= r^2 \sin\theta \lr{ \Be_{1233} \cos\theta – \Be_{1132} e^{i \phi} \sin\theta } \,d\theta d\phi \\

&= r^2 \sin\theta I \lr{ \Be_3 \cos\theta + \Be_1 e^{i \phi} \sin\theta } \,d\theta d\phi \\

&= r^2 \sin\theta I \rcap \,d\theta d\phi.

\end{aligned}

\end{equation}

The spherical scalar area is

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:220}

\begin{aligned}

A

&= \int_{\theta = 0}^{\pi} \int_{\phi = 0}^{2 \pi} \Abs{ r^2 \sin\theta I \rcap } \,d\theta d\phi \\

&= r^2 \int_{\theta = 0}^{\pi} \int_{\phi = 0}^{2 \pi} \Abs{ \sin\theta } \,d\theta d\phi \\

&= 2 r^2 \int_{\theta = 0}^{\pi/2} \int_{\phi = 0}^{2\pi} \sin\theta \,d\theta d\phi \\

&= 2 r^2 (2 \pi) \\

&= 4 \pi r^2.

\end{aligned}

\end{equation}

Observe that to find the volume of the sphere, we also cannot just integrate the trivector valued volume element directly either. That oriented volume element is

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:240}

\begin{aligned}

dV

&= d\Bx_r \wedge dA \\

&= \rcap\, dr dA \\

&= r^2 \sin\theta I \,dr d\theta d\phi.

\end{aligned}

\end{equation}

This integrand is positive above the azimuthal plane, and negative below, so will give us zero if we integrate over the entire \( \theta \in [0, \pi] \) region. So, if we want to find the volume of a sphere, we also must use an absolute integrand.

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:260}

\begin{aligned}

V

&= \int_{r = 0}^{R} \int_{\theta = 0}^{\pi} \int_{\phi = 0}^{2 \pi} \Abs{ r^2 \sin\theta I } \,dr d\theta d\phi \\

&= 2 \int_{r = 0}^{R} \int_{\theta = 0}^{\pi/2} \int_{\phi = 0}^{2\pi} r^2 \sin\theta \,dr d\theta d\phi \\

&= 2 \frac{R^3}{3} (2 \pi) \\

&= \frac{4}{3} \pi R^3.

\end{aligned}

\end{equation}

Had the sign of our volume element been invariant over the entire integration region, as it was for the circular area computation (but not the circular boundary computation), we could have computed this as a pseudoscalar integral. For example, if we wanted to know what the oriented volume of the first quadrant of the sphere was, we could compute that directly, as

\begin{equation}\label{eqn:circularAndSphericalAreaVolumeAndBoundaries:280}

\begin{aligned}

V_1 &= \int_{r = 0}^{R} \int_{\theta = 0}^{\pi/2} \int_{\phi = 0}^{\pi/2} r^2 \sin\theta I \,dr d\theta d\phi \\

&= \inv{6} \pi R^3 I,

\end{aligned}

\end{equation}

but if this volume integral is extended to the entire spherical region, the result is zero, not \( (4/3) \pi R^3 I \).

Only when our multivector integrand doesn’t change sign over the integration region, can we directly integrate without taking absolute values.

Again, this should not be too surprising.

This is why, in conventional scalar calculus, we generally must take the absolute value of our change of variable Jacobians, when we compute area or volume computations.

In the LinkedIn Pre-University Geometric Algebra group, James presents a problem from the MindYourDecisions youtube channel Impossible Viral Problem, as a candidate for solution using geometric algebra.

I tried this out and found a couple ways to solve it. One of those I’ll detail here. I have to admit that part of the reason that I wanted to solve this is that the figure in the beginning of the video really bugged me. The triangle that was inscribed in the circle didn’t have any of the length properties from the problem. I could do much better with a sloppy freehand sketch, but to do a good figure, you have to actually solve for the vertexes of the triangle (once you do that, the area is easy to figure out.)

Having solved the problem, the geometry of the problem is illustrated in fig. 1.

I set up the problem so that the \( A,C \) triangle vertices were symmetric with respect to the x-axis, and the \(B \) vertex located elsewhere. I can describe those algebraically as

\begin{equation}\label{eqn:inscribedTriangleProblem:20}

\begin{aligned}

\BA &= r \Be_1 e^{i\theta} \\

\BC &= r \Be_1 e^{-i\theta} \\

\BB &= r \Be_1 e^{i\phi},

\end{aligned}

\end{equation}

where the radius \( r \) and two angles \( \theta, \phi \) are to be determined, and \( i = \Be_1 \Be_1\) the pseudoscalar for the \(x-y\) plane.

The vector pointing to the midpoint of the upper triangular face is given by the average of the \( \BA, \BB \) vectors, which can be seen from

\begin{equation}\label{eqn:inscribedTriangleProblem:40}

\BA + \frac{\BB – \BA}{2} = \frac{\BA + \BB}{2},

\end{equation}

and similarly, the midpoint of the lower face is found at

\begin{equation}\label{eqn:inscribedTriangleProblem:60}

\BC + \frac{\BB – \BC}{2} = \frac{\BB + \BC}{2},

\end{equation}

The problem tells us that the respective lengths of those vectors from the origin are \( r-2, r – 3\) respectively, so

\begin{equation}\label{eqn:inscribedTriangleProblem:80}

\begin{aligned}

r – 2 &= \inv{2} \Abs{ \BA + \BB } \\

r – 3 &= \inv{2} \Abs{ \BB + \BC },

\end{aligned}

\end{equation}

or

\begin{equation}\label{eqn:inscribedTriangleProblem:100}

\begin{aligned}

(r – 2)^2 &= \frac{r^2}{4} \lr{ \Be_1 e^{i\theta} + \Be_1 e^{i\phi} }^2 \\

(r – 3)^2 &= \frac{r^2}{4} \lr{ \Be_1 e^{i\phi} + \Be_1 e^{-i\theta} }^2 \\

\end{aligned}

\end{equation}

Finally, since the midpoint of the right edge is found at \( (r-1)\Be_1 \), it is clear that

\begin{equation}\label{eqn:inscribedTriangleProblem:120}

\frac{r-1}{r} = \cos\theta,

\end{equation}

or

\begin{equation}\label{eqn:inscribedTriangleProblem:140}

r = \inv{1 – \cos\theta}.

\end{equation}

This leaves us with three equations and three unknowns. Unfortunately, these are rather non-linear equations. In the video, a direct method of solving equivalent equations was demonstrated, but I picked the lazy route, and used Mathematica’s NSolve routine, solving for \( r,\theta, \phi\) numerically. Since NSolve has intrinsic complex number support, I made the following substitutions:

\begin{equation}\label{eqn:inscribedTriangleProblem:160}

\begin{aligned}

z &= e^{i\theta} \\

w &= e^{i\phi},

\end{aligned}

\end{equation}

and then plugged those into our relations above, after expanding the squares, to find

\begin{equation}\label{eqn:inscribedTriangleProblem:180}

\begin{aligned}

\lr{ \Be_1 e^{i\theta} + \Be_1 e^{i\phi} }^2

&=

2 + \Be_1 e^{i\theta} \Be_1 e^{i\phi} + \Be_1 e^{i\phi} \Be_1 e^{i\theta} \\

&=

2 + e^{-i\theta} \Be_1^2 e^{i\phi} + e^{-i\phi} \Be_1^2 e^{i\theta} \\

&=

2 + e^{-i\theta} \Be_1^2 e^{i\phi} + e^{-i\phi} \Be_1^2 e^{i\theta} \\

&=

2 + \frac{w}{z} + \frac{z}{w},

\end{aligned}

\end{equation}

and

\begin{equation}\label{eqn:inscribedTriangleProblem:200}

\begin{aligned}

\lr{ \Be_1 e^{i\phi} + \Be_1 e^{-i\theta} }^2

&=

2 + \Be_1 e^{i\phi} \Be_1 e^{-i\theta} + \Be_1 e^{-i\theta} \Be_1 e^{i\phi} \\

&=

2 + e^{-i\phi} e^{-i\theta} + e^{ i\theta} e^{i\phi} \\

&=

2 + w z + \inv{w z}.

\end{aligned}

\end{equation}

This gives us

\begin{equation}\label{eqn:inscribedTriangleProblem:220}

\begin{aligned}

4 \lr{ \frac{r – 2 }{r} }^2 &= 2 + \frac{w}{z} + \frac{z}{w} \\

4 \lr{ \frac{r – 3 }{r} }^2 &= 2 + w z + \inv{w z},

\end{aligned}

\end{equation}

where

\begin{equation}\label{eqn:inscribedTriangleProblem:240}

r = \inv{1 – \inv{2}\lr{ z + \inv{z}}}.

\end{equation}

The NSolve gave me some garbage solutions (like \(\theta = 0 \)) that must have been valid numerically, but did not encode the geometry of the problem, so I added a few additional constraints to the problem, namely

\begin{equation}\label{eqn:inscribedTriangleProblem:260}

\begin{aligned}

z \bar{z} &= 1 \\

w \bar{w} &= 1 \\

\inv{2} \lr{ z + \inv{z} } &\ne 1 \\

1/(1 – (1/2) \textrm{Re}(z + 1/z)) &> 3.

\end{aligned}

\end{equation}

This provided exactly two solutions, but when plotted, they turn out to just be mirror images of each other. After back substitution, the solution illustrated above was given by

\begin{equation}\label{eqn:inscribedTriangleProblem:280}

\begin{aligned}

r &= 3.87939 \\

\theta &= 42.078 \\

\phi &= 164.125,

\end{aligned}

\end{equation}

where these angles are in degrees, not radians.

There are probably lots of formulas for the area of a triangle (that I have forgotten), but we can compute it easily by doubling the triangle, forming a parallelogram, to find

\begin{equation}\label{eqn:inscribedTriangleProblem:300}

\textrm{Area} = \inv{2} \Abs{ \lr{ \BA – \BC } \wedge {\BC – \BB } },

\end{equation}

or

\begin{equation}\label{eqn:inscribedTriangleProblem:320}

\begin{aligned}

\textrm{Area}^2

&= \frac{-1}{4} \lr{ \lr{ \BA – \BC } \wedge \lr{\BC – \BB } }^2 \\

&= \frac{-1}{4} \lr{ \BA \wedge \BC – \BA \wedge \BB + \BC \wedge \BB }^2 \\

&= \frac{-r^4}{4} \lr{\gpgradetwo{ \Be_1 e^{i\theta} \Be_1 e^{-i\theta} – \Be_1 e^{i\theta} \Be_1 e^{i\phi} + \Be_1 e^{-i\theta} \Be_1 e^{i\phi} }}^2 \\

&= \frac{-r^4}{4} \lr{\gpgradetwo{ e^{-2 i \theta} – e^{i \phi -i\theta} + e^{i\theta + i \phi} }}^2,

\end{aligned}

\end{equation}

so

\begin{equation}\label{eqn:inscribedTriangleProblem:340}

\textrm{Area} = \frac{r^2}{2} \Abs{ -\sin( 2 \theta ) – \sin(\phi- \theta) + \sin(\theta + \phi)}.

\end{equation}

Plugging in \( r, \theta, \phi \), we find

\begin{equation}\label{eqn:inscribedTriangleProblem:360}

\textrm{Area} = 17.1866.

\end{equation}

After computing this value, I then finally watched the original video to compare my answer, and was initially disturbed to find that this wasn’t even one of the possible values. However, that was because the problem itself, as originally stated, didn’t include the correct answer, and my worry that I’d made a mistake was unfounded, as the value I computed matched what was computed in the video (it also looks “about right” visually.)

I’ve been enjoying XylyXylyX’s QED Prerequisites Geometric Algebra: Spacetime YouTube series, which is doing a thorough walk through of [1], filling in missing details. The last episode QED Prerequisites Geometric Algebra 15: Complex Structure, left things with a bit of a cliff hanger, mentioning a “canonical” form for STA bivectors that was intriguing.

The idea is that STA bivectors, like spacetime vectors can be spacelike, timelike, or lightlike (i.e.: positive, negative, or zero square), but can also have a complex signature (squaring to a 0,4-multivector.)

The only context that I knew of that one wanted to square an STA bivector is for the electrodynamic field Lagrangian, which has an \( F^2 \) term. In no other context, was the signature of \( F \), the electrodynamic field, of interest that I knew of, so I’d never considered this “Canonical form” representation.

Here are some examples:

\begin{equation}\label{eqn:canonicalbivectors:20}

\begin{aligned}

F &= \gamma_{10}, \quad F^2 = 1 \\

F &= \gamma_{23}, \quad F^2 = -1 \\

F &= 4 \gamma_{10} + \gamma_{13}, \quad F^2 = 15 \\

F &= \gamma_{10} + \gamma_{13}, \quad F^2 = 0 \\

F &= \gamma_{10} + 4 \gamma_{13}, \quad F^2 = -15 \\

F &= \gamma_{10} + \gamma_{23}, \quad F^2 = 2 I \\

F &= \gamma_{10} – 2 \gamma_{23}, \quad F^2 = -3 + 4 I.

\end{aligned}

\end{equation}

You can see in this table that all the \( F \)’s that are purely electric, have a positive signature, and all the purely magnetic fields have a negative signature, but when there is a mix, anything goes. The idea behind the canonical representation in the paper is to write

\begin{equation}\label{eqn:canonicalbivectors:40}

F = f e^{I \phi},

\end{equation}

where \( f^2 \) is real and positive, assuming that \( F \) is not lightlike.

The paper gives a formula for computing \( f \) and \( \phi\), but let’s do this by example, putting all the \( F^2 \)’s above into their complex polar form representation, like so

\begin{equation}\label{eqn:canonicalbivectors:60}

\begin{aligned}

F &= \gamma_{10}, \quad F^2 = 1 \\

F &= \gamma_{23}, \quad F^2 = 1 e^{\pi I} \\

F &= 4 \gamma_{10} + \gamma_{13}, \quad F^2 = 15 \\

F &= \gamma_{10} + \gamma_{13}, \quad F^2 = 0 \\

F &= \gamma_{10} + 4 \gamma_{13}, \quad F^2 = 15 e^{\pi I} \\

F &= \gamma_{10} + \gamma_{23}, \quad F^2 = 2 e^{(\pi/2) I} \\

F &= \gamma_{10} – 2 \gamma_{23}, \quad F^2 = 5 e^{ (\pi – \arctan(4/3)) I}

\end{aligned}

\end{equation}

Since we can put \( F^2 \) in polar form, we can factor out half of that phase angle, so that we are left with a bivector that has a positive square. If we write

\begin{equation}\label{eqn:canonicalbivectors:80}

F^2 = \Abs{F^2} e^{2 \phi I},

\end{equation}

we can then form

\begin{equation}\label{eqn:canonicalbivectors:100}

f = F e^{-\phi I}.

\end{equation}

If we want an equation for \( \phi \), we can just write

\begin{equation}\label{eqn:canonicalbivectors:120}

2 \phi = \mathrm{Arg}( F^2 ).

\end{equation}

This is a bit better (I think) than the form given in the paper, since it will uniformly rotate \( F^2 \) toward the positive region of the real axis, whereas the paper’s formula sometimes rotates towards the negative reals, which is a strange seeming polar form to use.

Let’s compute \( f \) for \( F = \gamma_{10} – 2 \gamma_{23} \), using

\begin{equation}\label{eqn:canonicalbivectors:140}

2 \phi = \pi – \arctan(4/3).

\end{equation}

The exponential expands to

\begin{equation}\label{eqn:canonicalbivectors:160}

e^{-\phi I} = \inv{\sqrt{5}} \lr{ 1 – 2 I }.

\end{equation}

Multiplying each of the bivector components by \(1 – 2 I\), we find

\begin{equation}\label{eqn:canonicalbivectors:180}

\begin{aligned}

\gamma_{10} \lr{ 1 – 2 I}

&=

\gamma_{10} – 2 \gamma_{100123} \\

&=

\gamma_{10} – 2 \gamma_{1123} \\

&=

\gamma_{10} + 2 \gamma_{23},

\end{aligned}

\end{equation}

and

\begin{equation}\label{eqn:canonicalbivectors:200}

\begin{aligned}

– 2 \gamma_{23} \lr{ 1 – 2 I}

&=

– 2 \gamma_{23}

+ 4 \gamma_{230123} \\

&=

– 2 \gamma_{23}

+ 4 \gamma_{23}^2 \gamma_{01} \\

&=

– 2 \gamma_{23}

+ 4 \gamma_{10},

\end{aligned}

\end{equation}

leaving

\begin{equation}\label{eqn:canonicalbivectors:220}

f = \sqrt{5} \gamma_{10},

\end{equation}

so the canonical form is

\begin{equation}\label{eqn:canonicalbivectors:240}

F = \gamma_{10} – 2 \gamma_{23} = \sqrt{5} \gamma_{10} \frac{1 + 2 I}{\sqrt{5}}.

\end{equation}

It’s interesting here that \( f \), in this case, is a spatial bivector (i.e.: pure electric field), but that clearly isn’t always going to be the case, since we can have a case like,

\begin{equation}\label{eqn:canonicalbivectors:260}

F = 4 \gamma_{10} + \gamma_{13} = 4 \gamma_{10} + \gamma_{20} I,

\end{equation}

from the table above, that has both electric and magnetic field components, yet is already in the canonical form, with \( F^2 = 15 \). The canonical \( f \), despite having a positive square, is not necessarily a spatial bivector (as it may have both grades 1,2 in the spatial representation, not just the electric field, spatial grade-1 component.)

[1] Justin Dressel, Konstantin Y Bliokh, and Franco Nori. Spacetime algebra as a powerful tool for electromagnetism. *Physics Reports*, 589:1–71, 2015.

Today was the day to try that. I started by cutting a very large hole in his wall to see into the big triangular roof space. I wanted a hole that was big enough that we could potentially reach into the back, since I was pretty sure that I could get a line up in that location. Here’s that hole with the fishing wire poking out:

The house is old, and the walls have been finished with drywall over plaster and lathe.

In my office I had to cut two holes, one near the ceiling

I cut a nice little rectangle with the intention of using my 4.5′ flexible 3/4″ drill bit between the lathe and the brick, but changed my strategy once I saw the hole. We’ve got the following layers in this space:

- drywall (1/2″)
- plaster (~1/2″)
- lathe (~1/2″)
- 5/8-3/4″ gap (no insulation)
- brick.

I was worried that trying to jam my drill bit into the space between the lathe and the brick would wreck it, since the space is so small. Instead I opted to try to drill upwards through the plaster layer, into the lathe, and then up through the ceiling. This wasn’t the easiest path to drill and the bit wandered significantly, but I did get the hole made, and fished my pulling line up. With Karl’s help, we got the pulling line out of our big hole. I was then ready to cut my second hole, and try to get the line down from the ceiling area to closer to the floor, where I’ll put the outlet and the ethernet jacks. Here’s that hole with the pulling line fished through:

I chose to run 4 lines. Two for Karl’s room, and two for the back room. The two lines for the back room, have just been left in the crawl space. I tossed them in a bit, so that if we open up the wall in that room, it should be possible to crawl in from the other side and grab them. We are thinking that it would be good to open up that triangular dead space and build in some sort of integrated storage solution — at which point we could also run ethernet to that room. Even if we don’t use it, it’s easy to leave it there for the future at this point when the walls are opened up.

Here’s Karl’s room temporarily closed up with one jack connected:

The end result from Karl’s point of view is the following speed test:

He was very happy with this result, about 5x faster than his wifi speed (which in turn, is also way better than his wifi speed at the old house.)

There is still more to do for this little project:

- reinsert the insulation in the big hole, and anchor the drywall in place, and the mud and sanding to patch things up.
- patch up things in my office and repaint that little wall (hopefully, I can get away with just that single wall.)
- connect jacks for the second wire, and put on covers (on order.)
- (maybe) connect jacks for the “future expansion” wires for the back room. I may just leave those in the wall for now (but have ordered a 4-port jack plate.)

]]>

I’m reading [1], which has problems, despite being a sort of pop-sci book. The first such problem is showing that the particular constant

\begin{equation*}

\sqrt{ \frac{h G}{c^3} }

\end{equation*}

has dimensions of length.

My first thought for this was that we have lots of ways of expressing energy in ways that bring in some, but not all of those constants. Examples are

\begin{equation*}

m c^2

,\quad

h \nu

,\quad

i \,\hbar \PD{t}{}

,\quad

– \frac{\hbar^2}{2m} \PDSq{x}{}

,\quad

– \frac{G m M}{r^2}.

\end{equation*}

Some of these are identical with respect to dimensions, for example:

\begin{equation*}

[h\nu] = [i \,\hbar \PD{t}{}] = [h]/T.

\end{equation*}

Let’s use the fact that the dimensions of a particle’s rest energy match that of the photon energy, to find a way to eliminate mass from the dimensions of the gravitation potential energy, that is

\begin{equation*}

[ m c^2 ] = [m] \frac{L^2}{T^2} = [h]/T,

\end{equation*}

or

\begin{equation*}

M L^2/T^2 = [h]/T,

\end{equation*}

so

\begin{equation*}

M

= [h] \frac{T}{L^2}

= [h/c] \inv{L}.

\end{equation*}

Now we can relate the photon energy dimensions with the dimensions of gravitational potential energy, to find

\begin{equation*}

\begin{aligned}

\frac{[h]}{T}

&=

\frac{[G] M^2}{L} \\

&=

\frac{[G]}{L}

[h^2/c^2] \inv{L^2},

\end{aligned}

\end{equation*}

or

\begin{equation*}

[h G/c^3] = L^2.

\end{equation*}

so, we see that the root of this odd combination of units, does, as claimed, have dimensions of length.

[1] Carlo Rovelli. *General Relativity: The Essentials*. Cambridge University Press, 2021.

In file included from /home/llvm-project/llvm/lib/IR/Constants.cpp:15: /home/llvm-project/llvm/lib/IR/LLVMContextImpl.h:447:11: error: explicit specialization in non-namespace scope ‘struct llvm::MDNodeKeyImpl<llvm::DIBasicType>’ template <> struct MDNodeKeyImpl<DIStringType> { ^

This is the code:

template <> struct MDNodeKeyImpl<DIStringType> { unsigned Tag; MDString *Name; Metadata *StringLength; Metadata *StringLengthExp; Metadata *StringLocationExp; uint64_t SizeInBits; uint32_t AlignInBits; unsigned Encoding;

This specialization isn’t materially different than the one that preceded it:

template <> struct MDNodeKeyImpl<DIBasicType> { unsigned Tag; MDString *Name; MDString *PictureString; uint64_t SizeInBits; uint32_t AlignInBits; unsigned Encoding; unsigned Flags; Optional<DIBasicType::DecimalInfo> DecimalAttrInfo; MDNodeKeyImpl(unsigned Tag, MDString *Name, MDString *PictureString, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, unsigned Flags, Optional<DIBasicType::DecimalInfo> DecimalAttrInfo) : Tag(Tag), Name(Name), PictureString(PictureString), SizeInBits(SizeInBits), AlignInBits(AlignInBits), Encoding(Encoding), Flags(Flags), DecimalAttrInfo(DecimalAttrInfo) {} MDNodeKeyImpl(const DIBasicType *N) : Tag(N->getTag()), Name(N->getRawName()), PictureString(N->getRawPictureString()), SizeInBits(N->getSizeInBits()), AlignInBits(N->getAlignInBits()), Encoding(N->getEncoding()), Flags(N->getFlags(), DecimalAttrInfo(N->getDecimalInfo()) {} bool isKeyOf(const DIBasicType *RHS) const { return Tag == RHS->getTag() && Name == RHS->getRawName() && PictureString == RHS->getRawPictureString() && SizeInBits == RHS->getSizeInBits() && AlignInBits == RHS->getAlignInBits() && Encoding == RHS->getEncoding() && Flags == RHS->getFlags() && DecimalAttrInfo == RHS->getDecimalInfo(); } unsigned getHashValue() const { return hash_combine(Tag, Name, SizeInBits, AlignInBits, Encoding); } };

However, there is an error hiding above it on this line:

i.e. a single missing brace in the initializer for the Flags member, a consequence of a cut and paste during rebase that clobbered that one character, when adding a comma after it.

It turns out that the compiler was giving me a hint that something was wrong before this in the message:

as it states that the scope is:

which is the previous class definition. Inspection of the code made me think that the scope was ‘namespace llvm {…}’, and I’d gone looking for a rebase error that would have incorrectly terminated that llvm namespace scope. This is a classic example of not paying enough attention to what is in front of you, and going off looking based on hunches instead. I didn’t understand the compiler message, but in retrospect, non-namespace scope meant that something in that scope was incomplete. The compiler wasn’t smart enough to tell me that the previous specialization was completed due to the missing brace, but it did tell me that something was wrong in that previous specialization (which was explicitly named), and I didn’t look at that because of my “what the hell does that mean” reaction to the compilation error message.

In this case, I was building on RHEL8.3, which uses an ancient GCC toolchain. I wonder if newer versions of g++ fare better (i.e.: a message like “possibly unterminated brace on line …” would have been much nicer)? I wasn’t able to try with clang++ as I was building llvm+clang+lldb (V14), and had uninstalled all of the llvm related toolchain to avoid interference.

]]>Neither of the existing lights was mounted in a box, instead there was a “clever” surface mounting method used, with the wires and marrettes tucked into little cavities. I see why this was done, especially on the exterior wall, since there is not enough space for a standard size octagon box between the brick and the drywall. We have about a one inch gap, then lathe, then the drywall.

I’ll see if I can find and install a shallow octagon box instead. It will be tricky to do so, because there are no studs to connect to, and not enough space to retrofit any into the wall. As Sofia said, “nothing is ever easy, is it.”

]]>