MATLAB: Matrix product error accumulated during iteration

matrix manipulation

I have a problem when multiplying unitary matrix many times. Initially, a unitary(or symmetric in the following example) matrix is constructed as U. Then I multiply the matrix in an iteractive way and check the unitarity of the results by comparing U*U' with identity. They are close in the first few steps but deviate gradually. Any suggestions to reduce the error and always keep U unitary?
The following is the code.
clear all
M = rand(10);
M=0.5*(M+M');
U = expm(-1i*M);
for t_i = 1:100
U = U*U;
norm = trace(U*U'-eye(10))
end

Best Answer

You can find the nearest unitary matrix in each iteration using an SVD:
for t_i = 1:100
[S,~,D] = svd(U * U);
U = S * D';
norm = trace(U * U' - eye(10))
end