斎藤正彦著『斎藤正彦線型代数学』を読んでいます。

正規行列はユニタリ行列によって対角化できるという定理が書いてあります。
Wolfram Language 12で、 A = U*D*U^* となる U, D を計算する関数を作りました。

orthogonalizationU[A_] := Module[
{eigenvs, U, DIA},
eigenvs = Eigenvalues[A];
DIA = DiagonalMatrix[eigenvs];
eigenvs = DeleteDuplicates[Eigenvalues[A]];
U = Transpose @ ((Flatten[#, 1])& @ (Orthogonalize /@ (NullSpace /@ ((A - #*IdentityMatrix[Length[A]])& /@ eigenvs))));
{U, DIA}
]