Luego de de una extensa búsqueda de información dimos con la respuesta esta duda que suelen tener algunos los lectores. Te ofrecemos la respuesta y nuestro deseo es serte de gran ayuda.
Solución:
Cómo redondear elementos en una matriz en Octave:
Hay muchas formas diferentes de redondear una matriz y redondear un número en octavas.
Opción 1, uso de la función de formato sprintf
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
rows = rows(mymatrix);
cols = columns(mymatrix);
for i = 1:rows
for j = 1:cols
sprintf("%5.2f", mymatrix(j,i))
endfor
endfor
Producción, tenga en cuenta el token “%5.2f”. La ‘f’ significa esperar un flotante, el 5 significa ocupar 5 espacios. El 2 significa 2 unidades de precisión después del punto decimal.
ans = 100.12
ans = 3.12
ans = 2.12
ans = 4.12
Opción 2, redondear a dígitos significativos usando eval y mat2str
mymatrix2=[100.1234567, 2.12345; 3.1234567891, 4.1234];
j = mat2str(mymatrix2, 3);
mymatrix2=eval(j)
Producciónmatriz redondeada a 3 dígitos significativos, observe 100.123 redondeado a 100 mientras que el 2.12345 fue redondeado a 2.12
mymatrix2 = 100.0000 2.1200
3.1200 4.1200
Opción 3, usa la función de ronda
La función de ronda no tiene un parámetro de precisión en Octave. Sin embargo, puede modificarlo multiplicando cada elemento de la matriz por 100, redondeándolo al int más cercano y luego dividiendo cada elemento por 100:
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
round(mymatrix .* 100) ./ 100
Producciónla ronda ocurre correctamente:
ans = 100.1200 2.1200
3.1200 4.1200
Opción 4, especifique un output_precision(num)
Notaste que la opción 3 anterior mantuvo los ceros finales, lo que puede ser indeseable, por lo que puedes decirles que desaparezcan configurando output_precision:
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
disp(mymatrix);
output_precision(3)
disp(mymatrix)
Producción:
100.1235 2.1235
3.1235 4.1234
100.123 2.123
3.123 4.123
Octave tiene un comportamiento extraño cuando intenta redondear porque octave se esfuerza por aplicar uniformemente un redondeo uniforme a todos los elementos de una matriz. Entonces, si tiene varias columnas con valores muy diferentes, octave ve un valor pequeño y dice: “Debería convertir eso en un exponencial como 1.0e-04
por lo que se aplica la misma exponencial a toda la estructura de datos de la matriz.
para aquellos que quieren que funcione sin profundizar en la discusión de por qué las cosas son así (es decir, octava round
todavía no admite un segundo argumento que defina la precisión).
SOLUCIÓN ALTERNA:
a = [0.056787654, 0.0554464; 0.056787654, 0.0554464];
a
round_digit = 2;
if exist('OCTAVE_VERSION', 'builtin') ~= 0;
a = a.*(10^(round_digit));
if (a >= 0) a = floor(a); else a = ceil(a); endif;
a = a.*(10^(-round_digit));
else
a = round(a, round_digit);
end
a
Si posees alguna perplejidad y disposición de afinar nuestro artículo puedes dejar un exégesis y con placer lo leeremos.