aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bloch_messiah.m10
-rw-r--r--takagi.m8
2 files changed, 5 insertions, 13 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;
diff --git a/takagi.m b/takagi.m
index f9375a8..dafd632 100644
--- a/takagi.m
+++ b/takagi.m
@@ -1,10 +1,9 @@
-function [rl, U] = takagi(N, tol, rounding)
+function [rl, U] = takagi(N, tol)
% Autonne-Takagi decomposition of a complex symmetric (not Hermitian!) matrix.
%
% Args:
% N (complex matrix): square, symmetric matrix N
% tol (double): tolerance for symmetry check (default: 1e-13)
- % rounding (integer): decimal places for rounding singular values (default: 13)
%
% Returns:
% rl (vector): rounded singular values
@@ -13,9 +12,6 @@ function [rl, U] = takagi(N, tol, rounding)
if nargin < 2
tol = 1e-13;
end
- if nargin < 3
- rounding = 13;
- end
[n, m] = size(N);
@@ -55,7 +51,7 @@ function [rl, U] = takagi(N, tol, rounding)
[v, l, ws] = svd(N);
w = ws';
- rl = round(diag(l), rounding);
+ rl = diag(l);
% Group degenerate singular values
[~, ~, ic] = unique(rl);