Как сделать так, чтобы функция rounds() в MATLAB была очень точной при обработке около 400 значений одновременно?

Я сделал эту функцию rounds(), которая округляет значения до ближайшего кратного 0,5, то есть округляет (2,685)=2,5 раунда (2,332)=2,5 раунда (2,7554)=3,0 раунда (2,245)=2,0, это хорошо работает в Способ, упомянутый выше, но при обработке большого количества значений точность падает. Это не дает мне желаемых результатов. У меня есть 30 функций, каждая из которых вычисляет 14 значений, которые я передаю в rounds() как целый вектор, содержащий эти 14 значений. Результаты такие же, как для значений, для которых он должен возвращать 3.0, например, раунды (2.7554), он возвращает только 2.5, и это сильно влияет на мою общую точность. Индивидуально это работает хорошо для всех значений, даже 2.7554 возвращает 3.0, когда я передаю его, чтобы проверить его работу. Может кто-нибудь сказать мне, почему это происходит, что при обработке большого числа значений его производительность уменьшается, а также подскажите мне решение.

 function [newVal] = rounds(x) 
   dist = mod(x, 0.5); 
   floorVal = x - dist; 
   if  dist  >=0.25
     newVal = floorVal + 0.5;      
   else
     newVal = floorVal;
   end
 end 

Выше - функция раундов, и ниже я показываю, как я использовал ее мои функции.

if true
  calc(1) = x+y;
  calc(2) = x-y;
  calc(3) = x*y+a;
  .......
  .......
  .......
  calc(14) = a+b*c+x;
  calc = calc';
  final_calc = rounds(calc);
end

Даже в одной функции функция округлений обрабатывает только 14 значений одновременно, но результат не является точным, в то время как, если я передаю эти же значения по отдельности, это дает правильный вывод. Пожалуйста, решите эту проблему кто-нибудь. Заранее спасибо.

1 ответ

function [newVal] = rounds2(x)
  newVal = round(x/0.5)*0.5;
end

Это было то, над чем я долго боролся, но теперь у меня есть идеальный ответ. Это происходило потому, что я передавал векторное выражение dist >= 0.25 в if...end, неправильно думая, что if... end будет оцениваться отдельно для каждого элемента x(i). Надеюсь, что это поможет и другим

Другие вопросы по тегам