Matlab 如何将小数点四舍五入到特定精度
所以给我一个向量f_1side:Matlab 如何将小数点四舍五入到特定精度,matlab,Matlab,所以给我一个向量f_1side: f_2sided = linspace(-5e11,5e11,958576); f_1sided = f_2sided(end/2+1:end); 我想找到f_1side==11.07e9项的索引 问题:f_1side有许多条目,大约为1.107e10,但并不精确。我想找到最准确的。例如,条目106110是110695042119813。下一个条目是11069608535002 我正在考虑一种方法来取整f_1side的条目。但是当我把我提到的两个条目四舍五入
f_2sided = linspace(-5e11,5e11,958576);
f_1sided = f_2sided(end/2+1:end);
我想找到f_1side==11.07e9项的索引
问题:f_1side有许多条目,大约为1.107e10,但并不精确。我想找到最准确的。例如,条目106110是110695042119813。下一个条目是11069608535002
我正在考虑一种方法来取整f_1side的条目。但是当我把我提到的两个条目四舍五入时,我不希望两者都是11.07e9,而只希望其中一个更精确 因此,您正在查找与给定条目最接近的条目:
desired = 11.07e9;
distances_to_desired = (f_1sided - desired).^2;
[~, closest_index] = min(distances_to_desired);
当然,这里,
desired
是您要查找的f\u 1sided
中的数字,distance\u to\u desired
中的每个值都包含f\u 1sided
到desired
的(平方)距离,最近的索引
是指向f\u 1side的索引
,因此距离最小。为什么是正方形abs()
似乎更合适。这个正方形感觉像是欧几里德的未竟尝试distance@AnderBiguri它们是等价的,所以这是一个品味的问题。此外,abs
可能需要一个分支,使其速度变慢。使用sqrt
获得2-norm也比较慢。非常感谢你,Lumen!-只有一个问题:~
应该做什么?@Luk不客气!波浪号~
忽略min
的第一个返回参数。这将是找到的最小距离。如果您想获得该值,请将~
替换为找到的最小距离
,或任何您喜欢的值。如果minimum\u distance\u found==0
,则找到了所需的确切值。@Lumen是的,是的,但它稍微掩盖了有关实际距离的信息。公平地说,有了这个庞大的阵列,按照您的建议加快速度可能会更好