我怎样才能在 MATLAB 中使我的 rounds() 函数在一次处理大约 400 个值时非常精确?
How can i make my rounds() function in MATLAB, be very precised when handling around 400 values at a time?
我制作了这个函数 rounds() ,它将值舍入到最接近的 0.5 的倍数,即 rounds(2.685)=2.5 rounds(2.332)=2.5 rounds(2.7554)=3.0 rounds(2.245)=2.0它以上述方式运行良好,但在处理大量值时精度下降。它没有给我想要的结果。我有 30 个函数,每个函数计算 14 个值,我将这些值作为包含这 14 个值的整个向量传递给 rounds() 。结果就像,对于它应该 return 3.0 的值,例如 rounds(2.7554),它只有 returns 2.5,这对我的整体准确性有很大影响。当我通过它来检查其工作时,它单独适用于所有值,甚至 2.7554 returns 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
即使在单个函数中,rounds 函数一次只处理 14 个值,结果仍然不精确,而如果我单独传递这些相同的值,它会给出正确的输出。请有人解决这个问题。提前致谢。
function [newVal] = rounds2(x)
newVal = round(x/0.5)*0.5;
end
这是我苦苦思索了很长时间的问题,但现在我有了一个完美的答案。发生这种情况是因为我将向量表达式 dist >= 0.25 传递给 if...end,错误地认为 if...end 将针对 x(i) 的每个元素单独求值。希望对其他人也有帮助
我制作了这个函数 rounds() ,它将值舍入到最接近的 0.5 的倍数,即 rounds(2.685)=2.5 rounds(2.332)=2.5 rounds(2.7554)=3.0 rounds(2.245)=2.0它以上述方式运行良好,但在处理大量值时精度下降。它没有给我想要的结果。我有 30 个函数,每个函数计算 14 个值,我将这些值作为包含这 14 个值的整个向量传递给 rounds() 。结果就像,对于它应该 return 3.0 的值,例如 rounds(2.7554),它只有 returns 2.5,这对我的整体准确性有很大影响。当我通过它来检查其工作时,它单独适用于所有值,甚至 2.7554 returns 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
即使在单个函数中,rounds 函数一次只处理 14 个值,结果仍然不精确,而如果我单独传递这些相同的值,它会给出正确的输出。请有人解决这个问题。提前致谢。
function [newVal] = rounds2(x)
newVal = round(x/0.5)*0.5;
end
这是我苦苦思索了很长时间的问题,但现在我有了一个完美的答案。发生这种情况是因为我将向量表达式 dist >= 0.25 传递给 if...end,错误地认为 if...end 将针对 x(i) 的每个元素单独求值。希望对其他人也有帮助