Matrix product error accumulated during iteration

1 次查看(过去 30 天)
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
  2 个评论
Bjorn Gustavsson
Bjorn Gustavsson 2019-6-25
Why not let expm handle all of that and skip the iteration?
zhao hongzheng
zhao hongzheng 2019-6-25
I am acutually constructing a fibonacci sequence of a matrix, for instance
U_n = U_{n-2}*U_{n-1}, with the first two unitaries as U_1=expm(-1i*M1),U_2=expm(-1i*M2). Thus in each step, I need build matrix by iteration, which can not be simply use a single expm.

请先登录,再进行评论。

采纳的回答

Jan
Jan 2019-6-25
编辑:Jan 2019-6-26
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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by