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);
U = expm(-1i*M);
for t_i = 1:100
U = U*U;
norm = trace(U*U'-eye(10))

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))