【问题标题】:Matlab, printing output vectors side by sideMatlab,并排打印输出向量
【发布时间】:2012-11-28 21:57:27
【问题描述】:

我正在尝试获取一个计算二分状态(两个密度矩阵的张量)的施密特分解的函数,以并排打印施密特数 (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

【问题讨论】:

  • 所以你想在每次迭代中并排有多少个数字,它们的变量名是什么?
  • 如果你想把所有的数字放在同一行,你可以使用 disp([ a b c d ])

标签: matlab formatting octave


【解决方案1】:

键入“doc fprintf”将打开帮助文件,它可以向您展示正确的格式化方式。如果您只是尝试对齐输出,您可能需要使用

指定精度
 fprint('%3.4f',e_i)

【讨论】:

    【解决方案2】:

    你可以试试这个:

        .
        .
        .
        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,:))
    

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      相关资源
      最近更新 更多