Как сделать так, чтобы функция 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). Надеюсь, что это поможет и другим