8

For those who do not know, the split-complex numbers are an analogue to the complex numbers where J is defined such that $J^2=1$ but $J\ne\pm1$, so they are all of the form $a+bJ$.

By using TagSetDelayed, I tried to define the split-complex numbers as so:

J /: J^2 := 1

If I then type J^2, I get the output 1. However, if I type J^3, I just get the output J^3. I would like to instead get the output $J$, since $J^3=J^2J=1J=J$. Is there a better way to implement this number system?

volcanrb
  • 373
  • 1
  • 5

3 Answers3

9

Try this:

J /: Power[J, p_Integer?OddQ] := J
J /: Power[J, p_Integer?EvenQ] := 1


J^Range[-10, 10]

{1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1}

Henrik Schumacher
  • 106,770
  • 7
  • 179
  • 309
3

You can represent split-complex numbers as multivectors (geometric number, clifford number) with signature $(1, 0)$. I have a paclet for this:

PacletInstall["https://wolfr.am/OkONsyY2"]

<< GeometricAlgebra`

(* this is your split-complex number *) h = Multivector[{a, b}, 1]

(* you can perform numeric operations with it ) h^2 h^-1 MultivectorFunction[Exp, h] ( similar to MatrixFunction *)

swish
  • 7,881
  • 26
  • 48
1

This way, add this line to the top of the notebook:

$Post = #/.J->{-1,1}/.{x_,y_}->(x+y)/2+J(y-x)/2&;

Use like this:

In:= Log[J]

Out:= (I Pi)/2 - (I Pi J)/2

In:= I^J

Out:= I J

Anixx
  • 3,585
  • 1
  • 20
  • 32