Мой пост связан со следующими вопросами:
Избегайте деления на ноль между матрицами в MATLAB
Как запретить MATLAB округлять чрезвычайно малые значения 0?
Я пишу функцию Matlab, которую я экспортирую с codegen . Когда codegen выполняет деление между двумя числами, оба примитива удваиваются, codegen упоминает, что результатом является тип: Inf x: Inf. Вот мой фрагмент кода:
travel_distance = stop_position - start_position;
duration = stop_time - start_time;
velocity = (travel_distance / duration);
Ни переменная travel_distance, ни длительность не равны нулю. Во время codegen, когда я проверяю переменные travel_distance и duration, они оба: Inf x 1. Однако скорость отображается как: Inf x: Inf. Это показано также для блока кода (travel_distance / duration). Я подозреваю, что я сталкиваюсь со сценарием, упомянутым автором во второй ссылке, где упоминается эта цитата:
MATLAB не изменит значение на 0. Однако возможно, что результат, если результат использование значения в операции неотличимо от использования 0
Я пробовал несколько вещей, чтобы попытаться решить мою проблему, и все еще получаю то же самое. Например:
% increment by a small number
velocity = ((travel_distance + 0.0001) / (duration + 0.0001));
% check if nan, and set to 0
velocity(isnan(velocity)) = 0;
% check if nan or inf and set to 0
if (isnan(velocity) || isinf(velocity))
velocity = 0;
end
Я бы на самом деле ожидал, что travel_distance, duration и speed относятся к типу 1x1, поскольку я знаю, что это должны быть примитивные результаты.
Что я могу сделать, чтобы Matlab правильно выполнял кодоген, позволяя переменной скорости быть либо: Inf x 1, либо 1x1? (Двойной или внутренний выход в порядке)