Мне нужно построить фигуры с субплотами внутри parfor
-циклов, аналогично этому вопросу (что больше касается качества графиков).
Мой код выглядит примерно так:
parfor idx=1:numel(A)
N = A(idx);
fig = figure();
ax = subplot(3,1,1);
plot(ax, ...);
...
saveas(fig,"..."),'fig');
saveas(fig,"...",'png');
end
Это дает странную ошибку:
Данные должны быть числовыми, датой-временем, продолжительностью или массивом, который можно преобразовать в удвоение.
Я уверен, что проблема не в нецифровых данных, поскольку тот же код без распараллеливания работает.
В этот момент я ожидал ошибку, потому что потоки будут одновременно создавать и получать доступ к объектам фигур и осей, и я не думаю, что гарантируется, что маркеры всегда соответствуют нужному объекту (так сказать, потоки являются "перекрестными чертами").
Если я предварительно инициализирую объекты, а затем получаю к ним доступ,
ax = cell(1,numel(A)); % or ax = zeros(1,numel(A));
ax(idx) = subplot(3,1,1);
Я получаю еще более странные ошибки где-то в фит-вызовах, которые я использую:
Error using curvefit.ensureLogical>iConvertSubscriptIndexToLogical (line 26)
Excluded indices must be nonnegative integers that reference the fit's input data points
Error in curvefit.ensureLogical (line 18)
exclude = iConvertSubscriptIndexToLogical(exclude, nPoints);
Error in cfit/plot (line 46)
outliers = curvefit.ensureLogical( outliers, numel( ydata ) );
У меня такое чувство, что оно должно работать с каким-то срезом переменных, описанным в документации , я просто не могу понять, как.