计数器值不变,MATLAB

时间:2014-06-18 18:38:54

标签: matlab

我是Matlab的新手,我遇到的问题是我的代码中的两个计数器不会改变值。

 fid = fopen('results.txt', 'wt');
 counter1 = 0;
 counter2 = 3;
 for i=1:size(res_t,1)
     counter1 = counter1 + 1;
     if(counter2 == 3)
         fprintf(fid, '%f ', res_t.time(:,:)); % first column i need the time
         counter2 = 0;
     end
     fprintf(fid, '%f ', res_t.data(:,:)');
     if(counter1 == 3)
         fprintf(fid, '\n'); %after it writes all 3 X,Y,Z i want to change line
         counter1 = 0;
     end
     counter2 = counter2 + 1;
 end
 fclose (fid);

运行时,counter1&的价值counter2不会更改,这意味着它们永远不会满足If语句条件。我的输出文件是一个文件,其中包含:第1列:时间值,第2-4列:X,Y,Z坐标。

例如:

Time1     X1     Y1     Z1
Time2     X2     Y2     Z2

谢谢!

2 个答案:

答案 0 :(得分:0)

我的猜测是size(res_t, 1)返回1,这意味着你的循环只执行一次。 rest_t看起来像一个包含单个元素的结构。

另外,你是什么意思"编译"?如果您只是在matlab环境中运行代码,那么它将被解释,而不是编译。

答案 1 :(得分:0)

我不确定res_t对象的格式,但您可以完全放弃if语句

% Iterate over elements in your time vector
for ii = 1:size(res_t.time, 1)

    % Print time and data to a line, followed by a line feed
    fprintf(fid, "%f  %f  %f  %f\n", res_t.time(ii), res_t.data(ii,1), res_t.data(ii,2), res_t.data(ii,3))

end

如果res_t是包含两个不同数组的结构timedata,那么您将要遍历res_t.time行(因此size(res_t.time, 1)声明。上面的代码应该用后面的参数列表中的元素替换每个%f,然后打印一个新行,所以你应该得到类似的东西:

time1  x1  y1  z1
time2  x2  y2  z2
...

这假定您的res_t.data数组有三列,X Y Z,以及与res_t.time数组相同的行数(或更多)。