1

二部状態のシュミット分解 (2 つの密度行列のテンソル) を計算して、シュミット数 (X) と基底ベクトル (e_i、e_j) の合計を各反復で並べて出力する関数を取得しようとしています。ループ用。例:(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
4

2 に答える 2

0

「docfprintf」と入力すると、ヘルプファイルが表示され、適切なフォーマット方法が表示されます。出力を揃えようとしているだけの場合は、を使用して精度を指定する必要があります。

 fprint('%3.4f',e_i)
于 2012-11-28T22:28:13.627 に答える
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,:))
于 2012-11-29T04:54:41.757 に答える