我是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
谢谢!
答案 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
是包含两个不同数组的结构time
和data
,那么您将要遍历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
数组相同的行数(或更多)。