# Outermorphism for linear transform

I was interested in how scaling should work in geometric algebra. I read this post: Scaling with PGA?
which was very informative.

I’ve seen “use an outermorphism” pop up a few times as the answer to “how do you do this some linear transform that isn’t an obvious versor in GA(p,q,n)?”

So how should one implement this?
Here’s my take:
convert to coordinates
apply the transform to coordinate vector
wedge and add everything together to get back to the object type you started with? i.e. wedge blades back together ( the outermorphism ) then use addition to compose back into multivectors/k-vectors?

here’s what I came up with. Aside from obvious optimizations, does this seem correct?

function outermorphism(L, b::B) where B<:Blade
sb = factor(b)   # (scalar, followed by all 1-blades)
𝐼 = pseudoscalar(b)   # need this for making KVector out of coordinates
mapreduce(bᵢ->KVector(L*coords(one(bᵢ)), 𝐼), ∧, sb[2:end])*sb
end

outermorphism(L, k::K) where K<:KVector = mapreduce(b->outermorphism(L, b), +, k)

outermorphism(L, M::MT) where MT<:Multivector = scalar(M) + mapreduce(k->outermorphism(L, k), +, M)


seems to work for scaling. although I get covariant ( inverse scaling ) behaviour when applied to PGA points ( but that is to be expected, see the related post )

Outermorphisms with scaling were in my paper on differential geometric algebra. In there, I defined this outermorphism \eta\oslash\omega = \omega^{-1}\eta\omega^\times, where ^\times is the involution operation. This generalizes the sandwich product for non-unitary transformations.

Can you explain that in plain geometric algebra?