找回密码
 快速注册
搜索
查看: 4|回复: 0

四元数

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-12-5 21:04 |阅读模式
以下是使用 2×2 复数矩阵$\begin{pmatrix}
z & w\\
-\bar{w} & \bar{z}\\
\end{pmatrix}
\in M_2(\mathbb{C})$表示四元数$z+wj$的 Mathematica 代码:
  1. Clear["Global`*"]
  2. Unprotect[Dot];
  3. Dot[x_?NumberQ, y_] := x y;
  4. Protect[Dot];
  5. Matrix /: Matrix[x_?MatrixQ] :=
  6.   First[First[x]] /; x == First[First[x]] IdentityMatrix[Length[x]];
  7. Matrix /: NonCommutativeMultiply[Matrix[x_?MatrixQ], y_] :=
  8.   Dot[Matrix[x], y];
  9. Matrix /: NonCommutativeMultiply[y_, Matrix[x_?MatrixQ]] :=
  10.   Dot[y, Matrix[x]];
  11. Matrix /: Dot[Matrix[x_], Matrix[y_]] := Matrix[x . y];
  12. Matrix /: Matrix[x_] + Matrix[y_] := Matrix[x + y];
  13. Matrix /: x_?NumericQ + Matrix[y_] :=
  14.   Matrix[x IdentityMatrix[Length[y]] + y];
  15. Matrix /: x_?NumericQ Matrix[y_] := Matrix[x y];
  16. Matrix /: Matrix[x_]*Matrix[y_] := Matrix[x . y] /; x . y == y . x;
  17. Matrix /: Power[Matrix[x_?MatrixQ], y_?NumericQ] :=
  18.   Matrix[MatrixPower[x, y]];
  19. Matrix /: Power[Matrix[x_?MatrixQ], Matrix[y_?MatrixQ]] :=
  20.   Exp[Matrix[y] . Log[Matrix[x]]];
  21. Matrix /: Im[Matrix[x_?MatrixQ]] := Matrix[Im[x]]
  22. Matrix /: Re[Matrix[x_?MatrixQ]] := Matrix[Re[x]]
  23. Matrix /: Arg[Matrix[x_?MatrixQ]] := Matrix[Arg[x]]
  24. $Post2 = FullSimplify[FullSimplify[# /. i -> Matrix[( {
  25.                {I, 0},
  26.                {0, -I}
  27.               } )] /. j -> Matrix[( {
  28.               {0, 1},
  29.               {-1, 0}
  30.              } )] /. k -> Matrix[( {
  31.              {0, I},
  32.              {I, 0}
  33.             } ) ] /.
  34.         f_[args1___?NumericQ, Matrix[mat_], args2___?NumericQ] :>
  35.          Matrix[MatrixFunction[f[args1, #, args2] &, mat]]] /.
  36.       Matrix[{{a_, c_}, {d_, b_}}] :>
  37.        Re[a] + Im[a] i + Re[c] j + Im[c] k ] /.
  38.     Matrix[{{a_, c_}, {d_, b_}}] :>
  39.      Re[a] + Im[a] i + Re[c] j + Im[c] k &;
  40. $Post = Nest[$Post2, #, 3] &;
复制代码

执行此操作后,您可以在普通表达式中使用四元数(i、j 和 k 的表达式)与其他数字。只有当四元数可交换时,才会计算四元数的乘法,在其他情况下,使用非交换乘法运算符 (**),始终会计算四元数的乘法。

测试:四元数的 Exp 和 Log 与矩阵的 Exp 和 Log 相同。
In:=Log[(i + 5) ** (j - 1)]

Out:=1/18 (-2 Sqrt[3] (i - 5 j - k) (Pi - ArcTan[(3 Sqrt[3])/5]) + 9 Log[52])

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 07:03

Powered by Discuz!

× 快速回复 返回顶部 返回列表