我正在尝试获得一个计算二分状态(两个密度矩阵的张量)的施密特分解的函数,以便为每个状态并排打印施密特数(X)和基矢量(e_i,e_j)的和for循环的迭代。例如:(x'*'e_1'\ otimes'e_1 + ... + x'*'e_i'\ otimes'e_j)。注释掉的fprintf语句是我已经尝试过的事情。
代码:
function [u, v] = Schmidt(m,n,v)
m = 3 %size of basis vector
n = 4 %size of basis vector
e_m = eye(m)
e_n = eye(n)
%can have a = input('enter an array>');
v = [1
2
3
4
5
6
7
8
9
10
11
12]
for i = 1:m
for j = 1:n
e_i = e_m(:,i)
e_j = e_n(:,j)
K = kron(e_i, e_j)
x = ctranspose(K)*v
W(i,j) = x
%fprintf('%d %f %f %f\n',j,e_i,e_j,x);
%fprintf(1,'Header 1\tHeader 2\n');
%fprintf(1,'%f\t%f\n','e_i e_j');
%fprintf('the basis are %d\n',e_i, e_j)
end
end
end
答案 0 :(得分:0)
键入“doc fprintf”将显示帮助文件,它可以显示正确的格式化方式。如果您只是尝试对齐输出,则可能需要使用
指定精度 fprint('%3.4f',e_i)
答案 1 :(得分:0)
你可以试试这个:
.
.
.
x = ctranspose(K)*v;
NEW(1:numel(j(:,1)), 1) = j;
NEW(1:numel(e_i(:,1)), 2) = e_i;
NEW(1:numel(e_j(:,1)), 3) = e_j;
NEW(1:numel(x(:,1)), 4) = x;
sprintf('%f %f %f %f \n',NEW(:,1), NEW(:,2), NEW(3,:), NEW(4,:))