Matlab:如何在使用importdata时将输出保存到文件并覆盖旧值?

时间:2013-11-09 19:06:45

标签: matlab matrix

我正在使用importdata去除标题并将文件导入我的工作区。

该文件包含旋转矩阵和平移向量。 在我的matlab脚本中,我将旋转矩阵转换为四元数。 在我的输出文件中,我想要四元数加上平移向量,即我想用旋转矩阵中的旧值替换四元数的新值。

但是,我只能将四元数输出到命令窗口,但不知道如何替换值。

这是我的代码:

path = '\filepath';
[head DELIM NHEADERLINES] = importdata([path],' ',9);
Rotation = head.data(:,1:9); 
Translation = head.data(:,10:12); 
RotationMatrix= zeros([3 3 size(Rotation,1)]);

for i=1:size(Rotation,1)
RotationMatrix(:,:,i) = [Rotation(i,1:3); Rotation(i,4:6); Rotation(i,7:9)];
end

Quaternion = SpinCalc('DCMtoQ',RotationMatrix,0.1,0);

如何将四元数放入原始文件并覆盖旋转矩阵? 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在您的情况下,建议更多地使用dlmreaddlmwrite


    M = dlmread(filename,' ',9,0); % start from row 10, column 1
    Rotation = M(:,1:9);
    Translation = M(:,10:12);
    .
    .
    .
    dlmwrite(Quaternion,'delimiter',' ','newline','pc');

如果您希望修改原始文件而不是替换它,请使用以下


    fileID = fopen(filename,'r+'); % with read and write permission
    fseek(fileID, pos, 'bof'); % where pos is the starting position of the bytes you want to read
    M = fscanf(fileID, repmat('%g ',1,12), nlines); % read 12 columns of numbers for at most n lines.
    .
    .
    .
    fseek(fileID, pos, 'bof'); % go back to the position
    fprintf(fileID, repmat('%g ',1,12), Quaternion);

这只是一个建议。上述代码可能无法按预期运行,因此我建议您阅读文档以获取更多信息。欢呼声。