ケイリー変換をどのように定義する必要がありますか?

Aug 21 2020

私はMathematicaの初心者です。Cayley行列変換を評価する関数、つまり行列を取る関数を定義しようとしています。$M$ そのような $I + M$ に反転可能です $(I-M)(I+M)^{-1}$。最初に2行2列の行列について説明したいと思います。

私のコードは

cayley[x_] := 
  (IdentityMatrix[2] - x) . (Inverse[IdentityMatrix[2] + x]) \; 
  Det[IdentityMatrix[2] + x] != 0

エラーが発生します。

cayley [x_]の後に..を続けることはできません。

確かにいくつかの非常に基本的な構文エラーがありますが、試行錯誤の末、ドキュメントやエラーメッセージの内容からそれを理解することはできません。どんな助けでも大歓迎です!

マトリックスのサイズを別のパラメーターとして追加するのに役立つPSボーナスポイント。これは単純に、式でcayley[x_,n_] := ...,2を置き換えるのnでしょうか?

回答

5 m_goldberg Aug 21 2020 at 23:05

これはあなたのために働きますか?

cayley[x_] /;
    (SquareMatrixQ[x] && Det[IdentityMatrix[Length[x]] + x] != 0) :=
  Module[{i = IdentityMatrix[Length[x]]},
    (i - x).Inverse[i + x]]

いくつかのテスト

m = Partition[Range[16], 4];cayley[m]
{{-(13/9), -(4/3), -(2/9), 8/9}, {-(6/5), 1/5, -(2/5), 0}, 
 {2/45, -(4/15), 19/45, -(8/9)}, {58/45, 4/15, -(34/45), -(7/9)}}

正方行列ではありません。

mx = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; cayley[mx]
cayley[{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}]

$M+I$ 反転できません。

my = -IdentityMatrix[4]; cayley[my] 
cayley[{{-1, 0, 0, 0}, {0, -1, 0, 0}, {0, 0, -1, 0}, {0, 0, 0, -1}}]