aboutsummaryrefslogtreecommitdiff
path: root/bloch_messiah.m
diff options
context:
space:
mode:
Diffstat (limited to 'bloch_messiah.m')
-rw-r--r--bloch_messiah.m10
1 files changed, 3 insertions, 7 deletions
diff --git a/bloch_messiah.m b/bloch_messiah.m
index 6724a26..4050102 100644
--- a/bloch_messiah.m
+++ b/bloch_messiah.m
@@ -1,10 +1,9 @@
-function [ut1, st1, v1] = bloch_messiah(S, tol, rounding)
+function [ut1, st1, v1] = bloch_messiah(S, tol)
% Bloch-Messiah decomposition of a symplectic matrix.
%
% Args:
% S (matrix): symplectic matrix
% tol (double): tolerance for symplectic check (default: 1e-10)
- % rounding (int): decimal places for rounding singular values (default: 9)
%
% Returns:
% ut1, st1, v1 (matrices): Decomposition matrices such that S = ut1 * st1 * v1
@@ -12,9 +11,6 @@ function [ut1, st1, v1] = bloch_messiah(S, tol, rounding)
if nargin < 2
tol = 1e-10;
end
- if nargin < 3
- rounding = 9;
- end
[n, m] = size(S);
@@ -35,7 +31,7 @@ function [ut1, st1, v1] = bloch_messiah(S, tol, rounding)
if norm(S' * S - eye(2*n)) >= tol
[u, sigma] = polardecomp(S, 'left');
- [ss, uss] = takagi(sigma, tol, rounding);
+ [ss, uss] = takagi(sigma, tol);
% Apply permutation matrix
perm = [1:n, 2*n:-1:n+1];
@@ -49,7 +45,7 @@ function [ut1, st1, v1] = bloch_messiah(S, tol, rounding)
st = pmat * diag(ss) * pmat;
% Identify degenerate subspaces
- st_diag = round(diag(st), rounding);
+ st_diag = diag(st);
[~, ~, ic] = unique(st_diag(1:n));
stop_is = cumsum(accumarray(ic, 1));
start_is = [0; stop_is(1:end-1)] + 1;