MATLAB中的连接矩阵导致精度损失

时间:2013-08-23 05:52:58

标签: matlab matrix concatenation floating-point-precision

我有一个列矩阵说temp1,浮点数采用以下格式(使用格式long g以这种方式显示):

1334320224.86767
1334320225.03415
1334320225.20064

和另一个nx3矩阵(temp2),其值如下:

25.59989 -17.82167 31.19241
25.17558 -17.59459 30.71448
25.18788 -17.39987 30.61347

我按列顺序连接2个矩阵,temp = [temp1 temp2]; 得到的矩阵是:

1.334305e+09 24.40084 -17.98591 30.31327
1.334305e+09 24.23554 -17.68831 30.00396
1.334305e+09 25.31328 -17.61529 30.83927

我希望生成的矩阵具有temp1的原始精度。我该怎么做呢?我已经尝试过格式长g。使用dlmwrite写入文件并将精度设置为%.5f会导致第一列的小数部分归零。

1 个答案:

答案 0 :(得分:1)

首先,格式长g为我工作。我在mac上使用Matlab_R2013a:

>> temp = [temp1 temp2]

temp =

          1334320224.86767                  25.59989                 -17.82167                  31.19241
          1334320225.03415                  25.17558                 -17.59459                  30.71448
          1334320225.20064                  25.18788                 -17.39987                  30.61347

但是一个简单的解决方案:sprintf('%f ',temp),它将失去矩阵看起来像格式,但你将能够看到你想要的。输出:

>> sprintf('%f ',temp)

ans =

1334320224.867670 1334320225.034150 1334320225.200640 25.599890 25.175580 25.187880 -17.821670 -17.594590 -17.399870 31.192410 30.714480 30.613470 

如果你真的需要看到你指出的那样你可能会这样做:

>> arrayfun(@(in) sprintf('%f',in),temp,'Uniform',0)

ans = 

    '1334320224.867670'    '25.599890'    '-17.821670'    '31.192410'
    '1334320225.034150'    '25.175580'    '-17.594590'    '30.714480'
    '1334320225.200640'    '25.187880'    '-17.399870'    '30.613470'