Matlab - Redondeo de los elementos de una matriz bajo ciertas condiciones

 
Vista:
sin imagen de perfil
Val: 68
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Redondeo de los elementos de una matriz bajo ciertas condiciones

Publicado por Aitor (49 intervenciones) el 21/03/2017 14:21:16
Hola,

Necesito redondear los elementos de un vector para expresarlos con menos números decimales. Hasta aquí ningún problema, sin embargo, necesito hacerlo bajo dos condiciones:

La primera es que su suma sea igual a 1 (ya lo es antes, pero también ha de serlo después del redondeo).

La segunda es que al multiplicar cada número por un cierto número natural dado N, el resultado sea igual a 0 o a un número natural comprendido entre 0 y N.

Todo esto claro está con la mejor precisión posible respecto a los números originales y funcionando siempre.

Os dejo aquí un ejemplo:
1
2
v = [0 0.0179 0.0102 0.0277 0.0392 0.0272 0.0027 0.0055 0.0148 0.0151 0.0137 0.0259 0.0103 0.0336 0.0386 0.0049 0.0065 0.0051 0.0081 0.0441 0.0298 0.0147 0.0243 0.0207 0.0198 0.0006 0.0287 0.0425 0.0088 0.0094 0.0368 0.0090 0.0181 0.0306 0.0158 0.0325 0.0108 0.0268 0.0163 0.0448 0.0395 0.0262 0.0097 0.0114 0.0283 0.0437 0.0103 0.0058 0.0249 0.0083];
N = 100

Muchas gracias de antemano, y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Redondeo de los elementos de una matriz bajo ciertas condiciones

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 21/03/2017 18:17:08
1
2
3
4
5
6
7
8
v = [0 0.0179 0.0102 0.0277 0.0392 0.0272 0.0027 0.0055 0.0148 0.0151 0.0137 0.0259 0.0103 0.0336 0.0386 0.0049 0.0065 0.0051 0.0081 0.0441 0.0298 0.0147 0.0243 0.0207 0.0198 0.0006 0.0287 0.0425 0.0088 0.0094 0.0368 0.0090 0.0181 0.0306 0.0158 0.0325 0.0108 0.0268 0.0163 0.0448 0.0395 0.0262 0.0097 0.0114 0.0283 0.0437 0.0103 0.0058 0.0249 0.0083];
N = 100;
s=round(v*N)./N;
xx=1-sum(s);
nn=randsample(length(s),1);
s(nn)=s(nn)+xx;
disp(s.*N)
disp(sum(s))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar