Функция fprintf
сначала читает входные переменные в столбце и отправляет каждое значение в соответствующее место в строке. Итак, в вашем коде происходит то, что даже когда вы указываете два разных вектора на %.4f
в вашем коде, Matlab игнорирует этот порядок. В первом %.4f
ставится первое значение coord(:, 1)
, а во втором %.4f
- второе значение coord(:, 1)
. Тогда это нарушает черту. Затем он снова выбирает третье значение из coord(:, 1)
и помещает его в первое %.4f
и так далее. Он выбирает значения из coord(:, 2)
только когда все значения первого вектора исчерпаны.
Самое простое решение - это транспонировать матрицу coord
и затем вводить ее в Matlab следующим образом:
fprintf(fileID,'%.4f %.4f\n', coord.'); % .' tranposes the matrix
Edit:
Чтобы получить формат как x1 0.5920 y1 0.4635
, мы можем использовать первый порядок столбцов, который следует Matlab для доступа к переменной
% First we make a new matrix that has each of the required elements for the desired format
% The index of x, the value of x, the index of y and the value of y
tempCoord = [1:size(coord, 1); coord(:, 1).'; 1:size(coord, 1); coord(:, 2).'];
% Now we change the string specification for fprintf
fprintf(fileID,'x%d %.4f y%d %.4f\n', tempCoord);
Почему это работает?
Если вы посмотрите на tempCoord
, вы увидите, что каждый из его столбцов имеет формат, необходимый для спецификатора строки, т. Е. Индекс x, значение x, индекс y и значение y
tempCoord =
1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
0.592000000000000 0.645100000000000 -0.120600000000000 0.241700000000000 0.302900000000000
1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
0.463500000000000 0.211800000000000 -0.603600000000000 0.477300000000000 0.517200000000000
Теперь каждый столбец становится каждой строкой напечатанного файла, и вы получаете следующий вывод:
x1 0.5920 y1 0.4635
x2 0.6451 y2 0.2118
x3 -0.1206 y3 -0.6036
x4 0.2417 y4 0.4773
x5 0.3029 y5 0.5172